"Cannot play media. No decoders for requested formats" 热门 Big Buck Bunny mp4 视频

"Cannot play media. No decoders for requested formats" on popular Big Buck Bunny mp4 video

我正在尝试使用 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 扩展仅支持,w3school 托管的文件没有碎片。

请参阅 this MDN article 以了解正确重新编码的方法。