google-chrome - 无法使用 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);
它为什么讨厌我?
解决方案
在您尝试创建 SourceBuffer 之前,您应该始终调用MediaSource.isTypeSupported
以确定它是否可能播放。如果返回 false,则用户代理告诉您它肯定不会工作。
在最新的 Firefox 上:
>> MediaSource.isTypeSupported('audio/mpeg')
<- false
它讨厌你,因为 Firefox 的 MediaSource 实现不能播放具有那种 MIME 类型的内容,而 Chrome 可以。
ISOBMFF 中的 AAC 具有非常广泛的支持,尽管这需要对您的音频进行转码和重新打包 - 尝试:
MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"')
推荐阅读
- java - 在java中返回一个泛型而不强制转换它?
- python - python将列表中的项目解析为字符串
- python - 类型错误:'在
' 需要字符串作为左操作数,而不是列表错误 - javascript - 一个 PHP 程序中的 JS/HTML/PHP 和通过服务器发送事件的 MYSQL 更新
- switch-statement - Discord.js 在 Switch 中的默认命令问题
- android - 使用 Room 观察多个表中的数据变化
- regex - 用 1 个正则表达式匹配 2 个 Pulse Secure 事件
- swift - Swift 在自定义标识符之间使 UILabel 文本加粗
- excel - excel本机数据库查询 - 默认情况下接受弹出消息?
- python - Pyinstaller 不支持 Com Server 和 py2exe 在最近的 python3 中不维护