webrtc(10) RTP视频数据发送模块

RTP视频数据发送模块

  • 视频数据发送模块:RTPSenderVideo

  • RTPSenderVideo它包含下面的模块:
    (1)UlpfecGenerator
    (2)FlexfecSender

  • 入口函数:RTPSenderVideo::SendVideo,主要流程如下:

    • 1、如果使用了fec:SendVideoPacketWithFlexfec、SendVideoPacketAsRedMaybeWithUlpfec
      • 1.1、发送原始数据:SendVideoPacket
      • 1.2、fec编码
      • 1.3、把编码之后的冗余数据发送出去:
        • 1.3.1、RTPSender::SendToNetwork、RtpPacketHistory::PutRtpPacket,另外可能会用平滑发送机制
        • 1.3.2、RTPSender::SendPacketToNetwork
        • 1.3.3、Transport::SendRtp
    • 2、如果没有使用fec:SendVideoPacket
      • 2.1、如果使用平滑发送:
        • 2.1.1、保存媒体数据:RtpPacketHistory::PutRtpPacket
        • 2.1.2、调用平滑发送模块,时机合适的时候就进行发送:PacedSender::InsertPacket
      • 2.2、如果没有使用平滑发送:
        • 2.2.1、发送:RTPSender::SendPacketToNetwork
        • 2.2.2、保存历史数据:RtpPacketHistory::PutRtpPacket
  • 无论是是否使用fec,都有可能会用到平滑发送模块

    • 1、先把数据保存起来,因为平滑发送模块并不存放媒体数据:RtpPacketHistory::PutRtpPacket
    • 2、把媒体信息插入平滑发送模块中:PacedSender::InsertPacket
    • 3、如果允许发送了,那么调用:RTPSender::TimeToSendPacket,
    • 4、准备发送:RTPSender::PrepareAndSendPacket
    • 5、发送数据:RTPSender::SendPacketToNetwork
  • 可以看到无论使用什么方式,最终都会调用RTPSender::SendPacketToNetwork,而它直接调用Transport::SendRtp发送数据

你可能感兴趣的:(webrtc(10) RTP视频数据发送模块)