SIP与RTP综合应用4

来源:互联网 发布:网狐棋牌6.6完整源码 编辑:程序博客网 时间:2024/06/08 16:53

搭建好环境,测试通过,熟悉协议之后, 就是自己做一个这样的平台了。

服务器想都不用想,直接用Tixbox,重头写不现实。

 至于客户端,一般的程序架构应该如下:

一 协议部分:

主要处理sip的注册,呼叫,接收,挂机等功能,所有的协议都差不多,随便选一个就行。

二 媒体传输,这部分比较复杂 :

1 音视频采集

2 音视频编码

3 音视频编码后组RTP

4 RTP/RTCP发送

5 RTP/RTCP接收

6 从RTP解包还原成编码后的音视频

7 音视频解码

8 音视频播放

一般如果分配任务,快速做一个客户端,首先想到的就是找一个开源,编译出来再修改。

不过,试了几个,极度痛苦,分别说一下。

1 Linphone:

这个产品只能算一般,不过用到的lib非常不错,exosip+osip为sip命令服务,ortp+mediastreamer2为流媒体服务。不过,编译真是麻烦,别的不说,光mediastreamer2就用到了ffmpeg,gsm,ortp,srtp,openssl,speex, theora等,稀里湖涂足足花了大半天时间把所有这些都编译好,然后编译ms2.lib时提示几个链接出错。因为我看到网上几个文章说明是用vc2005轻松编译出来的,我也用的vc2005。估计用mingw会简单一些。不过,已经耗了近一天的时间,感觉不爽,放弃。估计是linphone估计搞的复杂,好让antisip卖钱。

2 ekiga

这个需要ptlib,第一感觉这东西很麻烦,不过编译时出奇的顺利(关键是官方提供的资料详细,网友写的文章也详细)。然后编译opal,也很顺利。(只是占用机器比较厉害,P4 2.6的占CPU极严重。不过,用的机器是联想的超薄机箱那种,不排除官方弄个很烂的CPU冒充。因为换到另一个P4 3G,速度快上两三倍)。

其实,编译好opal,基本就可以了,它带了很不错的例子,拨打电话接听都不错。

最后编译ekiga时,需要交叉编译,直接放弃掉,有那时间不如好好研究opal了。

3 其他

编译了一下emiplib,这个库写的真不错。虽然封装的比较深,不过调用时,可以选择比较靠上的类来调用,有点类似ACE。只是视频格式少了一点。

回头再看上面的一般结构,SIP部分不用操心,随便找个库就能达到目的,关键是媒体传输这部分。仔细看1-8这些部分,很多我们自己动手就可以做,其实我们并不需要一下完整的全功能的库。

比如,音频采集播放用DirectSound,视频采用播放用DirectShow.编解码用ffmpeg编译出来的libavcodec,传输用jrtplib.这么一看,只有3 音视频编码后组RTP和6 从RTP解包还原成编码后的音视频 这两部分相对陌生,其他的都能找到成熟的代码。基于这个想法,就不用上述开源产品,直接自己写一个好了。

先做准备工作:

1 编译好ffmpeg及所带的libavcodec等几个lib和dll,音视频编解码时需要。

2 利用DirectShow做视频采集。播放就直接用GDI画图好了,简洁。

3 声音部分,参考Youtoo这个程序,连SIP都有了,用现成的exosip,osip,ms2.lib(这个库不支持视频,否则就不用做上面那些苦力了)。音质相当不错。

4 传输就用jrtplib,不过开始为了调试方便,自己写的UDP socket。

这些准备工作做好,下一步就开始参考RFC进行RTP的组包和解包了。

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn