求教高手:基于UDP的socket实时语音通信是如何实现的?
我的思路是先录一段时间的语音如5 sec,之后sendto()给对方发过去,之后再录5 sec再发过去,这样连续的往复录制发送,对方连续播放,每5s的音频大小大约是1M(循环发送的),这样做合理吗?这里要是用到speex,那么speex会起到什么作用呢?
------解决方案--------------------应该不是这样做的吧,,应该是连续发过去的。。
你找个开源的代码看看。。在http://sourceforge.net/上搜索voip
------解决方案--------------------考虑 rtp 实时传输协议
------解决方案--------------------你的声音文件 有点太大了啊,5秒钟1兆有点不现实,应该是需要其他压缩算法实现的,
h264是处理视频编解码;我知道的是有个rtp实时传输协议,专门用来处理你这种需求;
总之,5秒钟1MB肯定不行的,至少发送端需要压缩,接收端需要解压,不可能在网络传输5秒钟的音频文件需要1MB.
做udp传输如果可以考虑适当的延续,那么可以先传属一段录音的 固定大小,发送时取得文件的MD5值,接收端接受完成后,检查MD5值,如果不对的话,就重新传输一次;
即使是实时传输协议,我想完全没有延迟也是不可能的,
好像cctv网络电视也会延迟2-3分钟的样子。
------解决方案--------------------这种系统现在都比较成熟,协议也都比较标准。感觉你对该系统缺乏总体的认识,比如语音该用什么协议传,信令该用什么协议传。如果真想做,可以搜一下voip涉及到的相关协议,对voip系统有个整体的认识,然后理解各子模块是如何工作的,然后再考虑各模块如何实现。上来就从自己的知识角度考虑如何实现很容易误入歧途,呵呵。