MediaSource在appendBuffer之后关闭

时间:2017-08-24 17:20:43

标签: javascript media-source

我有两个我尝试使用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}上的错误})。我已经对可能发生的事情缺乏想法,所以对任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

要求进一步参考,要使其工作,视频必须在编码时分段。使用以下ffmpeg命令可以解决问题:

ffmpeg -i input.mp4 -movflags frag_keyframe+empty_moov+default_base_moof output_frag.mp4