流行的 Big Buck Bunny mp4 视频中的“无法播放媒体。没有所需格式的解码器”

现在_世界

我正在尝试使用MediaSource播放我的视频:

const videoTag = document.getElementById('theVideoId');
const mimeCodec = 'video/mp4; codecs="' + audioCodec + ', ' + videoCodec + '"';

if (!('MediaSource' in window) || !MediaSource.isTypeSupported(mimeCodec)) {
    console.error('Unsupported MIME type or codec: ', mimeCodec);
}

const mediaSource = new MediaSource();

videoTag.src = URL.createObjectURL(mediaSource);
videoTag.crossOrigin = 'anonymous';

await new Promise((resolve, reject) => {
    mediaSource.addEventListener('sourceopen', function (_) {
        console.log(this.readyState); // open
        resolve();
    });
});

const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);

//....

sourceBuffer.appendBuffer(new Uint8Array(chunk));

使用上面的代码,一些视频播放得很好。其他的,给个警告:

Cannot play media. No decoders for requested formats: video/mp4; codecs="mp4a.40.2 avc1.4d400c", video/mp4; codecs="mp4a.40.2 avc1.4d400c" 

有趣的是我if在上面的代码中的声明

if (!('MediaSource' in window) || !MediaSource.isTypeSupported(mimeCodec)) {

就像mimeCodec支持源一样,因为它不会抛出Unsupported MIME type or codec错误。我也怀疑这个Cannot play media. No decoders for requested formats错误,因为我的 Google 相册帐户上播放的视频完全相同,所以我知道我的浏览器确实支持它。

我该如何解决?有没有办法为本codec机不支持的类型添加“解码器”,或者我可以将视频重新格式化为更常见的支持codec类型吗?该视频是常见的Big Buck Bunny mp4视频之一,因此我还想知道我的代码是否缺少某些内容,因为该视频似乎得到了广泛支持。

海道

MediaSource 扩展只支持碎片化的 mp4,w3school 托管的文件不碎片化。

有关正确重新编码的方法,请参阅此 MDN 文章

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章