RTP、RTCP、FEC包数据结构简介

1.	数据包格式
1.1.	Interlaced结构
STAE模块采用RTP/RTCP进行指令交互和数据发送,同时对RTP/RTCP进行了2种方式的扩展,一种是添加额外的扩展头Interlaced,一种是在RTP/RTCP协议头中进行了扩展,因此STAE的指令是以下的方式存在(均采用网络序)
 
		channel=0x00       channel=0x01      channel=0x02     channel=0x03 
1.1.1.	Interlaced字段含义
	字段说明:
	1、magic_num:是Interlaced的头标识,固定不变。
	2、channel:0x00标识携带的是	RTP包;0x01标识携带的是RTCP包;0x02标识携带的是音频包;0x03标识携带的是FEC包;
	3、tag:是否需要SAK回应,0x00不需要,0x01需要。(携带FEC包时tag=0x01标识fec包结构是给整个rtp包编码)。
	4、data_length:表示所携带负载的数据长度。
1.2.	RTP标准头
1.2.1.	RTP标准头结构
 
1.2.2.	字段说明
1.2.2.1.	简要介绍
	RTP可以看成三个部分:
1)、RTP head:RTP协议头;
2)、extend:RTP协议头扩展;
3)、payload:ts视频流负载。
1.2.2.2.	RTP head相关字段说明
	1)、V:2bit,2固定值,RTP版本;
	2)、P:表示填充比特,1bit,为0;
	3)、X:1bit,1表示RTP包头有扩展部分;0表示不带扩展。
	4)、CC:4bit,CSRC 计数,此处为0,表示没有CSRC字段;
	5)、M:1bit,此协议定义的标志 M=0表示非帧结束;M=1表示帧结束;
	6)、PT:7bit,此协议定义的负载类型遵循rfc(见附录A)标准,PT=33 表示MP2T;pt=0 表示PCMU;
	7)、sequence number :2字节,序列号,每发送一个RTP包序列号加1;
	8)、timestamp: 4字节,时间戳,反映了RTP数据包中第一个字节的采样时间。同一帧数据的不同rtp包的时间戳要求保持一致;
	9)、同步信源(SSRC)标识符:4字节,同步源,在同一个RTP会话期间没有任何两个同步源具有相同的ssrc。此协议定义SSRC 固定为  	SSRC[3]= 'S'  SSRC[2]= 'K' SSRC[1]= 'L' SSRC[0]= 'T';
	10)、特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约	信源。只有当插入混合器时才会有该项。
1.3.	RTP扩展头
1.3.1.	RTP扩展头结构
 
1.3.2.	RTP扩展头字段含义
1.3.2.1.	简要介绍
		如果字段X=1,则头部有扩展部分,否则X=0;
1.3.2.2.	RTP扩展头相关字段说明
	1)、profile:固定为0x0000;
	2)、extend hender length:单位为4字节(不包含本身长度)扩展头长度,网络序表示,取值为扩展所占几个32bit行;
	3)、long sequence number:RTP序列号,64bit;
	4)、Frame type :帧类型,此协议定义FT=0 表示IDR帧;FT=1 标识I帧;FT=2表示P帧;FT=3表示A帧;FT>=4其他;
	5)、Frame state:帧状态,此协议定义FS=0 表示帧开始;FS=1表示帧中继;FS=2表示帧结束;
	6)、Frame tag  :帧标记,P、A帧和前面的I帧此标记相同;
	7)、iframe packets:数据包的个数;
	8)、iframe sequence number:I/IDR帧序列号;
	9)、gop marker:I/IDR个数(以I帧/IDR帧开始到下一个I帧/IDR帧结束)。
1.4.	RTCP头结构
 
1.4.1.	RTCP头字段含义
	1)、V=2固定值,版本号;
	2)、subtype:RTCP类型,一个PT对应不同的subtype;
	3)、PT:RTCP包类型;
	4)、length 负载长度4字节为单位,是以整个RTCP包长度(32bit为单位)减1来赋值,即RTCP的固定头为4字节,如果实际发送			的长度不是4的整数倍,自动补齐至4的整数倍;

1.5.	RTCP扩展头
1.5.1.	RTCP头扩展
 
1.5.2.	RTCP包类型
1.5.2.1.	简要介绍	
RTCP包类型根据字段PT的值不同主要分为五种;
1.	PT=200表示Sender Report发送者报告;
2.	PT=201表示Receiver Report接收者报告;
3.	PT=202表示SDES(能力交互使用)源描述;
4.	PT=203表示BYE退出报告;
5.	PT=204表示APP自定义报告(application-defined);
1.5.2.2.	包类型介绍
1.5.2.2.1.	Sender Report类型
当PT=200时,此时为RTCP包类型 Sender Report发送者报告类型。IRTCPExHead格式为:
 
a)	SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。
b)	SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。
c)	从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。
d)	从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。
1.5.2.2.2.	Receiver Report类型
当PT=201时,此时为RTCP包类型 Receiver Report接收者报告类型。IRTCPExHead格式为:
 
a)	接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计
b)	上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。
c)	上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。
1.5.2.2.3.	SDES类型
  当PT=202(能力交互)时,此时为RTCP包类型 SDES类型。IRTCPExHead格式为:
 
	SSRC/CSRC_1:SSRC=0x12.0x34,0x56,0x78。
1.5.2.2.4.	BYE类型
当PT=203(能力交互)时,此时为RTCP包类型为BYE。IRTCPExHead格式为:
 
1.5.2.2.5.	APP用户自定义类型
当PT=204时,此时为RTCP包类型 APP类型,用户自定义类型,无固定格式。IRTCPExHead格式为:
 
a)	SSRC/CSRC:未定义,字段为0,没有用到自动填充;
b)	name(ASCII):未定义,字段为0,没有用到自动填充;
c)	subtype类型:
COMMAND((byte)0x03) (pt=204),命令,对方需要应答;
		RESPONSE((byte)0x04) (pt=204),应答;
		NOTIFICATION((byte)0x05)(pt=204),通知,对方不需要应答;
		SAK (pt=204)
1.5.3.	RTCP负载类型		
1.5.3.1.	简要介绍
   RTCP负载,RTCP字段application dependent data的数据格式分为两种,一种为SDES能力交互使用的加头的TLV格式(见1.5.2.2.3 SDES类型),另一种为APP用户自定义类型的TLV格式(TLV---type length value)。
1.5.3.2.	SDES类型加头的TLV格式
  SDES能力交互时使用的加头的TLV
 
RPIV:标识自定义SDES。
SDES length:SDES全部负载的TLV list的数据长度(字节)。
Prefix length:值为1,后填充位。
  TLV list:TLV数据列表。
 
SDES TLV说明:
 
  T_CAPACITY采用一个字节的不能bit来表示不同的信息:
 
  T_VIDEO_MODE:一个字节用来表示视频模式
 
1.5.3.3.	用户自定义TLV格式
用户自定义的TLV包括以下几种(丢包重传、统计信息、信息配置)
i.	丢包重传(TLV类型 T:RESEND 1字节 L:负载V的长度 2字节 V:序列号 8字节) 
ii.	StatisticInfoTLV统计信息(TLV类型  T:STAT 1字节  L:负载V的长度2字节 V:网络信息8字节)  
iii.	NetAdaptInfo信息配置(TLV类型 T:NET_ADAPT 1字节L:负载V的长度 2字节 V:适配信息)  
注:
1.在新的ctt代码中StatisticInfoTLV统计信息已被替换为:
recv_br_info_t
{
	uint_32  gop_num;
    uint_32  bit_rate;
    uint_32  iframe_time;  //单位ms
}
2.NetAdaptInfo在ctt代码中有数据结构却无该项的响应处理。
1.6.	FEC头结构
1.6.1.	FEC包结构
	FEC数据包的结构由一个Interlaced、fec header、冗余数据组合而成如下图。
 
1.6.2.	FEC头结构
 
1.6.3.	FEC头结构字段含义
		E:1bit,保留位,必须为0;
		L:1bit,用来标示FEC Level Header里的MASK 是否为 Long Mask, 普通的MASK 长度为16 bits,一个FEC 数据包 Group 的包个				   数最多为16个, Long MASK 长度为 48 bits,一个FEC 数据包Group的包个数最多为48个.
		P:1bits、X:1bits、CC:4bits,M:1bit,用来产生RTP Header里相应字段的保护位。
		PT recovery:7bits数据包 payload type 的保护位
		TS recovery:32 bits, 数据报Timestamp的保护位
		SN base :数据包里的最小sequence.
		Length recovery:16 bits, 数据长度的保护位, 数据包的长度是 CSRC List, payload, padding 的总长度
1.6.4.	FEC packet结构
	 
1.7.	语音包结构
这里的语音包设计为APP向IPC发送的语音包格式。
 
1.7.1.	语音包字段含义
	1)、上面的部分为Interlaced,下面为语音包的格式;Interlaced中的payload length在这里被使用sequence num,表示语音的包序号;	2)、data length为语音数据的长度;
	3)、data是语音数据。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值