我们需要用一个没有插件的解决方案来取代我们的NPAPI浏览器插件。我们有第三方输入设备,为我们提供实时音频形式的Opus‘帧’。我们使用二进制WebSockets将这些帧传输到浏览器,然后将数据转发到我们的NPAPI插件进行解码和音频播放。见图。
考虑到这些需求,我们应该采取什么方法来用HTML5 5 ish解决方案来替换NPAPI插件呢?
使用html5音频标记似乎会带来巨大的延迟,因为在开始播放之前,各种浏览器都需要一定数量的缓冲(15-30个音频)。我们理解所有浏览器都可能支持Opus,也可能不支持Opus。如果需要(尽管我们不想减少带宽),在将数据发送到浏览器之前,我们可以将Opus帧封装到web服务中的Ogg容器中。从html5rocks,HTML5音频游乐场的一个演示来看,似乎#2是可能的。
如果这里不适合提出这样的设计问题,请建议其他可能更合适的论坛/小组。
谢谢您的帮助或建议。
发布于 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和一些旧的移动浏览器找到一个解决方案。
发布于 2015-02-04 23:29:14
由于您将需要管理所有的缓冲,而不是您自己,我认为最好的选择是实际解码JavaScript中的Opus帧。作为奖励,您将获得更好的浏览器支持。
Aurora.js项目对此有支持:https://github.com/audiocogs/opus.js,虽然在现阶段还有点实验性。
如果您不必使用Opus和WebSocket,那么您可以使用更多的选项。在大多数情况下,标准的<audio>
标记不需要超过几秒钟的音频缓冲区就可以开始播放。当它这样做时,通常是因为内容类型头错误,而播放器软件必须弄清楚它是什么,需要一个更大的缓冲区来处理。或者,还有其他一些同步问题。
https://stackoverflow.com/questions/28326774
复制相似问题