RTP
srtp 只加密rtp负载的内容,尾部有sha1特有标识
rtp 头部包含ssrc同源吗,编码类型,时间戳, 版本信息, 序列号
RTP
- 实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式
RTP内容
- 基于UDP协议的RTP
- RTP标准定义了两个子协议 ,RTP和RTCP
- 数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。
- 控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。
RTP的使用
RTP协议是一种基于UDP的传输协议,RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
这样,对于那些丢失的数据包,不存在由于超时检测而带来的延时,同时,对于那些丢弃的包,也可以由上层根据其重要性来选择性的重传。比如,对于I帧、P帧、B帧数据,由于其重要性依次降低,
故在网络状况不好的情况下,可以考虑在B帧丢失甚至P帧丢失的情况下不进行重传,这样,在客户端方面,虽然可能会有短暂的不清晰画面,但却保证了实时性的体验和要求。
==rtp头部十二字节==
- 版本号(Version, V)
- 位置:第0字节的高2位(0bVVXXXXXX)
- 取值:固定为 2(RTP版本)
- 作用:标识协议版本,当前标准为RTP/2。
- 示例:0b00000000(前两位为00,表示版本2)。
- 填充标志(Padding, P)
- 位置:第0字节的第1位(0bVPPXXXXX)
- 取值:0 或 1
- 作用:
- 1:数据末尾有填充字节(如加密需要补齐对齐)。
- 0:无填充。
- 示例:视频帧数据通常设为 0。
- 扩展标志(Extension, X)
- 位置:第0字节的第2位(0bVPPPXPPP)
- 取值:0 或 1
- 作用:
- 1:存在扩展头(自定义元数据,如时间戳扩展)。
- 0:无扩展头。
- 示例:WebRTC中可能用扩展头携带传输层信息。
- CSRC计数(CC, Count of CSRC)
- 位置:第0字节的第3~6位(0bVVVVCCCC)
- 取值:0~15(4位二进制)
- 作用:标识CSRC列表中的贡献源数量(最多15个)。
- 场景:多方会议中,混合多个参与者的音频/视频流时,记录所有贡献者SSRC。
- 标记位(Marker, M)
- 位置:第1字节的第7位(MXXXXXXX)
- 取值:0 或 1
- 作用:由应用层定义,常见用途:
- 视频:1 表示关键帧(I帧)。
- 音频:1 表示语音活动结束(静音开始)。
- 示例:视频编码中,关键帧需标记为 1 以便解码器刷新状态。
- 载荷类型(Payload Type, PT)
- 位置:第1字节的第0~6位(MTTTTTTT)
- 取值:0~127(7位二进制)
- 作用:标识RTP负载的具体编码格式。
- 典型值:
- 96:动态载荷(需通过SDP协商,如H.264视频)。
- 111:Opus音频。
- 120:RTP over RTSP的H.264视频。
- 场景:在SDP协议中通过a=rtpmap字段映射编码类型。
- 序列号(Sequence Number)
- 位置:第2~3字节(16位)
- 取值:0~65535(循环递增)
- 作用:
- 检测丢包(序列号不连续)。
- 重组乱序到达的数据包。
- 计算网络抖动(时间戳差值与序列号差值的比值)。
- 示例:每发送一个RTP包,序列号递增1。若收到序列号 100 后未收到 101,则判定丢包。
- 时间戳(Timestamp)
- 位置:第4~7字节(32位)
- 取值:0~2^32-1(循环递增)
- 作用:
- 表示媒体数据的采样时刻(单位:采样率分之一)。
- 同步多个流(如音频与视频的同步)。
- 计算网络延迟(接收时间戳与发送时间戳之差)。
- 示例:
- 音频采样率48kHz → 时间戳每10ms递增 48000 / 100 = 480。
- 视频帧间隔33ms → 时间戳每帧递增 90000 * 0.033 ≈ 3000。
- 同步源标识符(SSRC)
- 位置:第8~11字节(32位)
- 取值:0~4,294,967,295(唯一标识发送端)
- 作用:
- 区分不同的媒体流(如多个摄像头或麦克风)。
- 在RTCP中用于关联控制信息。
- 示例:同一视频会议中,每个参与者的SSRC不同。
- 贡献源标识符(CSRC)列表
* 位置:第12字节起(每4字节一个CSRC,最多15个)
* 取值:与SSRC相同(32位唯一标识)
* 作用:- 多方会议中,记录所有贡献者的SSRC(如混音音频的多个输入源)。
- 在RTP头部扩展中用于标识数据来源。