H264 视频使用 src 属性工作。使用 MediaSource API (Chromium) 相同视频失败

2023-11-23

http://www.youtube.com/html5表示 Google Chrome 兼容 MediaSource Extensions 和 H.264。

我做了一个简单的测试,检查我的视频是否受 Chromium 支持,使用 视频>

视频播放流畅。

第二种方法也可以正常工作,即通过 AJAX 加载字节链并将缓冲区转换为 URI 对象。然后将此类 URI 分配给(视频)source.src 属性。

最后,我尝试通过 AJAX 加载相同的视频并将其注入 MediaSource 缓冲区。它失败并显示错误 4。(源不受支持)。

使用的代码类似于:

var mediaSource = new (window.MediaSource || window.WebKitMediaSource)();
window.video = document.getElementById('video1');
window.video.addEventListener("error", function onError(err) {
    alert("window.video error detected:");
    console.dir(window.video.error); window.worker.terminate();
}); 
window.video.pause();
window.video.src = URL.createObjectURL(mediaSource);
var onMediaSourceOpen = function (e) {
    mediaSource.removeEventListener('sourceopen', onMediaSourceOpen);
    window.videoSource = mediaSource.addSourceBuffer('video/mp4;codecs="avc1.4d001e,mp4a.40.2"');
    injectVideoIntoBuffer();
}   

mediaSource.addEventListener('sourceopen', onMediaSourceOpen);

var injectVideoIntoBuffer = function onResponse() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', "test.mp4");
    xhr.responseType = 'arraybuffer';
    xhr.addEventListener("readystatechange", function () {
         // Next line raises a MediaError, code: 4, (MEDIA_ERR_SRC_NOT_SUPPORTED)
         videoSource.appendBuffer(new Uint8Array(xhr.response));
          ... 
    }, false);
    xhr.send();
}

我尝试了使用 ffmpeg/avconv 或 MP4Box 生成的不同 mp4 文件。此刻不走运。类似的代码可以很好地处理 VP8/WebM 测试文件。

预先感谢您提供任何帮助/提示或链接!

Enrique


感谢大家的回答。看来新版本的 Chrome 解决了这个问题。

我错误地认为如果浏览器支持某个编解码器,MSE 也会自动支持它。但实际情况并非如此。浏览器可以支持一组视频编解码器(h264/webM/theora/...),它也可以支持 MSE,但在将视频“注入”MSE 缓冲区时仅支持视频编解码器的子集。

MSE 和编解码器之间的兼容性矩阵不仅取决于浏览器,还取决于操作系统。例如,Google Chrome 在 Windows 和 Android 上支持 MSE+h264,但在 Linux 上还不支持(还?)。 Windows 和 Linux 支持 VP9+MSE,但 Android 不支持。

YouTube 有一个非常有用的测试页面来检查浏览器对 MSE 和 h264/VP9 编解码器的支持:

https://www.youtube.com/html5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H264 视频使用 src 属性工作。使用 MediaSource API (Chromium) 相同视频失败 的相关文章

随机推荐