gpt4 book ai didi

javascript - MediaSource 在 appendBuffer 后关闭

转载 作者:行者123 更新时间:2023-11-30 21:13:57 28 4
gpt4 key购买 nike

我尝试使用 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第二个日志(以及 vid.play() 上的相应错误)。我已经对可能发生的事情一无所知,因此不胜感激。

最佳答案

回答以供进一步引用,要使其正常工作,视频必须在编码上分段。使用以下 ffmpeg 命令就可以了:

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

关于javascript - MediaSource 在 appendBuffer 后关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com