webrtc BWE 判断流程

这里主要说的是接收端的判断流程:

 

// Send-side BWE.         rtp 扩展 transport sequence number

// Receive-side BWE.      Rtp 扩展 abs-send-time

 

1:

PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type,

                                                rtc::CopyOnWriteBuffer packet,

                                                int64_t packet_time_us)

 

2:

//每一个 rtp packet 都判断;

void Call::NotifyBweOfReceivedPacket(const RtpPacketReceived& packet,

                                     MediaType media_type) {

  auto it = receive_rtp_config_.find(packet.Ssrc());

  bool use_send_side_bwe =

      (it != receive_rtp_config_.end()) && it->second.use_send_side_bwe;

 

  RTPHeader header;

  packet.GetHeader(&header);

 

  if (!use_send_side_bwe && header.extension.hasTransportSequenceNumber) {

    // Inconsistent configuration of send side BWE. Do nothing.

    // TODO(nisse): Without this check, we may produce RTCP feedback

    // packets even when not negotiated. But it would be cleaner to

    // move the check down to RTCPSender::SendFeedbackPacket, which

    // would also help the PacketRouter to select an appropriate rtp

    // module in the case that some, but not all, have RTCP feedback

    // enabled.

    return;

  }

  // For audio, we only support send side BWE.

//注意这里,audio 仅支持 send side BWE;

  if (media_type == MediaType::VIDEO ||

      (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) {

    receive_side_cc_.OnReceivedPacket(

        packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(),

        header);

  }

}

 

3:

//就是在这个函数里判断;

void ReceiveSideCongestionController::OnReceivedPacket(

    int64_t arrival_time_ms,

    size_t payload_size,

    const RTPHeader& header) {

  // Send-side BWE.

  if (header.extension.hasTransportSequenceNumber) {

    remote_estimator_proxy_.IncomingPacket(arrival_time_ms, payload_size,

                                           header);

  } else {

    // Receive-side BWE.

    remote_bitrate_estimator_.IncomingPacket(arrival_time_ms, payload_size,

                                             header);

  }

}

你可能感兴趣的:(WebRTC)