使用 C++ 教程和示例代码进行音频流传输 [关闭]

Posted

技术标签:

【中文标题】使用 C++ 教程和示例代码进行音频流传输 [关闭]【英文标题】:Audio streaming using C++ tutorial and sample code [closed] 【发布时间】:2012-07-19 17:20:15 【问题描述】:

我想学习音频流的基础知识。特别是,我想学习如何从计算机麦克风捕获音频,并实时流式传输,以便其他用户可以实时收听。我想在 Windows 上做。

是否有任何好的教程来解释它是如何完成的,以及一些我可以查看更多细节的示例 C++ 代码?

我还听说 ASIO 提供了一个低延迟库,所以我对此很感兴趣。

【问题讨论】:

一个好的开始是说明您的目标平台。由于 C++ 没有用于声音的原生 API,因此您将不得不依赖第三方库,其中大部分是特定于平台的。 谢谢,我对 Windows 和 ASIO 库很感兴趣。但更重要的是一个解释音频流是如何完成的教程,例如什么是服务器或套接字等。 这样的问题结束是怎么回事?这是一个严重相关的问题。在 PC 平台上用于实时音频的良好工作示例代码是一个严重的持续问题。 【参考方案1】:

如果您使用的是 Windows,也许 here 是一个不错的起点?

阅读该页面并查看WASAPI。

您可以使用IAudioCaptureClient直接从设备捕获原始音频

我参与了涉及实时音频流的项目,并使用aac 作为音频格式,使用Live555 作为流媒体库。这些可能是一个很好的起点。

【讨论】:

谢谢,我想知道是否有一个教程解释了音频流是如何完成的,还有一些示例 C++ 代码展示了它是如何实现的? 看来这本书确实不错。而且水平也足够低,可以学到很多跨平台的东西。 amazon.com/Learning-Core-Audio-Hands-On-Programming/dp/…我可能错了,如果有 Windows 专用的书也一样好,请告诉我! 你的问题很宽泛 TJ1。如果您想了解更多关于套接字和服务器的信息,听起来您应该首先使用winsock 开始寻找一些基本的网络教程,也许在这里? johnnie.jerrata.com/winsocktutorial 否则Live555是开源的,如果你想爬取一些源代码。学习网络基础知识,然后开始考虑流式传输。 @ChrisBarry 感谢本书的建议,我会看一下本书的内容,如果有 Windows 等价物,我会告诉你。【参考方案2】:

对于在 Windows 上录制和播放音频,我推荐the waveform audio API。您有一个示例 here 用于记录来自麦克风的数据。

对于流媒体部分,如果你想使用已经可用的多媒体流媒体服务器,我会推荐icecast,它的API lib。

如果你想自己实现网络流,那么你可以使用asio lib。你有一些例子here。

对于客户端的音频播放,有使用波形APIhere的教程。

【讨论】:

谢谢,这很有用,我会看看你的建议。 没有。 MMIO 有可怕的延迟。甚至不值得一看,最近的操作系统也没有相关改进。 Windows 上的 MMIO API 对实时音频来说是一场灾难。很少有低于 100 毫秒的延迟。不值得追求。 WASAPI 应该解决 Windows 的实时音频问题,但无法在 Windows 7 平台上提供任何低于 30 毫秒延迟的东西。有一些证据表明 WASAPI 在 Windows 8 上工作得更好。但我在让它可靠地工作时遇到了严重的问题。如果您追求低延迟音频,ASIO 可能仍然是要走的路。很遗憾。 Microsoft 从未提供过可靠的实时音频样本。一个严重的持续问题。

以上是关于使用 C++ 教程和示例代码进行音频流传输 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

音频流 C++ 服务器/客户端

通过 SIP 连接的 J2ME 音频流

收听实时音频流

Red5 和安卓。流音频

我的 OpenAL C++ 音频流缓冲区故障

从 URL 实时流式传输音频的 RadioKit 替代方案