基于pjmedia的音视频对讲(二)

最后又搞了两天,终于把这个对讲的模块搞的稳定了些。
继续丢包的问题。我在家调试的时候发现是防火墙的问题,第二天就兴冲冲的来公司告诉了测试,然后测试说:我的电脑防火墙一直是关的啊,然后我就傻眼了,God。。试了一下,问题果然还存在,得,继续吧您嘞。。
又把select模块审查了一遍,还是没发现什么问题。在一个偶然的机会,我下了一个断点,程序就停的时间长了一些,然后我发现丢包丢的更严重了,突然我就明白了,接收缓冲区溢出了。立马把接收缓冲区设成了32MB,运行,OK了。发给测试,也OK了。这么简单的一个问题,哎,说到底还是经验问题,以后要多接触网络方面的东西,多积累经验。
后来测试又报了一个状态会乱的bug,就是当一方peer意外重启后,另一方peer的状态就不对了。因为我当时本着怎么简单怎么来的态度写的,所以才导致这个bug。如果用SIP做信令控制,当然不会有这个问题,但现在不是没用么。解决方法就是在SDP包的owner行加入了发送者的包类型:inviter和invited,方法比较简陋,就不细说了。
总体来看pjmedia,个人感觉这个项目还不是十分成熟,但是他提供的功能实在是太符合我当前的需求了,再加上boss的意愿,就选了他。除了pjmedia,gstreamer应该是个相当不错的选择,但是官方没有dshow的plugin,ugly的也木有。所以以后还是多读一些,用一些开源代码,加深一下了解,这样到实际项目的时候才能游刃有余。
ps:通过这个小模块,加深了对DirectShow,COM,Windows IOCP等的一些了解,还算有点收获吧。然后google了几把COM,DCOM,DCE,CORBA的东东,感觉M$的产品设计的还是不错的。知识无国界,也应该无操作系统之分,看来我需要降低一些对Linux的狂热,静心多学学那些计算机基础的知识了。