我开始研究一个通过以太网传输 G.711 音频的项目,用 C(不是 C++)编写并在 Fedora 15 上运行。我没有做聪明的事情并使用 RTP,而是使用 UDP 传输音频数据。为了在一定程度上克服数据包重新排序的问题,我决定在每个数据包的主体中使用一个看起来有点像这样的结构:
struct payload {
char cc;
char audio_data[160];
};
变量“cc”是一个从 0-15 运行的连续性计数器,当数据包到达接收方时,它会根据 cc 的值放入这些结构的数组中。然后音频输出例程循环遍历这个数组并播放数据。
我的问题是,这是打包音频的最佳方式吗?输出数组最终将是二维的,并且肯定会很慢地读取每个成员并将其写入输出?有没有办法定义一个 160 字节宽的类型,我可以将其写入另一端的音频接口?
非常感谢任何建议,以及指向 ALSA 上有用资源的链接(这似乎非常罕见!)
乔什