玩了两天rtp协议,基本把rtsp/rtcp/rtp/rtmp/srtp/strcp/mms,几个协议的区别和概念弄明白了。php
这里记录一下。c++
rtsp:相似用户界面操做,和Http比较相似,提供播放,中止,加入等功能。注意,这里rtsp只负责发送操做命令,实际的音视频数据,并不禁这个协议承载。这是我困惑好久以后才明白的(我是否是太弱了,呵呵)服务器
rtsp协议并无规定底层是由tcp仍是udp实现,实际操作中,我经过google搜索发现rtsp确实有tcp和udp两种实现,我就不上抓包数据了,这个博客园里面已经有人干过了。另外这个也算和http不一样的一点,http都是tcp。网络
rtp : 这个协议是干累活的,音视频数据,都由这个协议承载。rtp实际的包里,还包括些流类型(h264,aac)描述,包序列描述等等。底层数据包都由UDP承载。tcp
rtcp: 控制协议,举个例子,音视频数据发出去了,发了多少,收到多少,丢了多少,网络延迟多大,这些QOS(Quality of Service)相关的数据,以及音频同步的信息。谁来提供,没错,就是rtcp。与rtp是兄弟协议,由udp承载数据。google
----------------------------------------------------------------------------------------------------------------------加密
以上是比较标准的东东。spa
rtmp: 看起来很像ietf的东西,不过是adobe自家的协议,不事后来也开放出来了,基本上能够等同于flash播放的服务器。有开源实现rtmpdump,有兴趣的同窗能够本身google一下本身看看。视频
srtp: 思科与爱立信扣起手搞得,后来也成了ietf标准,能够理解成加密的rtp,主要用于voip,视频方面?偶不知道。。。。blog
srtcp:同上。这两个协议都是相伴而生的。
mms:微软本身搞的,相似于rtsp协议,暗下不表。以为这里很搞笑,不是国际标准,但总还要给他很大的支持,shit。微软啊,弄了太多不标准了。。。
我不帖包头分析和协议层次这种东西了,太多了,我只是记录一下我本身对这些东西的理解,网上大多讲得不够全面,我总结一下。
------------------------------------------------------------------------------------------------------------------------
找了几个rtp比较知名的开源实现,而且用vc2005编译经过了。附带demo。
ortp:linphone项目的子项目,开发语言是c语言,实现了rtp/rtcp协议,没有实现rtsp协议,若是要用,本身google一下,有比较多的开源实现。本身动手也不算复杂。
jrtplib:项目主页以下
http://research.edm.uhasselt.be/~jori/page/index.php?n=Main.HomePage
开发语言是C++,一样没有实现rtsp。有喜欢c++的同窗能够选择这个。
live555:这个项目放到这里,我很纠结,由于live555的野心明显不是实现几个协议,人家是要干票大的。他除了实现了rtsp/rtp/rtcp/各类协议以外,还实现了各类流媒体的分包解析。
上面两个还算是单纯的库,live555就是一整套解决方案了,只是顺便实现几个协议,呵呵。其余:vlc/mpeg4ip/的rtp相关实现都是使用live555,很少了。
上下载连接
http://files.cnblogs.com/mr-nop/live.rar