一、编码到发包函数调用图

webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)

 

二、编码函数代码走读

webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)

encoded_image_缓存的是编码后的数据。frag_header是NALS组信息。

encoded_image_缓存数据格式为:4个字节起始码+NALHead+date+4个字节起始码+NALHead+date.......

RTPFragmentationHeader* frag_header参数fragmentationOffset和fragmentationLength含义如下:

webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)

三、发包函数代码走读

RTPSenderVideo::SendVideo函数四个变量比较绕,整理含义如下(该图没有包含FEC_head):

rtp_sender_->MaxRtpPacketSize()=kVideoMtu:报文最大长度。

packet_capacity:报文去掉RtxHeader后的长度。

max_data_payload_length:名称虽然是总净荷长度,但是实际上这个长度中包含了extension字段。

last_packet_reduction_len:新增extension字段组总长度。如下三个extension长度。

webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)

关于extension字段介绍连接如下:https://blog.csdn.net/CrystalShaw/article/details/90606523

webrtc代码走读十三(RTPSenderVideo::SendVideo视频打包)

备注说明:

last_packet_reduction_len通过last_packet->headers_size() - rtp_header->headers_size()计算得出。

rtp_header->headers_size()的计算流程是:

->rtp_sender_->AllocatePacket()

->packet->SetCsrcs

->payload_offset_ = kFixedHeaderSize + 4 * csrcs.size();

->rtp_sender_->AllocatePacket()

->packet->ReserveExtension()

->packet->AllocateExtension()

->packet->AllocateRawExtension()

->payload_offset_ = extensions_offset + 4 * extensions_words;

last_packet->headers_size()的计算流程是:

->packet->SetExtension()

->packet->AllocateExtension()

->packet->AllocateRawExtension()

->payload_offset_ = extensions_offset + 4 * extensions_words;

相关文章:

  • 2022-12-23
  • 2022-01-11
  • 2021-12-17
  • 2021-07-17
  • 2021-09-21
  • 2021-11-08
猜你喜欢
  • 2021-12-08
  • 2021-07-25
  • 2022-12-23
  • 2021-08-17
  • 2021-10-24
  • 2021-09-24
  • 2022-12-23
相关资源
相似解决方案