gpt4 book ai didi

javascript - 无法让 MediaSource 在 chrome 中使用 mp4 格式

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:16 25 4
gpt4 key购买 nike

基于示例here

我下载了 webm 文件并将其编码为可以在本地播放的 mp4 文件,但我无法将其用作媒体源。

MP4Box 报告编解码器为 avc1.64000d,mp4a.40.2 但将其添加到源缓冲区没有帮助。

这是一个demo问题的原因(我不希望它在 firefox 中工作,因为尚不支持媒体源扩展)

这是我正在测试的代码:

 var FILE,CODEC,mediaSource;
var NUM_CHUNKS = 5;
var video = document.querySelector('video');
window.MediaSource = window.MediaSource || window.WebKitMediaSource;
if (!!!window.MediaSource) {
alert('MediaSource API is not available');
}
function callback() {
var sourceBuffer = mediaSource.addSourceBuffer(CODEC);
GET(FILE, function(uInt8Array) {
var file = new Blob([uInt8Array], {type: 'video/mp4'});
var chunkSize = Math.ceil(file.size / NUM_CHUNKS);
var i = 0;
(function readChunk_(i) {
var reader = new FileReader();
reader.onload = function(e) {
sourceBuffer.appendBuffer(new Uint8Array(e.target.result));
if (i == NUM_CHUNKS - 1) {
mediaSource.endOfStream();
} else {
if (video.paused) {
video.play();
}
readChunk_(++i);
}
};
var startByte = chunkSize * i;
var chunk = file.slice(startByte, startByte + chunkSize);
reader.readAsArrayBuffer(chunk);
})(i);
});
}
function GET(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.send();
xhr.onload = function(e) {
if (xhr.status != 200) {
alert("Unexpected status code " + xhr.status + " for " + url);
return false;
}
callback(new Uint8Array(xhr.response));
};
}
function start(type) {
if (type == 'webm') {
FILE = 'test.webm';
CODEC = 'video/webm; codecs="vorbis,vp8"';
}
if (type == 'mp4') {
FILE = 'test.mp4';
CODEC = 'video/mp4; codecs="avc1.64000d,mp4a.40.2"';
}
mediaSource = new MediaSource();
video.src = window.URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', callback, false);
mediaSource.addEventListener('webkitsourceopen', callback, false);
mediaSource.addEventListener('webkitsourceended', function(e) {
}, false);
}

最佳答案

问题出在您的文件上。媒体源扩展需要文件开头带有 moov(电影标题框)的片段 MP4,在您的情况下,它放在最后。

还需要在 mdat(媒体数据框)之前有一个 moof(电影片段框)。 MP4Box 能够生成符合 DASH 标准的碎片化 mp4,但我建议您使用他们最新的 nightly发布。

MP4Box -dash 1000 -rap -frag-rap test.mp4

这将生成结构正确的片段 mp4 文件,并将 moov 放在文件的开头。每个片段将是 1 秒,从一个关键帧开始。

关于javascript - 无法让 MediaSource 在 chrome 中使用 mp4 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996665/

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