今天成功实现了,基于RTP的双工语音通信,效果良好,可以正常完成双方的语音通信。
·以前的程序,之所以不能实现双向通信,我认为是丢包了,因为接收线程是先接收数据后再执行if(recv_n<NMAX)的判断,如果此时不成立,就会将此包或者以后相邻的更多包接收并丢弃。所以我将程序改为先执行if(recv_n<NMAX)的判断再执行是否接收包,这样不会丢包了,双方也可以正常完成双工通信了。
·还有一点需要强调的是:加锁与解锁只需要在判断缓冲区full or empty是应用,没有必要在接收X个包加锁后再发送X个包,因为系统会在ms或者us级完成线程间的切换,用户编程时无需考虑多长时间线程间切换这个问题。