首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HTML5:在没有浏览器插件的情况下播放实时Opus音频帧

HTML5:在没有浏览器插件的情况下播放实时Opus音频帧
EN

Stack Overflow用户
提问于 2015-02-04 16:43:16
回答 2查看 4.2K关注 0票数 7

我们需要用一个没有插件的解决方案来取代我们的NPAPI浏览器插件。我们有第三方输入设备,为我们提供实时音频形式的Opus‘帧’。我们使用二进制WebSockets将这些帧传输到浏览器,然后将数据转发到我们的NPAPI插件进行解码和音频播放。见图。

考虑到这些需求,我们应该采取什么方法来用HTML5 5 ish解决方案来替换NPAPI插件呢?

  1. 将端到端延迟最小化到不超过3-5秒(假设200 5s往返网络延迟)。
  2. 提供一种应用音频过滤器的方法(客户机/浏览器端)

使用html5音频标记似乎会带来巨大的延迟,因为在开始播放之前,各种浏览器都需要一定数量的缓冲(15-30个音频)。我们理解所有浏览器都可能支持Opus,也可能不支持Opus。如果需要(尽管我们不想减少带宽),在将数据发送到浏览器之前,我们可以将Opus帧封装到web服务中的Ogg容器中。从html5rocks,HTML5音频游乐场的一个演示来看,似乎#2是可能的。

如果这里不适合提出这样的设计问题,请建议其他可能更合适的论坛/小组。

谢谢您的帮助或建议。

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 18:55:48

我也有类似的情况。我一直在使用WebSockets和Media扩展来播放Google中的MP3提要,但是当与MSE一起使用时,其他浏览器不支持MP3编解码器。事实证明,大多数浏览器,至少是Chrome、Firefox、Opera和Edge,只要适当地封装在MP4或WebM容器中,就可以使用MSE本地播放Opus。

在Ogg中打包Opus非常简单,I 将我找到的一些代码从JavaScript转换为C#

在WebM中打包Opus要稍微复杂一些。我从零开始编写这个C#代码,基于WebM/马特罗斯卡EBML规范。当通过HTTP提供服务时,它可以在Chrome和Firefox中正常运行,但是VLC似乎无法通过HTTP传输Opus/WebM。至少Chrome要求时间顺序从0开始,因此在服务器端打包并不是一个好的选择,因为这需要对分发系统进行修改。

最后,我将其移植到JavaScript,这样每个客户端都可以用时间戳将WebM中的Opus框架正确地打包,从0开始。在Chrome和Firefox中,这可以在没有预缓冲的情况下启动实时流。请注意,我在传入的websocket数据包上使用了一个4字节的头,因为现有的分发系统不保留数据包边界(它是为MP3流构建的)。如果每帧使用一个websocket框架,并且每个帧使用固定数量的示例,则可以删除此标头。

现在剩下的就是为IE11,Safari和一些旧的移动浏览器找到一个解决方案。

票数 4
EN

Stack Overflow用户

发布于 2015-02-04 23:29:14

由于您将需要管理所有的缓冲,而不是您自己,我认为最好的选择是实际解码JavaScript中的Opus帧。作为奖励,您将获得更好的浏览器支持。

Aurora.js项目对此有支持:https://github.com/audiocogs/opus.js,虽然在现阶段还有点实验性。

如果您不必使用Opus和WebSocket,那么您可以使用更多的选项。在大多数情况下,标准的<audio>标记不需要超过几秒钟的音频缓冲区就可以开始播放。当它这样做时,通常是因为内容类型头错误,而播放器软件必须弄清楚它是什么,需要一个更大的缓冲区来处理。或者,还有其他一些同步问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28326774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档