无法使用 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"')
我在我的 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"')