使用媒体源扩展符合DOMException:无法加载,因为找不到支持的源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用媒体源扩展符合DOMException:无法加载,因为找不到支持的源相关的知识,希望对你有一定的参考价值。

我用ffmpeg变换mp4到m3u8;它保持相同的编解码器值。当我使用fetch获取ts缓冲区并将其附加到MSE实例时。如此糟糕。它不起作用。

一些代码在这里:

function sourceOpen(e) {
    URL.revokeObjectURL(video.src);
    // var mime = 'video/mp4; codecs="avc1.42c015, mp4a.40.5"';avc1.42001e"
    var mime = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
    var mediaSource = e.target;
    sourceBuffer = mediaSource.addSourceBuffer(mime);
    var videoUrl = './video/' + playManifest.segments[index]['uri'];
    log('.js-log-m3u8', 'Fetch Segment ~' + videoUrl);
    fetch(videoUrl, {
        // headers: { range: 'bytes=0-5671398' }
    })
        .then(function (response) {
            return response.arrayBuffer();
        })
        .then(function (arrayBuffer) {
            sourceBuffer.appendBuffer(arrayBuffer);
            sourceBuffer.addEventListener('updateend', updateEnd);
        });
}

Entire Code

在线测试页面:http://events.jackpu.com/media-source/

答案

您正在将mime类型设置为video / mp4,但尝试将传输流段附加到源缓冲区。结果,附加失败并且没有数据被缓冲。

一旦获取了所有段,就调用play,而不检查是否有任何数据被缓冲,并且Promise拒绝。

假设您的用户代理能够执行此操作,则需要使用正确的mime类型创建SourceBuffer。

以上是关于使用媒体源扩展符合DOMException:无法加载,因为找不到支持的源的主要内容,如果未能解决你的问题,请参考以下文章

使用媒体源扩展逐帧解码

如何使用媒体源扩展 (MSE) 低延迟模式

为啥媒体源扩展中没有文件格式(例如 HLS 或 DASH)的规范?

将媒体源扩展 (MSE) 与 WebRTC 进行比较

将 MPEG4 源过滤器扩展到其他媒体类型

未捕获的 DOMException:无法使用 JQuery 设置“innerHTML”属性