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头部十二字节==

  1. 版本号(Version, V)
    • 位置:第0字节的高2位(0bVVXXXXXX)
    • 取值:固定为 2(RTP版本)
    • 作用:标识协议版本,当前标准为RTP/2。
    • 示例:0b00000000(前两位为00,表示版本2)。
  2. 填充标志(Padding, P)
    • 位置:第0字节的第1位(0bVPPXXXXX)
    • 取值:0 或 1
    • 作用:
      • 1:数据末尾有填充字节(如加密需要补齐对齐)。
      • 0:无填充。
    • 示例:视频帧数据通常设为 0。
  3. 扩展标志(Extension, X)
    • 位置:第0字节的第2位(0bVPPPXPPP)
    • 取值:0 或 1
    • 作用:
      • 1:存在扩展头(自定义元数据,如时间戳扩展)。
      • 0:无扩展头。
    • 示例:WebRTC中可能用扩展头携带传输层信息。
  4. CSRC计数(CC, Count of CSRC)
    • 位置:第0字节的第3~6位(0bVVVVCCCC)
    • 取值:0~15(4位二进制)
    • 作用:标识CSRC列表中的贡献源数量(最多15个)。
    • 场景:多方会议中,混合多个参与者的音频/视频流时,记录所有贡献者SSRC。
  5. 标记位(Marker, M)
    • 位置:第1字节的第7位(MXXXXXXX)
    • 取值:0 或 1
    • 作用:由应用层定义,常见用途:
    • 视频:1 表示关键帧(I帧)。
    • 音频:1 表示语音活动结束(静音开始)。
    • 示例:视频编码中,关键帧需标记为 1 以便解码器刷新状态。
  6. 载荷类型(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字段映射编码类型。
  7. 序列号(Sequence Number)
    • 位置:第2~3字节(16位)
    • 取值:0~65535(循环递增)
    • 作用:
      • 检测丢包(序列号不连续)。
      • 重组乱序到达的数据包。
      • 计算网络抖动(时间戳差值与序列号差值的比值)。
    • 示例:每发送一个RTP包,序列号递增1。若收到序列号 100 后未收到 101,则判定丢包。
  8. 时间戳(Timestamp)
    • 位置:第4~7字节(32位)
    • 取值:0~2^32-1(循环递增)
    • 作用:
      • 表示媒体数据的采样时刻(单位:采样率分之一)。
      • 同步多个流(如音频与视频的同步)。
      • 计算网络延迟(接收时间戳与发送时间戳之差)。
    • 示例:
      • 音频采样率48kHz → 时间戳每10ms递增 48000 / 100 = 480。
      • 视频帧间隔33ms → 时间戳每帧递增 90000 * 0.033 ≈ 3000。
  9. 同步源标识符(SSRC)
    • 位置:第8~11字节(32位)
    • 取值:0~4,294,967,295(唯一标识发送端)
    • 作用:
      • 区分不同的媒体流(如多个摄像头或麦克风)。
      • 在RTCP中用于关联控制信息。
    • 示例:同一视频会议中,每个参与者的SSRC不同。
  10. 贡献源标识符(CSRC)列表
    * 位置:第12字节起(每4字节一个CSRC,最多15个)
    * 取值:与SSRC相同(32位唯一标识)
    * 作用:
    • 多方会议中,记录所有贡献者的SSRC(如混音音频的多个输入源)。
    • 在RTP头部扩展中用于标识数据来源。