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