【发布时间】:2023-03-31 06:07:01
【问题描述】:
我想写 Skype 之类的东西,即我在一台计算机上有一个恒定的音频流,然后重新压缩它以适合潜在互联网连接的格式,在另一端接收它并玩吧。
我们还假设互联网连接相当现代且快速,即 DSL 或类似的,没有通过电话等的慢速连接。所涉及的计算机也将是相当现代的(2GHz 或更高的双核 Intel CPU)。
我知道如何处理机器上的音频。我不知道如何以有效的方式传输音频。
挑战是:
我想获得良好的全线音频质量。
应该接收流而不丢包。然而,接收流可能会有一点延迟(第二个延迟是可以接受的)。我想传输软件可以首先确定平均(和最大)延迟,然后启动流并告诉接收器在开始播放音频之前等待最大延迟。这样一来,如果延迟没有变得更高,整个流将可以在另一端播放而不会卡顿或掉线。
如果由于意外的 IP 延迟或阻塞,流确实被切断,我希望能够注意到这一点,以便我可以采取措施(例如中止流)并最终开始新的传输。
如果我想使用现成的软件进行压缩和传输,我有哪些选择?我真的没有打算编写自己的音频压缩引擎。 OTOH,我打算在垂直市场上销售解决方案,这意味着我可以负担每份几美元的许可费,但不是 100 美元。
我想最简单的解决方案是只打开一个 TCP 流,来回发送一些数据包以确定它们的运行时间(或者甚至为此使用 UDP),然后使用结果作为我的最大延迟值的指南,然后简单地以原始形式(未压缩的 16 位立体声)触发音频数据,以及通过 TCP 连接的计时码。接收器读取数据并以预定延迟播放。这可能只适用于我期望的快速连接类型。
我只是想知道是否有更好的解决方案来实现这一目标,具有更好的性能(更低的延迟)和更少的数据(压缩)。
顺便说一句,我首先尝试在 OS X 上实现它,但如果成功的话,我可能也想在 Windows 上实现它。
【问题讨论】:
标签: macos audio audio-streaming