mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
In rtc event log visualizer use modern api of the ReceiveSideCongestionController
Bug: webrtc:14859 Change-Id: I121905a892aaafb54c1fff62f818bfd767b92da0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/296823 Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39755}
This commit is contained in:
parent
40a0e3191a
commit
4b61f3a0c6
1 changed files with 77 additions and 6 deletions
|
@ -46,6 +46,7 @@
|
|||
#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
|
||||
#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
|
@ -339,6 +340,72 @@ std::string GetDirectionAsShortString(PacketDirection direction) {
|
|||
}
|
||||
}
|
||||
|
||||
struct FakeExtensionSmall {
|
||||
static constexpr RTPExtensionType kId = kRtpExtensionMid;
|
||||
static constexpr absl::string_view Uri() { return "fake-extension-small"; }
|
||||
};
|
||||
struct FakeExtensionLarge {
|
||||
static constexpr RTPExtensionType kId = kRtpExtensionRtpStreamId;
|
||||
static constexpr absl::string_view Uri() { return "fake-extension-large"; }
|
||||
};
|
||||
|
||||
RtpPacketReceived RtpPacketForBWEFromHeader(const RTPHeader& header) {
|
||||
RtpHeaderExtensionMap rtp_header_extensions(/*extmap_allow_mixed=*/true);
|
||||
// ReceiveSideCongestionController doesn't need to know extensions ids as
|
||||
// long as it able to get extensions by type. So any ids would work here.
|
||||
rtp_header_extensions.Register<TransmissionOffset>(1);
|
||||
rtp_header_extensions.Register<AbsoluteSendTime>(2);
|
||||
rtp_header_extensions.Register<TransportSequenceNumber>(3);
|
||||
rtp_header_extensions.Register<FakeExtensionSmall>(4);
|
||||
// Use id > 14 to force two byte header per rtp header when this one is used.
|
||||
rtp_header_extensions.Register<FakeExtensionLarge>(16);
|
||||
|
||||
RtpPacketReceived rtp_packet(&rtp_header_extensions);
|
||||
// Set only fields that might be relevant for the bandwidth estimatior.
|
||||
rtp_packet.SetSsrc(header.ssrc);
|
||||
rtp_packet.SetTimestamp(header.timestamp);
|
||||
size_t num_bwe_extensions = 0;
|
||||
if (header.extension.hasTransmissionTimeOffset) {
|
||||
rtp_packet.SetExtension<TransmissionOffset>(
|
||||
header.extension.transmissionTimeOffset);
|
||||
++num_bwe_extensions;
|
||||
}
|
||||
if (header.extension.hasAbsoluteSendTime) {
|
||||
rtp_packet.SetExtension<AbsoluteSendTime>(
|
||||
header.extension.absoluteSendTime);
|
||||
++num_bwe_extensions;
|
||||
}
|
||||
if (header.extension.hasTransportSequenceNumber) {
|
||||
rtp_packet.SetExtension<TransportSequenceNumber>(
|
||||
header.extension.transportSequenceNumber);
|
||||
++num_bwe_extensions;
|
||||
}
|
||||
|
||||
// All parts of the RTP header are 32bit aligned.
|
||||
RTC_CHECK_EQ(header.headerLength % 4, 0);
|
||||
|
||||
// Original packet could have more extensions, there could be csrcs that are
|
||||
// not propagated by the rtc event log, i.e. logged header size might be
|
||||
// larger that rtp_packet.header_size(). Increase it by setting an extra fake
|
||||
// extension.
|
||||
RTC_CHECK_GE(header.headerLength, rtp_packet.headers_size());
|
||||
size_t bytes_to_add = header.headerLength - rtp_packet.headers_size();
|
||||
if (bytes_to_add > 0) {
|
||||
if (bytes_to_add <= 16) {
|
||||
// one-byte header rtp header extension allows to add up to 16 bytes.
|
||||
rtp_packet.AllocateExtension(FakeExtensionSmall::kId, bytes_to_add - 1);
|
||||
} else {
|
||||
// two-byte header rtp header extension would also add one byte per
|
||||
// already set extension.
|
||||
rtp_packet.AllocateExtension(FakeExtensionLarge::kId,
|
||||
bytes_to_add - 2 - num_bwe_extensions);
|
||||
}
|
||||
}
|
||||
RTC_CHECK_EQ(rtp_packet.headers_size(), header.headerLength);
|
||||
|
||||
return rtp_packet;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log,
|
||||
|
@ -1468,12 +1535,16 @@ void EventLogAnalyzer::CreateReceiveSideBweSimulationGraph(Plot* plot) {
|
|||
int64_t last_update_us = 0;
|
||||
for (const auto& kv : incoming_rtp) {
|
||||
const RtpPacketType& packet = *kv.second;
|
||||
int64_t arrival_time_ms = packet.rtp.log_time_us() / 1000;
|
||||
size_t payload = packet.rtp.total_length; /*Should subtract header?*/
|
||||
clock.AdvanceTimeMicroseconds(packet.rtp.log_time_us() -
|
||||
clock.TimeInMicroseconds());
|
||||
rscc.OnReceivedPacket(arrival_time_ms, payload, packet.rtp.header);
|
||||
acked_bitrate.Update(payload, arrival_time_ms);
|
||||
|
||||
RtpPacketReceived rtp_packet = RtpPacketForBWEFromHeader(packet.rtp.header);
|
||||
rtp_packet.set_arrival_time(packet.rtp.log_time());
|
||||
rtp_packet.SetPayloadSize(packet.rtp.total_length -
|
||||
rtp_packet.headers_size());
|
||||
|
||||
clock.AdvanceTime(rtp_packet.arrival_time() - clock.CurrentTime());
|
||||
rscc.OnReceivedPacket(rtp_packet, MediaType::VIDEO);
|
||||
int64_t arrival_time_ms = packet.rtp.log_time().ms();
|
||||
acked_bitrate.Update(packet.rtp.total_length, arrival_time_ms);
|
||||
absl::optional<uint32_t> bitrate_bps = acked_bitrate.Rate(arrival_time_ms);
|
||||
if (bitrate_bps) {
|
||||
uint32_t y = *bitrate_bps / 1000;
|
||||
|
|
Loading…
Reference in a new issue