即使可以在Chrome中运行,也无法使用MediaSource在Firefox中重播MP3

问题描述

我已经在我的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,this.segmentLength,(chunk) => this.appendSegment(chunk));
}

哪里

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

为什么讨厌我?

解决方法

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

在最新的Firefox上:

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

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...