流媒体传输 - RTP 协议
RTP 协议
RTP Header
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|CC|M|PT|sequence number|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|timestamp|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|synchronization source (SSRC) identifier|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|contributing source (CSRC) identifiers|
|....|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
前 12 个字节出现在每个 RTP 数据包中,这些字段具有的含义如下:
版本 (V) :2 位,该字段标识 RTP 的版本。RFC3550 定义的版本规范为 2.
填充 (P):1 位。当设置了填充位置时,在数据块中包含了后续的非有效数据部分(即后续的所有非目标编码字节),这些部分不被视为有效负载内容。
扩展名 (X) :1 位,如果扩展位被置位,则固定报头必须后跟一个扩展头部。
CSRC 计数 (CC) :4 位,CSRC 计数包含随后的 CSRC 标识符的数量固定头。
该标记(M):1 位
标记 (M) :1 位,标识此 RTP 包携带了一组 NAL 数据的最后一个 NAL Unit。(RFC 6184)
有效载荷类型 (PT) 是一种编码格式,在此字段中使用7位二进制数据来标识RTP的有效负载,并由应用程序负责对其进行解释解读。该编码格式通过配置文件指定默认的静态映射关系以关联不同的负载类型代码与特定的负载格式结构。
该方案中采用十六位序列号的设计方案,在每次RTP数据包传输过程中会递增地发送序列号字段,并将此信息传递给接收端以便检测丢包及恢复报文顺序。其中序列号的初始值应随机初始化。
时间戳 (timestamp) :32 位表示该数据包第一个字节所反映的时间点。当一次对话启动时, 时间戳会被设置为一个基准值, 这一过程会在数据传输的第一包中完成, 即使没有任何信号发送, 其数值会随着时间推移持续增长(因为这段时间总是在流逝)。这一机制对于确保系统稳定运行至关重要
同步源标识符 (SSRC) 是一种32-bit字段,在同一个RTP 会话内不允许存在两个相同的SSRC值。同步源指的是RTP流量块流的来源地址信息域中的一个字段值,在同一个RTP 会话内不允许存在两个相同的SSRC值。该标识符是通过RFC1889标准遵循了MD5算法来生成的随机数字段值
贡献源列表 (CSRC List) 是一个包含最多16位二进制数据的列表,在RTP混合器中用于标识那些对其发送的新报文做出贡献的原始RTP报文源。这个过程由混合器将这些具有影响力的关键码值记录于表格中,并将这些关键码值提供给接收方以便其能够准确识别对话双方的身份信息。
该文档为《RFC 3549: Real-Time Transport Profile for Audio and Video Conferencing》的技术规范文件。
该文档详细定义了音频和视频会议中使用实时传输协议(RTP)实现最小控制需求的配置参数。
该文档规定了在音频和视频会议中使用最小控制量实现实时传输协议(RTP)配置参数的具体方法。
学习地址
文章福利
文章福利
学习地址
RTP 协议拓展
RTP over RTSP
RTP over RTSP 不是在 RTP 协议文档(RFC 3550)中定义的技术基础,而是源于 RTSP 协议文档(RFC 2326)中的二进制数据交织传输技术。
1. 设置 RTP over RTSP
首先确保基于TCP协议的RTSP交互连接的建立,并且RTSP客户端应在SETUP阶段请求通过TCP连接传输二进制数据。SETUP命令中应包含如下格式:
Transport: RTP/AVP/TCP;interleaved=0-1
该 Transport 将指示服务端采用 TCP 协议发送媒体数据(RTP/AVP/TCP),其中将采用两个通道:0号用于传输媒体数据、1号用于传输控制信息,并将实现两者的信息交织传送。具体来说,在本方案中将采用偶数编号的通道作为传输通道,并在奇数编号的通道中放置相应的控制信息。例如,在实例中如果指定传输通道为0,则对应的控制通道应设为1
C->S: SETUP rtsp://foo.com/bar.file RTSP/1.0
CSeq: 2
Transport: RTP/AVP/TCP;interleaved=0-1
S->C: RTSP/1.0 200 OK
CSeq: 2
Date: 05 Jun 1997 18:57:18 GMT
Transport: RTP/AVP/TCP;interleaved=0-1
2. RTP over RTSP 的数据传输
RFC 2326: Real Time Streaming Protocol (RTSP) :
10.12 Embedded (Interleaved) Binary Data
在播放过程中,在发送RTSP命令时使用的TCP Socket将采用该方法来进行数据传输。按照以下方式打包:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0x24($)|CID|embedded data length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ... data ... :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0x24(() :1 字节,二进制数据交错标识符,固定使用 ")"。
CID(channel identifier) 是一个1字节的交错参数,在携带RTP数据时用于指示信道。
embedded data length :2 个字节,用来指示插入的二进制数据长度。
binary data stream :二进制数据包的形式,在RTP(Real-Time Transport Protocol)协议下传输,并与其嵌入式数据长度所指示的长度保持一致。
