是否有可能让 HTML5 视频标签在我将它们附加到 SourceBuffer 时尽可能多地播放片段?因此,例如,如果我附加片段 2 - 即使没有片段 1,我希望它立即播放片段 2,如果我再次附加片段 2 - 我希望它再次播放片段 2。
我已经尝试向 MediaSource 传递一个没有 fragment1 的初始段 + fragment2,但我发现它不是立即播放它,而是用它填充时间线的相应部分。因此,如果我寻找相应的位置 - 它会开始播放它,但如果我不这样做 - 它不会(除非我也通过 fragment1,ofk)。更不用说即使我再次将 fragment2 附加到 SourceBuffer,它也不会自动再次播放,直到我寻找。
这是我用来生成 MP4/DASH 流的一种方式:
$ MP4Box -dash 30000 -dash-profile on-demand -segment-name output-seg output.mp4
$ cat output-seginit.mp4 output-seg2.m4s >test.mp4
这是相应的 HTML5/JavaScript 代码:
<audio id="player" controls></audio>
<script>
var player = document.querySelector("#player");
var mediaSource = new MediaSource();
player.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', function() {
console.log('sourceopen');
var sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="mp4a.40.2"'); // My video only contains audio stream
var xhr = new XMLHttpRequest()
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
console.log("appendBuffer");
sourceBuffer.appendBuffer(event.target.response);
}
xhr.open('GET', 'test.mp4');
xhr.send(null);
});
</script>
有可能做我想做的事吗?此外,如果有人能建议我一个正确的词如何称呼它,我将不胜感激 - 我将其称为“直播”,但我不确定。