无法使用 MediaSource 在 Firefox 中重播 MP3,即使它在 Chrome 中有效

Cannot replay MP3 in Firefox using MediaSource even though it works in Chrome

我在我的 Web 应用程序中实现了一个简单的音频播放器,但发现它在 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);

它为什么讨厌我?

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

在最新的 Firefox 上:

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

它讨厌你,因为 Firefox 的 MediaSource 实现无法播放该 MIME 类型的内容,而 Chrome 可以。

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

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