问题描述
我已经在我的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"')