Introduce MediaTransportConfig
Currently we pass media_transport from PeerConnection to media layers. The goal of this change is to replace media_transport with struct MediaTransportCondif, which will enable adding different transports (i.e. we plan to add DatagramTransport) as well as other media-transport related settings without changing 100s of files.
TODO: In the future we should consider also adding rtp_transport in the same config, but it will require a bit more work, so I did not include it in the same change.
Bug: webrtc:9719
Change-Id: Ie31e1faa3ed9e6beefe30a3da208130509ce00cd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137181
Commit-Queue: Anton Sukhanov <sukhanov@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28016}
diff --git a/audio/channel_send.cc b/audio/channel_send.cc
index e8360cb..38e89d8 100644
--- a/audio/channel_send.cc
+++ b/audio/channel_send.cc
@@ -89,7 +89,7 @@
ChannelSend(Clock* clock,
TaskQueueFactory* task_queue_factory,
ProcessThread* module_process_thread,
- MediaTransportInterface* media_transport,
+ const MediaTransportConfig& media_transport_config,
OverheadObserver* overhead_observer,
Transport* rtp_transport,
RtcpRttStats* rtcp_rtt_stats,
@@ -205,7 +205,9 @@
RTC_RUN_ON(encoder_queue_);
// Return media transport or nullptr if using RTP.
- MediaTransportInterface* media_transport() { return media_transport_; }
+ MediaTransportInterface* media_transport() {
+ return media_transport_config_.media_transport;
+ }
// Called on the encoder task queue when a new input audio frame is ready
// for encoding.
@@ -266,7 +268,7 @@
bool encoder_queue_is_active_ RTC_GUARDED_BY(encoder_queue_) = false;
- MediaTransportInterface* const media_transport_;
+ MediaTransportConfig media_transport_config_;
int media_transport_sequence_number_ RTC_GUARDED_BY(encoder_queue_) = 0;
rtc::CriticalSection media_transport_lock_;
@@ -618,7 +620,7 @@
ChannelSend::ChannelSend(Clock* clock,
TaskQueueFactory* task_queue_factory,
ProcessThread* module_process_thread,
- MediaTransportInterface* media_transport,
+ const MediaTransportConfig& media_transport_config,
OverheadObserver* overhead_observer,
Transport* rtp_transport,
RtcpRttStats* rtcp_rtt_stats,
@@ -642,7 +644,7 @@
new RateLimiter(clock, kMaxRetransmissionWindowMs)),
use_twcc_plr_for_ana_(
webrtc::field_trial::FindFullName("UseTwccPlrForAna") == "Enabled"),
- media_transport_(media_transport),
+ media_transport_config_(media_transport_config),
frame_encryptor_(frame_encryptor),
crypto_options_(crypto_options),
encoder_queue_(task_queue_factory->CreateTaskQueue(
@@ -659,7 +661,7 @@
// transport. All of this logic should be moved to the future
// RTPMediaTransport. In this case it means that overhead and bandwidth
// observers should not be called when using media transport.
- if (!media_transport_) {
+ if (!media_transport_config.media_transport) {
configuration.overhead_observer = overhead_observer;
configuration.bandwidth_callback = rtcp_observer_.get();
configuration.transport_feedback_callback = feedback_observer_proxy_.get();
@@ -689,10 +691,11 @@
// We want to invoke the 'TargetRateObserver' and |OnOverheadChanged|
// callbacks after the audio_coding_ is fully initialized.
- if (media_transport_) {
+ if (media_transport_config.media_transport) {
RTC_DLOG(LS_INFO) << "Setting media_transport_ rate observers.";
- media_transport_->AddTargetTransferRateObserver(this);
- media_transport_->SetAudioOverheadObserver(overhead_observer);
+ media_transport_config.media_transport->AddTargetTransferRateObserver(this);
+ media_transport_config.media_transport->SetAudioOverheadObserver(
+ overhead_observer);
} else {
RTC_DLOG(LS_INFO) << "Not setting media_transport_ rate observers.";
}
@@ -714,9 +717,10 @@
ChannelSend::~ChannelSend() {
RTC_DCHECK(construction_thread_.IsCurrent());
- if (media_transport_) {
- media_transport_->RemoveTargetTransferRateObserver(this);
- media_transport_->SetAudioOverheadObserver(nullptr);
+ if (media_transport_config_.media_transport) {
+ media_transport_config_.media_transport->RemoveTargetTransferRateObserver(
+ this);
+ media_transport_config_.media_transport->SetAudioOverheadObserver(nullptr);
}
StopSend();
@@ -779,7 +783,7 @@
encoder->RtpTimestampRateHz(),
encoder->NumChannels(), 0);
- if (media_transport_) {
+ if (media_transport_config_.media_transport) {
rtc::CritScope cs(&media_transport_lock_);
media_transport_payload_type_ = payload_type;
// TODO(nisse): Currently broken for G722, since timestamps passed through
@@ -856,7 +860,7 @@
void ChannelSend::ReceivedRTCPPacket(const uint8_t* data, size_t length) {
// May be called on either worker thread or network thread.
- if (media_transport_) {
+ if (media_transport_config_.media_transport) {
// Ignore RTCP packets while media transport is used.
// Those packets should not arrive, but we are seeing occasional packets.
return;
@@ -931,7 +935,7 @@
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
RTC_DCHECK(!sending_);
- if (media_transport_) {
+ if (media_transport_config_.media_transport) {
rtc::CritScope cs(&media_transport_lock_);
media_transport_channel_id_ = ssrc;
}
@@ -1165,12 +1169,13 @@
}
int64_t ChannelSend::GetRTT() const {
- if (media_transport_) {
+ if (media_transport_config_.media_transport) {
// GetRTT is generally used in the RTCP codepath, where media transport is
// not present and so it shouldn't be needed. But it's also invoked in
// 'GetStats' method, and for now returning media transport RTT here gives
// us "free" rtt stats for media transport.
- auto target_rate = media_transport_->GetLatestTargetTransferRate();
+ auto target_rate =
+ media_transport_config_.media_transport->GetLatestTargetTransferRate();
if (target_rate.has_value()) {
return target_rate.value().network_estimate.round_trip_time.ms();
}
@@ -1214,7 +1219,7 @@
// AudioSendStream. Since AudioSendStream owns encoder and configures ANA, it
// makes sense to consolidate all rate (and overhead) calculation there.
void ChannelSend::OnTargetTransferRate(TargetTransferRate rate) {
- RTC_DCHECK(media_transport_);
+ RTC_DCHECK(media_transport_config_.media_transport);
OnReceivedRtt(rate.network_estimate.round_trip_time.ms());
}
@@ -1230,7 +1235,7 @@
Clock* clock,
TaskQueueFactory* task_queue_factory,
ProcessThread* module_process_thread,
- MediaTransportInterface* media_transport,
+ const MediaTransportConfig& media_transport_config,
OverheadObserver* overhead_observer,
Transport* rtp_transport,
RtcpRttStats* rtcp_rtt_stats,
@@ -1240,7 +1245,7 @@
bool extmap_allow_mixed,
int rtcp_report_interval_ms) {
return absl::make_unique<ChannelSend>(
- clock, task_queue_factory, module_process_thread, media_transport,
+ clock, task_queue_factory, module_process_thread, media_transport_config,
overhead_observer, rtp_transport, rtcp_rtt_stats, rtc_event_log,
frame_encryptor, crypto_options, extmap_allow_mixed,
rtcp_report_interval_ms);