【问题标题】:Low-latency Opus over HTTP/TCP?基于 HTTP/TCP 的低延迟 Opus?
【发布时间】:2014-10-30 19:42:52
【问题描述】:

试图找到一种合适的技术/容器来通过 HTTP/TCP 流式传输实时低延迟 Opus?

Ogg 容器当然是显而易见的选择。但是,对于低比特率 Opus(

【问题讨论】:

    标签: audio-streaming ogg opus


    【解决方案1】:

    使用 WebAssembly,我们可以在 2mbps 的连接上以 https://fetch-stream-audio.anthum.com/

    【讨论】:

      【解决方案2】:

      由于 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 数据包,每个数据包以一或两个字节为前缀,表示数据包长度。

      【讨论】:

      • 不需要5s的音频缓冲,using a WebAssembly stream decoder
      【解决方案3】:

      Here are some Opus streams over HTTP 使用 Icecast

      Icecast 是目前支持 Ogg 的流媒体服务器 (Vorbis 和 Theora)、Opus、WebM 和 MP3 音频流。可以使用 创建互联网广播电台或私人点唱机和 中间有很多东西。它非常通用,新格式可以 相对容易添加并支持开放标准 交流和互动。

      Icecast 在 GNU GPL 第 2 版下分发。

      【讨论】:

      • 如果您需要低延迟,实际上这不是一个好的解决方案。 Icecast 专为流畅的流式传输而设计,因此延迟很大并且到处都有缓冲区。
      • Opus 是为实时即兴演奏而制作的,因此 Icecast 应该允许这样做。
      【解决方案4】:

      我知道获得低延迟的唯一方法是使用 WebRTC。它就是为此而构建的,没有其他任何基于网络的东西。

      您不一定能够选择您的编解码器(至少不能使用更高级别的 API),并且编解码器和比特率协商是标准的一部分。但是,对于任何基于 Web 的东西,除了浏览器插件之外,您将获得最低的延迟。

      【讨论】:

      • WebRTC 利用 SRTP over UDP 进行媒体传输。 RTP/SRTP 不提供媒体数据包的成帧,因为成帧是 UDP 固有的。因此,基于 TCP/HTTP 的 RTP/SRTP 本身不足以成为 Opus 的容器。
      • @user3569107 我不熟悉底层实现...我只使用了一些方便的抽象来使用 WebRTC。但是,WebRTC 不是必须支持 Opus 吗?
      • 是的,但问题涉及 Opus over HTTP,我需要一个解决方案。在其他情况下,WebRTC 似乎是低延迟 Opus 的理想解决方案。
      • @user3569107 我明白了。不幸的是,我认为 HTTP 上没有低延迟的解决方案。但是,如果你找到答案,一定要回来发布答案!我有兴趣看看。
      猜你喜欢
      • 2011-04-20
      • 2023-04-10
      • 1970-01-01
      • 2015-05-23
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多