"Cannot play media. No decoders for requested formats"流行的大巴克兔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)) {

就像支持CCD_ 2源一样,因为它不抛出CCD_ 3错误。我也对Cannot play media. No decoders for requested formats错误感到怀疑,因为我的谷歌照片账户上播放的视频完全相同,所以我知道我的浏览器确实支持它

我该如何解决?有没有一种方法可以添加一个";解码器";对于本机不支持的codec类型,或者我可以将视频重新格式化为更常见的支持codec类型吗?该视频是常见的Big Buck Bunny mp4视频之一,所以我也想知道我的代码是否缺少了什么,因为该视频似乎得到了广泛支持。

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

请参阅这篇MDN文章,了解正确重新编码的方法。

最新更新