创建基于OPUS编解码器的组播服务器(android/linux)

Fri*_*t89 5 linux android multicast codec audio-streaming

我正在尝试为我正在处理的音频项目创建一个基于OPUS的多播服务器,它将在O-Droid X上运行(http://www.hardkernel.com/renewal_2011/products/prdt_info.php?g_code = g133999328931)这个项目.目前我不确定从哪里开始创建和使用OPUS编解码器在linux或android中制作多播服务器.这是我从头开始做的第一个音频支持多播服务器.如果有任何指针,他们将非常感激.

此外,通过网页访问它并通过该网页播放将是一个理想的情况,因此不需要客户端的特定应用程序.

Geo*_*gie 1

显然 Icecast 可以满足您的很多需求。它是开源的(GPL)并支持使用 Ogg 容器格式的 Opus 流,您可以了解一些通用的软件架构思想。我的 SoundWire Android 应用程序(带有 Win/Linux 服务器)以低延迟进行 Opus 流式传输,但网络协议是自定义的...我不知道有任何既定的开放协议可以实现低延迟(根据我的定义,1 秒延迟并不低)潜伏)。

我的方法是构建一个传统的网络服务器,为每个客户端设置一个普通的单播 UDP 套接字。如果您想要低延迟,请避免使用 TCP,那么您必须以某种方式处理 UDP 的数据报性质。使用 Opus,每个客户端传输的数据量并不会过多。我仅将多播用于发现(自动定位服务器)。

我建议你从一些开源服务器代码开始,并根据你的需求进行调整,引入非常容易集成的Opus,如果合适的话选择Ogg等容器格式(搜索Ogg Opus)。如果您想要浏览器兼容性,那么您或多或少会实现 Web 服务器的一部分(HTTP 等),并且必须放弃低延迟目标。

  • 只是一些一般性的想法...保持缓冲区大小尽可能小,避免臃肿的库,不要使用 TCP,编写确定性的代码(一致的行为),如果可能的话调整线程优先级,仔细选择平台(例如如果在 C++ 和 Java 之间进行选择,请选择 C++)。简而言之,思考精益和平均。最后意识到有两个重要因素意味着您永远无法完全实现您的目标:IP 网络并不是为可预测性或低延迟而设计的,而且您的代码运行的非实时操作系统也不是。 (2认同)