webrtc代码走读七(rtp包格式)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/CrystalShaw/article/details/90606523

一、rtp包头格式

V:版本号,必须为2
P:填充位
X:扩展位,标志是否存在扩展
CC:CSRC个数
M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于1,视频包因为一帧比较大,会被分为几个包发送,最后一个包标志需要Mark一下。
PT:负载类型,不同的负载类型对应不同的编解码类型(音频根据采样率和通道不同都要对应不同的负载类型),FEC类型等。
sequence number:包序号,发送端指定一个起始序号(如果不指定则随机一个),然后每个包的序号依次递增;如果存在RTX,重发是此序号是rtx的序号,详情请看RTPSender::SendPadData的实现
timestamp:时间戳,如果一个视频帧被分为几个包,则这个帧对应的几个包的时间戳是一样的;发送端可以指定一个起始时间戳timestamp_offset_(如果不指定则随机一个),然后每个帧的时间戳等于起始时间戳加上采集时间戳timestamp_offset_ + capture_timestamp,详情可以看RTPSender::SendOutgoingData的实现
SSRC:同步源的唯一标识,每一个源(音频或者视频,文件)都必须要有一个唯一的标识码,用于区分不同的流
CSRC:贡献源,列举此SSRC的资源是由多少个其他的资源(其他资源的SSRC)混合而来的。例如MCU混音之后就需要修改这个;最多只能表示15源

如果存在RTP扩展则标志位X必须置为1,除了标准扩展外,WebRTC还有自己的扩展,所以服务端如果使用标准rtp解析库需要添加一下WebRTC的RTP扩展。扩展相关的文件有rtp_header_extensions.h和rtp_utility.cc。

RTP扩展头定义如下:

webrtc支持的扩展类型(就是上图中的ID值)如下:

二、协议介绍

还没有理清各个扩展类型,如下三个扩展类型,找到对应的RFC协议,其余感觉是私有定义的。

  • kRtpExtensionTransmissionTimeOffset

       含义:一个包相对于采集时间的偏移的滴答数

       协议:https://tools.ietf.org/html/rfc5450

       代码实现函数:RTPSender::SendToNetwork

  • kRtpExtensionAudioLevel的rfc协议

       含义:一帧音频数据的分贝值

       协议:https://tools.ietf.org/html/rfc6465

       代码实现函数:RTPSenderAudio::SendAudio

  • kRtpExtensionTransportSequenceNumber的rfc协议

       含义:扩展序号,不管是第一次发送还是重发的包,此需要都会递增

       https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01

       代码实现函数: RTPSender::UpdateTransportSequenceNumber

  • kRtpExtensionAbsoluteSendTime

       含义:一个包的绝对发送时间。

       参数:RTPSender::SendToNetwork

        

  • kRtpExtensionVideoRotation

       含义:帧视频帧的方向。

       参数:

       

  • kRtpExtensionPlayoutDelay

      含义:已经播放时长

       参数:

       

  • kRtpExtensionVideoContentType

       含义:视频源是否是屏幕资源。

       参数:

       

  • kRtpExtensionVideoTiming

       含义:记录视频编码开始,编码结束,打包完成,平滑发送等时间戳,不过这几个时间戳都是相对时间。

       参数:

       

    如下三个未知。

  • kRtpExtensionRtpStreamId
  • kRtpExtensionRepairedRtpStreamId
  • kRtpExtensionMid    

三、wireshark抓包示例

四、视频净荷格式

请参见:

264 RTP打包格式:https://blog.csdn.net/CrystalShaw/article/details/81538207

Vp8 RTP打包格式:https://blog.csdn.net/CrystalShaw/article/details/81289617

 

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/90606523