Ilm*_*nen 11
好吧,写一个简单的VOIP程序作为学习经验当然是一个很好的理由.
首先,您应该选择合适的音频编解码器并学会使用它.我推荐SPEEX.
其次,您需要决定如何通过网络发送编码数据.一个简单的TCP套接字可以工作,至少有正确的选项(我在TCP_NODELAY这里特别考虑),但大多数VOIP应用程序似乎使用UDP直接传输数据包,交易可靠性以提高效率.因此,您应该学习如何设置和使用UDP套接字.
当然,您还需要学习如何阅读和播放音频.详细信息取决于您使用的语言和平台.
一旦掌握了所有这些,就应该非常简单.从麦克风读取音频,对其进行编码,通过网络发送,从网络读取传入数据,解码,播放.当然,你已经同时做了好几件事 - 如果你的程序在等待可能会或可能不会到达的传入数据时停止发出声音,那就没有用了.
解决这个问题的一种方法是将程序分成两个线程:一个用于监听和传输,另一个用于接收和回放.另一种解决方案是使用非阻塞I/O和事件驱动编程来处理来自多个源的数据.此选项的一个可能的优点是,它可以使您更容易实现电话会议,您可以从多个人发送和接收音频.
当然,我自己从未尝试过,所以我真的只是在这里猜测.