RTP协议
一、介绍
RTP协议是一个实时传输流协议,是应用层的一个协议。通常说的RTSP包括以下三种:
1. RTSP协议:负责服务器和客户端之间的请求与响应
2. RTP协议:负责服务器和客户端之间的传输媒体数据
3. RTCP协议:负责提供有关RTP传输质量的反馈,就是确保RTP的传输质量
(RTP和RTCP并没有规定传输层的类型,可以是TCP或UDP,但RTSP传输层必须基于TCP)
二、RTP结构
RTP数据包由 RTP报文头 + 有效荷载 组成。
struct RtpPacket {struct RtpHeader;//报文头uint8_t payload[0];//有效荷载(弹性数组)
};
2.1 RTP头部
RTP头部结构如下图所示:
//报文头:大端存储
struct RtpHeader{/* byte 0 */uint8_t csrclen : 4; //CSRC计数器,占4位,表示CSRC的个数uint8_t extension : 1; //扩展位,占1位,如果X=1,在RTP报文头后会跟一个扩展报文头uint8_t padding : 1; //填充标志,占1位,如果P=1,在RTP报文后会填充一个或者多个八位组,它们不是有效荷载的一部分uint8_t version : 2;//RTP协议版本号,占2位/* byte 1 */uint8_t payloadType : 7; //有效荷载类型,占7位,用于说明RTP有效荷载的类型,比如GSM音频、JPEM图像等uint8_t marker : 1; //标记,占1位,对于不同有效荷载类型的意义不同:1.对于视频来说,标记着一帧的结束。2.对于图像来说,标记会话的开始 /* byte 2-3 */uint16_t seq; //序列号,占16位,每发送一个报文,序列号递增1//接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据/* byte 4-7 */uint32_t timetamp; //时间戳,占32位,记录了此RTP报文的第一个八位组的采样时刻//接受者可以用时间戳计算延迟/* byte 8-11 */uint32_t ssrc; //同步信源的唯一标识,占32位,同一RTP会话中没有相同的SSRC/*标准的RTPHeader还可能存在0-15个CSRCuint32_t csrc;//特约信源,每个占32位,表示对RTP数据包做出过贡献的源,//它用于标识在混合音频时,实际参与的数据源*/
};