mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
920be8b5ee
Creating the file was made in the following way: - Create a VBR file - Modify the padding field so that it spans multiple packets (greater than 1152 frames in this case) - Copy and paste the last mp3 packet (starting with 0xfffd) multiple times so that more packets are found after having trimmed the last packet (marked as EOS). Differential Revision: https://phabricator.services.mozilla.com/D184213
53 lines
2.2 KiB
HTML
53 lines
2.2 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
|
|
<head>
|
|
<title>Test playback of broadcast-like streams</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
<script type="text/javascript" src="manifest.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<audio controls id=a style="width: 100%;"></audio>
|
|
<script type="module">
|
|
SimpleTest.waitForExplicitFinish();
|
|
const streams = [
|
|
// An mp3 bytestream consisting of a complete mp3 file with a XING
|
|
// header, that has duration information, but served without a
|
|
// `Content-Length`. It is followed by a second mp3 bytestream that
|
|
// also has a XING header. While some software are able to play the
|
|
// entire file, Web browser don't.
|
|
{ src: "two-xing-header-no-content-length.mp3", duration: 1 },
|
|
// An mp3 bytestream consisting of a complete mp3 file with a XING
|
|
// header, that has duration information, but served without a
|
|
// `Content-Length` header. It is followed by a second mp3 bytestream that
|
|
// doesn't have a XING header.
|
|
// This scenario is typical in radio broadcast scenario, when the
|
|
// live-stream has a pre-recorded prelude. The reported duration,
|
|
// after "ended" has been received, is the duration of playback.
|
|
{ src: "single-xing-header-no-content-length.mp3", duration: 11.050839},
|
|
];
|
|
var audio = window.a;
|
|
// Prevent ESLint error about top-level await
|
|
(async function () {
|
|
for (let i of streams) {
|
|
audio.src = i.src;
|
|
audio.load();
|
|
audio.play();
|
|
audio.onerror = (e) => {
|
|
ok(false, `${i}: error: ${e.message}}`);
|
|
};
|
|
await once(audio, "ended");
|
|
ok(true, `${i}: playback through the end`);
|
|
is(audio.duration, i.duration, "Duration at end is correct");
|
|
is(audio.currentTime, i.duration, "Current time at end is correct");
|
|
}
|
|
SimpleTest.finish();
|
|
})()
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|
|
|