我有两个我尝试使用MediaSource播放的视频,但其中只有一个有效。两者都将编解码器设置为avc1.4d401f和mp4a.40.2,但是当其中一个播放得很好时,另一个会在SourceBuffer上调用appendBuffer时关闭MediaSource。代码的相关位如下:
var mainSource;
var mimeCoded = 'video/mp4; codecs="avc1.4d401f,mp4a.40.2"';
mainSource = new MediaSource();
var sourceBuffer;
mainSource.addEventListener('sourceopen', () => {
console.log('readystate', mainSource.readyState);
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.open('get', 'main.mp4');
xhr.addEventListener('load', (e) => {
sourceBuffer = mainSource.addSourceBuffer(mimeCoded);
sourceBuffer.mode = 'sequence';
sourceBuffer.addEventListener('updateend', onUpdateEnd);
sourceBuffer.appendBuffer(e.target.response);
console.log('updating', sourceBuffer.updating);
});
xhr.send();
});
vid.src = URL.createObjectURL(mainSource);
onUpdateEnd = function ()
{
console.log('readystate2', mainSource.readyState, sourceBuffer.updating);
vid.play();
sourceBuffer.removeEventListener('updateend', onUpdateEnd);
};
使用其中一个视频时,mainSource.readyState
上的两个日志都会输出open
,但另一个日志会在第二个日志中显示closed
(因此{{1}上的错误})。我已经对可能发生的事情缺乏想法,所以对任何帮助表示赞赏。
答案 0 :(得分:0)
要求进一步参考,要使其工作,视频必须在编码时分段。使用以下ffmpeg命令可以解决问题:
ffmpeg -i input.mp4 -movflags frag_keyframe+empty_moov+default_base_moof output_frag.mp4