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

一、rtp包头格式

webrtc代码走读四(rtp包格式)_第1张图片

V:版本号,必须为2

P:填充位

X:扩展位,标志是否存在扩展

CC:CSRC个数

M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于1,视频包因为一帧比较大,会被分为几个包发送,最后一个包标志需要Mark一下。

sequence number:包序号,发送端指定一个起始序号(如果不指定则随机一个),然后每个包的序号依次递增;如果存在RTX,重发是此序号是rtx的序号。

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_header_extensions.cc。

一、rtp扩展头定义

webrtc代码走读四(rtp包格式)_第2张图片

RTPExtensionType 

webrtc代码走读四(rtp包格式)_第3张图片 

 二、协议介绍

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

 kRtpExtensionTransmissionTimeOffset

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

 协议:RFC 5450 - Transmission Time Offsets in RTP Streams

  • kRtpExtensionAudioLevel的rfc协议

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

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

  代码实现函数:RTPSenderAudio::SendAudio

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

 draft-holmer-rmcat-transport-wide-cc-extensions-01 

代码实现函数: RTPSender::UpdateTransportSequenceNumber 

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

参数:RTPSender::SendToNetwork

        webrtc代码走读四(rtp包格式)_第4张图片 

视频帧方向: 

webrtc代码走读四(rtp包格式)_第5张图片 

  • kRtpExtensionPlayoutDelay
  •     含义:已经播放时长

webrtc代码走读四(rtp包格式)_第6张图片

   RtpExtensionVideoContentType

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

  • kRtpExtensionVideoTiming

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

 webrtc代码走读四(rtp包格式)_第7张图片

三、视频净荷格式 

264 RTP打包格式:

webrtc 代码走读三(h264 rtp打包)_EveryDayOneHour的博客-CSDN博客

 

你可能感兴趣的:(webrtc,webrtc,p2p,音视频)