首页 > 解决方案 > 无法使用 MediaSource 在 Firefox 中重播 MP3,即使它在 Chrome 中工作

问题描述

我在我的网络应用程序中实现了一个简单的音频播放器,并注意到它在 Firefox 中不起作用(让我只是......)。

我得到的是一个错误:

ERROR DOMException: MediaSource.addSourceBuffer: Type not supported in MediaSource

紧随其后的是一个警告:

Cannot play media. No decoders for requested formats: audio/mpeg

这是sourceopen事件处理程序的实现:

private onSourceOpen = (e) => {
  this.logger.debug('onSourceOpen');

  if (!this.sourceBuffer) {
    this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/mpeg');
  }

  this.mediaSource.removeEventListener('sourceopen', this.onSourceOpen);
  this.fetchRange(this.trackPlayUrl, 0, this.segmentLength, (chunk) => this.appendSegment(chunk));
}

在哪里

// Create the media source object
this.mediaSource = new MediaSource();
this.mediaSource.addEventListener('sourceopen', this.onSourceOpen);

它为什么讨厌我?

标签: google-chromefirefoxmedia-source

解决方案


在您尝试创建 SourceBuffer 之前,您应该始终调用MediaSource.isTypeSupported以确定它是否可能播放。如果返回 false,则用户代理告诉您它肯定不会工作。

在最新的 Firefox 上:

>> MediaSource.isTypeSupported('audio/mpeg')
<- false

它讨厌你,因为 Firefox 的 MediaSource 实现不能播放具有那种 MIME 类型的内容,而 Chrome 可以。

ISOBMFF 中的 AAC 具有非常广泛的支持,尽管这需要对您的音频进行转码和重新打包 - 尝试:

MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"')

推荐阅读