c++ - 通过socket接收音频文件

标签 c++ c sockets audio recv

我正在尝试从 C 套接字接收文件(音频、.CAF)(C++ 解决方案也可以)。我已经使用字符串对其进行了测试,使套接字通信正常工作。我的问题是我不知道要向 recv(socket, buffer, buffer_size, 0) 中的第二个参数提供什么。我应该制作什么类型的“缓冲区”?我基本上想接收一个音频文件,然后播放它。但不知道如何接收音频文件本身。

有什么想法吗?

谢谢

罗宾

最佳答案

通常,您会以某种格式对音频进行编码。为了简单起见,我们假设它是 Wave 格式。

一种方法是封装音频 block (例如 50 毫秒 block )以便通过网络发送。

但是,您不能盲目地通过网络发送数据并期望它起作用。在您的计算机上,数据可能以一种方式组织(小端或大端),而在另一台计算机上则可能以相反的方式组织。

在这种情况下,客户将获得他所解释的与您的预期完全不同的数据。因此,您需要以某种方式正确序列化它。

一旦你正确地序列化了数据(或者不序列化,如果两台计算机使用相同的字节顺序!),你可以直接 send() 和 rcev() ,然后将其传递给解码器来处理。

我很乐意提供更多信息,但这只是我对此主题的了解程度。这实际上取决于您到底在做什么,因此如果没有关于您正在做什么的更多细节(例如,关于音频格式),就很难提供更多信息。

更多信息:

http://en.wikipedia.org/wiki/Serialization

http://en.wikipedia.org/wiki/Endianness

编辑:正如本答案的评论中所指出的,如果您使用标准格式,您可能根本不用担心序列化。只需将其以解码器可用的 block 形式通过网络传递(例如,一次发送一帧),然后在客户端解码这些单独的帧(或可能多个帧)。

关于c++ - 通过socket接收音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533243/

相关文章:

objective-c - 将 Cocoa header 链接到 ruby​​ C 扩展

可以使用 getchar() 来分配数组中的元素吗? [C]

c - 为自定义数据包创建 IP header 时出错

c - 奇怪的多线程行为

c# - 为什么 TcpClient 这么慢而且 CPU 很饿?

c++ - 将数据填充到本地的recv-Buffer中

c++ - 什么代码可以使这个循环工作?

c - glib 手册页不适用于 2.47.5

c++ - 调用程序本身的 LoadLibrary

C++ 使用文件格式