【发布时间】:2014-10-30 19:42:52
【问题描述】:
试图找到一种合适的技术/容器来通过 HTTP/TCP 流式传输实时低延迟 Opus?
Ogg 容器当然是显而易见的选择。但是,对于低比特率 Opus(
【问题讨论】:
标签: audio-streaming ogg opus
试图找到一种合适的技术/容器来通过 HTTP/TCP 流式传输实时低延迟 Opus?
Ogg 容器当然是显而易见的选择。但是,对于低比特率 Opus(
【问题讨论】:
标签: audio-streaming ogg opus
使用 WebAssembly,我们可以在 2mbps 的连接上以 https://fetch-stream-audio.anthum.com/
【讨论】:
由于 Ogg 的设计方式,OggOpus 绝对不适合低延迟流式传输。我假设您已经对此有所了解,因为您提到了页面,但为了 StackOverflow 的好处:Opus 数据包被安排到 Ogg 页面中,每个页面通常包含 255 个 Opus 数据包。每个 Opus 数据包通常是 20 毫秒的音频。每个 Ogg 页面都包含一个校验和来验证其内容,并且在计算出校验和之前,该页面不能在线发送,因此直到整个页面都被填满。 20 毫秒 * 255 个数据包 = 大约 5 秒的音频必须被缓冲,然后才能通过线路发送音频,从用户的角度来看,这是一个很大的延迟。
确实,您可以每页发送更少的数据包,但这会导致更高的数据开销,因为您需要创建更多的 ogg 页面,并且在低级别(每页只有几个数据包)开销变得如此之大,以至于几乎首先取消音频压缩。
WebRTC 是网络上实时 Opus 音频的典型解决方案;但是,它还假设您使用的是对数据报(例如 UDP、WebSocket)而不是作为连续流(例如 TCP)进行操作的传输层。当我想为 Microsoft 语音服务实现 Opus 接口时,我就想到了这个问题——因为我希望通过 TCP 流实现低延迟和低开销的语音。 Opus 开发人员建议在Opus' own frame length coding 之后使用简单的长度前缀协议。使用这样的协议,您只需发送原始 Opus 数据包,每个数据包以一或两个字节为前缀,表示数据包长度。
【讨论】:
Here are some Opus streams over HTTP 使用 Icecast。
Icecast 是目前支持 Ogg 的流媒体服务器 (Vorbis 和 Theora)、Opus、WebM 和 MP3 音频流。可以使用 创建互联网广播电台或私人点唱机和 中间有很多东西。它非常通用,新格式可以 相对容易添加并支持开放标准 交流和互动。
Icecast 在 GNU GPL 第 2 版下分发。
【讨论】:
我知道获得低延迟的唯一方法是使用 WebRTC。它就是为此而构建的,没有其他任何基于网络的东西。
您不一定能够选择您的编解码器(至少不能使用更高级别的 API),并且编解码器和比特率协商是标准的一部分。但是,对于任何基于 Web 的东西,除了浏览器插件之外,您将获得最低的延迟。
【讨论】: