mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
[fix] fix rtcp common header
This commit is contained in:
@@ -209,7 +209,7 @@ void IceTransport::OnReceiveBuffer(NiceAgent *agent, guint stream_id,
|
||||
|
||||
bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
||||
RtcpPacketInfo *rtcp_packet_info) {
|
||||
CommonHeader rtcp_block;
|
||||
RtcpCommonHeader rtcp_block;
|
||||
// If a sender report is received but no DLRR, we need to reset the
|
||||
// roundTripTime stat according to the standard, see
|
||||
// https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats-roundtriptime
|
||||
@@ -227,7 +227,7 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
||||
switch (rtcp_block.type()) {
|
||||
case RtcpPacket::RtcpPayloadType::SR:
|
||||
LOG_INFO("Sender report");
|
||||
// valid = HandleSenderReport(rtcp_block, rtcp_packet_info);
|
||||
valid = HandleSenderReport(rtcp_block, rtcp_packet_info);
|
||||
// received_blocks[rtcp_packet_info->remote_ssrc].sender_report = true;
|
||||
break;
|
||||
case RtcpPacket::RtcpPayloadType::RR:
|
||||
@@ -301,8 +301,21 @@ bool IceTransport::ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IceTransport::HandleSenderReport(const RtcpCommonHeader &rtcp_block,
|
||||
RtcpPacketInfo *rtcp_packet_info) {
|
||||
SenderReport sender_report;
|
||||
if (!sender_report.Parse(rtcp_block)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ice_transport_controller_) {
|
||||
ice_transport_controller_->OnSenderReport(sender_report);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IceTransport::HandleCongestionControlFeedback(
|
||||
const CommonHeader &rtcp_block, RtcpPacketInfo *rtcp_packet_info) {
|
||||
const RtcpCommonHeader &rtcp_block, RtcpPacketInfo *rtcp_packet_info) {
|
||||
webrtc::rtcp::CongestionControlFeedback feedback;
|
||||
if (!feedback.Parse(rtcp_block) || feedback.packets().empty()) {
|
||||
return false;
|
||||
@@ -319,7 +332,7 @@ bool IceTransport::HandleCongestionControlFeedback(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IceTransport::HandleNack(const CommonHeader &rtcp_block,
|
||||
bool IceTransport::HandleNack(const RtcpCommonHeader &rtcp_block,
|
||||
RtcpPacketInfo *rtcp_packet_info) {
|
||||
webrtc::rtcp::Nack nack;
|
||||
if (!nack.Parse(rtcp_block)) {
|
||||
|
||||
@@ -130,10 +130,13 @@ class IceTransport {
|
||||
bool ParseRtcpPacket(const uint8_t *buffer, size_t size,
|
||||
RtcpPacketInfo *rtcp_packet_info);
|
||||
|
||||
bool HandleCongestionControlFeedback(const CommonHeader &rtcp_block,
|
||||
bool HandleSenderReport(const RtcpCommonHeader &rtcp_block,
|
||||
RtcpPacketInfo *rtcp_packet_info);
|
||||
|
||||
bool HandleCongestionControlFeedback(const RtcpCommonHeader &rtcp_block,
|
||||
RtcpPacketInfo *rtcp_packet_info);
|
||||
|
||||
bool HandleNack(const CommonHeader &rtcp_block,
|
||||
bool HandleNack(const RtcpCommonHeader &rtcp_block,
|
||||
RtcpPacketInfo *rtcp_packet_info);
|
||||
|
||||
private:
|
||||
|
||||
@@ -332,6 +332,24 @@ int IceTransportController::CreateAudioCodec() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void IceTransportController::OnSenderReport(const SenderReport& sender_report) {
|
||||
if (video_channel_receive_ &&
|
||||
sender_report.SenderSsrc() == video_channel_receive_->GetRemoteSsrc()) {
|
||||
video_channel_receive_->OnSenderReport(clock_->CurrentTimeUs(),
|
||||
sender_report.NtpTimestamp());
|
||||
} else if (audio_channel_receive_ &&
|
||||
sender_report.SenderSsrc() ==
|
||||
audio_channel_receive_->GetRemoteSsrc()) {
|
||||
audio_channel_receive_->OnSenderReport(clock_->CurrentTimeUs(),
|
||||
sender_report.NtpTimestamp());
|
||||
} else if (data_channel_receive_ &&
|
||||
sender_report.SenderSsrc() ==
|
||||
data_channel_receive_->GetRemoteSsrc()) {
|
||||
data_channel_receive_->OnSenderReport(clock_->CurrentTimeUs(),
|
||||
sender_report.NtpTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
void IceTransportController::OnCongestionControlFeedback(
|
||||
const webrtc::rtcp::CongestionControlFeedback& feedback) {
|
||||
std::optional<webrtc::TransportPacketsFeedback> feedback_msg =
|
||||
@@ -376,7 +394,7 @@ void IceTransportController::PostUpdates(webrtc::NetworkControlUpdate update) {
|
||||
target_bitrate_ = update.target_rate.has_value()
|
||||
? update.target_rate->target_rate.bps()
|
||||
: 0;
|
||||
LOG_WARN("Target bitrate [{}]bps", target_bitrate_);
|
||||
// LOG_WARN("Target bitrate [{}]bps", target_bitrate_);
|
||||
video_encoder_->SetTargetBitrate(target_bitrate_);
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ class IceTransportController
|
||||
void OnReceiveCompleteData(const char *data, size_t size);
|
||||
|
||||
public:
|
||||
void OnSenderReport(const SenderReport &sender_report);
|
||||
void OnCongestionControlFeedback(
|
||||
const webrtc::rtcp::CongestionControlFeedback &feedback);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user