l 时戳(Timestamp):占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
V |
P |
X |
CC |
M |
PT |
序列号 |
时戳 |
||||||
同步信源(SSRC)标识符 |
||||||
特约信源(CSRC)标识符 |
||||||
··· |
RTP报头格式
在Internet环境中,一些会议的参加者可能被隔离在应用级防火墙的外面,这些参加者被禁止直接使用IP组播地址进行访问,虽然他们可能是通过高速链路连接的。在这些情况下,RTP允许使用转换器作为RTP级中继器。在防火墙两端分别安装一个转换器,防火墙之外的转换器过滤所有接收到的组播报文,并通过一条安全的连接传送给防火墙之内的转换器,内部转换器将这些组播报文再转发送给内部网络中的组播组成员。
以上部分是转载地址:http://hi.baidu.com/chuangbao/blog/item/f27209df252b601a62279854.html
下面是我使用live555作服务器,VCL播放器作客户端后,抓包结果(RTP/RTCP,,RTSP包)(部分) (在服务器端的抓包) (播放的是H.264的视频流(无声音))
标记有Marker的意思是说此帧的结束。也就是说:视频的每帧可能会太大,一个UDP报文无法发送。所以使用了几个报文。Marker表示此视频帧的最后一个报文。
在这个会话中,SSRC是不变的。同一帧内Timestamp也是不变的。
RTP的英文文档为 RFC 1889下载: http://www.ietf.org/rfc/rfc1889.txt
中文版的RTP协议PPT:http://wenku.baidu.com/view/7209e10e844769eae009edd8.html?from=related&hasrec=1
这个PPT讲的还不错,建议向我一样刚学习RTSP,RTP/RTCP的看看。我认真看了一遍,看的时候对照着RTP/RTCP包 (使用wireshark抓包) 看。 服务器端使用http://www.live555.com/liveMedia/public/里面,用VS编译(自己建个console工程,然后把全部的.hh,.h;.c;.cpp文件加进去就行了,不用管那些什么.make文件。
客户端使用VLC media player。
比如下面为我抓出来的一个RTCP包, wireshark能够识别出这个RTCP包,并显示出来:
这个RTCP包,是一个RR(Receiver Report包+BYE包) (什么是RR包,参看那个PPT)