RTP协议解析

FROM: http://blog.csdn.net/onelight1997/article/details/7325087

1、协议简介

RTP是针对Internet上多媒体数据流的一个传输协议。可以实现一对一或一对多的传输情况。RTP的典型应用建立在UDP上,但也可以在TCP或ATM等其他协议之上工作。

RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制。

2、工作机制

多媒体数据传输的一个尖锐的问题就是不可预料数据到达时间。但是流媒体的传输是需要数据的适时的到达用以播放和回放。

rtp协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据流的播放。发送端依照即时的采样在数据包里设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始的适时的数据。

在rtp协议中,一帧数据被分割成几个包,这几个包具有相同的时间标签,但是每一个包又具有不同的序号

3、协议头

协议头


①版本(V)

  2位,标识RTP版本。

②填充标识(P)

  1位,如设置填充位,在包尾将包含附加填充字,它不属于有效载荷。填充的最后一个字节指明可以忽略多少个填充比特。
  填充可能用于某些具有固定长度的加密算法

③扩展(X)

  1位,如设置扩展位,固定头后跟一个头扩展。

④CSRC计数(CC)

  4位,CSRC计数包括紧接在固定头后CSRC标识符个数。

⑤标记(M)

  1位,标志的解释由具体协议规定。它用来允许在比特流中标记重要的事件,如帧边界

⑥载荷类型(PT)

  7位,记录后面资料使用哪种编码,接收端找出相应的 decoder 解码出来。H264的为96

⑦系列号

  16位,系列号随每个RTP数据包而增加1,由接收者用来探测包损失。系列号初值是随机的。

⑧时标

  32位,时标反映RTP数据包中第一个八进制数的采样时刻,采样时刻必须从单调、线性增加的时钟导出,
  以允许同步与抖动计算。时标可以让receiver端知道在正确的时间将资料播放出来。

  只有系列号而没有时标,并不能完整按照顺序的将data播放出来,因为如果data中间有一段是没有资料的,
  只有系列号的话会造成错误.一般rtp头以0x80 60开头

H264 over RTP基本上分三种类型:

  • 1、Single NAL unitpacket 也就是实际的NAL类型,可以理解为一个包就是一帧H264数据,这个在实际中是比较多的。
  • 2、Aggregation packet 一包数据中含有多个H264帧。
  • 3、Fragmentationunit 一帧数据被分为多个RTP包,这也是很常见的,特别是对于关键帧。

猜你喜欢

转载自blog.csdn.net/lile777/article/details/79655029