Delete media transport integration.
MediaTransport is deprecated and the code is unused.
No-Try: True
Bug: webrtc:9719
Change-Id: I5b864c1e74bf04df16c15f51b8fac3d407331dcd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160620
Commit-Queue: Bjorn Mellem <mellem@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29923}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 4d0b61f..bc44bbb 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -606,7 +606,6 @@
":libjingle_peerconnection",
":pc_test_utils",
"../api:callfactory_api",
- "../api:fake_media_transport",
"../api:rtc_event_log_output_file",
"../api:rtc_stats_api",
"../api:rtp_parameters",
diff --git a/pc/channel.cc b/pc/channel.cc
index 8392775..fc5337a 100644
--- a/pc/channel.cc
+++ b/pc/channel.cc
@@ -150,10 +150,6 @@
TRACE_EVENT0("webrtc", "BaseChannel::~BaseChannel");
RTC_DCHECK_RUN_ON(worker_thread_);
- if (media_transport_config_.media_transport) {
- media_transport_config_.media_transport->RemoveNetworkChangeCallback(this);
- }
-
// Eats any outstanding messages or packets.
worker_thread_->Clear(&invoker_);
worker_thread_->Clear(this);
@@ -171,15 +167,8 @@
}
rtp_transport_->SignalReadyToSend.connect(
this, &BaseChannel::OnTransportReadyToSend);
-
- // If media transport is used, it's responsible for providing network
- // route changed callbacks.
- if (!media_transport_config_.media_transport) {
- rtp_transport_->SignalNetworkRouteChanged.connect(
- this, &BaseChannel::OnNetworkRouteChanged);
- }
- // TODO(bugs.webrtc.org/9719): Media transport should also be used to provide
- // 'writable' state here.
+ rtp_transport_->SignalNetworkRouteChanged.connect(
+ this, &BaseChannel::OnNetworkRouteChanged);
rtp_transport_->SignalWritableState.connect(this,
&BaseChannel::OnWritableState);
rtp_transport_->SignalSentPacket.connect(this,
@@ -208,12 +197,6 @@
// Both RTP and RTCP channels should be set, we can call SetInterface on
// the media channel and it can set network options.
media_channel_->SetInterface(this, media_transport_config);
-
- RTC_LOG(LS_INFO) << "BaseChannel::Init_w, media_transport_config="
- << media_transport_config.DebugString();
- if (media_transport_config_.media_transport) {
- media_transport_config_.media_transport->AddNetworkChangeCallback(this);
- }
}
void BaseChannel::Deinit() {
@@ -802,9 +785,6 @@
ssrc_generator) {}
VoiceChannel::~VoiceChannel() {
- if (media_transport()) {
- media_transport()->SetFirstAudioPacketReceivedObserver(nullptr);
- }
TRACE_EVENT0("webrtc", "VoiceChannel::~VoiceChannel");
// this can't be done in the base class, since it calls a virtual
DisableMedia_w();
@@ -817,24 +797,10 @@
[this] { UpdateMediaSendRecvState_w(); });
}
-void BaseChannel::OnNetworkRouteChanged(
- const rtc::NetworkRoute& network_route) {
- OnNetworkRouteChanged(absl::make_optional(network_route));
-}
-
void VoiceChannel::Init_w(
webrtc::RtpTransportInternal* rtp_transport,
const webrtc::MediaTransportConfig& media_transport_config) {
BaseChannel::Init_w(rtp_transport, media_transport_config);
- if (media_transport_config.media_transport) {
- media_transport_config.media_transport->SetFirstAudioPacketReceivedObserver(
- this);
- }
-}
-
-void VoiceChannel::OnFirstAudioPacketReceived(int64_t channel_id) {
- has_received_packet_ = true;
- signaling_thread()->Post(RTC_FROM_HERE, this, MSG_FIRSTPACKETRECEIVED);
}
void VoiceChannel::UpdateMediaSendRecvState_w() {
diff --git a/pc/channel.h b/pc/channel.h
index 62fcaa2..c2b9e40 100644
--- a/pc/channel.h
+++ b/pc/channel.h
@@ -74,8 +74,7 @@
public rtc::MessageHandler,
public sigslot::has_slots<>,
public MediaChannel::NetworkInterface,
- public webrtc::RtpPacketSinkInterface,
- public webrtc::MediaTransportNetworkChangeCallback {
+ public webrtc::RtpPacketSinkInterface {
public:
// If |srtp_required| is true, the channel will not send or receive any
// RTP/RTCP packets without using SRTP (either using SDES or DTLS-SRTP).
@@ -156,11 +155,6 @@
// Fired on the network thread.
sigslot::signal1<const std::string&> SignalRtcpMuxFullyActive;
- // Returns media transport, can be null if media transport is not available.
- webrtc::MediaTransportInterface* media_transport() {
- return media_transport_config_.media_transport;
- }
-
// From RtpTransport - public for testing only
void OnTransportReadyToSend(bool ready);
@@ -287,9 +281,6 @@
void SignalSentPacket_n(const rtc::SentPacket& sent_packet);
bool IsReadyToSendMedia_n() const;
- // MediaTransportNetworkChangeCallback override.
- void OnNetworkRouteChanged(const rtc::NetworkRoute& network_route) override;
-
rtc::Thread* const worker_thread_;
rtc::Thread* const network_thread_;
rtc::Thread* const signaling_thread_;
@@ -337,8 +328,7 @@
// VoiceChannel is a specialization that adds support for early media, DTMF,
// and input/output level monitoring.
-class VoiceChannel : public BaseChannel,
- public webrtc::AudioPacketReceivedObserver {
+class VoiceChannel : public BaseChannel {
public:
VoiceChannel(rtc::Thread* worker_thread,
rtc::Thread* network_thread,
@@ -372,8 +362,6 @@
webrtc::SdpType type,
std::string* error_desc) override;
- void OnFirstAudioPacketReceived(int64_t channel_id) override;
-
// Last AudioSendParameters sent down to the media_channel() via
// SetSendParameters.
AudioSendParameters last_send_params_;
diff --git a/pc/channel_manager_unittest.cc b/pc/channel_manager_unittest.cc
index ab3b88b..9078513 100644
--- a/pc/channel_manager_unittest.cc
+++ b/pc/channel_manager_unittest.cc
@@ -13,7 +13,6 @@
#include <memory>
#include "api/rtc_error.h"
-#include "api/test/fake_media_transport.h"
#include "api/transport/media/media_transport_config.h"
#include "api/video/builtin_video_bitrate_allocator_factory.h"
#include "media/base/fake_media_engine.h"
@@ -74,18 +73,6 @@
return dtls_srtp_transport;
}
- std::unique_ptr<webrtc::MediaTransportInterface> CreateMediaTransport(
- rtc::PacketTransportInternal* packet_transport) {
- webrtc::MediaTransportSettings settings;
- settings.is_caller = true;
- auto media_transport_result =
- fake_media_transport_factory_.CreateMediaTransport(
- packet_transport, network_.get(),
- /*is_caller=*/settings);
- RTC_CHECK(media_transport_result.ok());
- return media_transport_result.MoveValue();
- }
-
void TestCreateDestroyChannels(
webrtc::RtpTransportInternal* rtp_transport,
webrtc::MediaTransportConfig media_transport_config) {
@@ -122,7 +109,6 @@
cricket::FakeDataEngine* fdme_;
std::unique_ptr<cricket::ChannelManager> cm_;
cricket::FakeCall fake_call_;
- webrtc::FakeMediaTransportFactory fake_media_transport_factory_;
rtc::UniqueRandomIdGenerator ssrc_generator_;
};
@@ -192,14 +178,6 @@
webrtc::MediaTransportConfig());
}
-TEST_F(ChannelManagerTest, CreateDestroyChannelsWithMediaTransport) {
- EXPECT_TRUE(cm_->Init());
- auto rtp_transport = CreateDtlsSrtpTransport();
- auto media_transport = CreateMediaTransport(rtp_dtls_transport_.get());
- TestCreateDestroyChannels(
- rtp_transport.get(), webrtc::MediaTransportConfig(media_transport.get()));
-}
-
TEST_F(ChannelManagerTest, CreateDestroyChannelsOnThread) {
network_->Start();
worker_->Start();
diff --git a/pc/datagram_rtp_transport.h b/pc/datagram_rtp_transport.h
index 8aadf97..f9684c6 100644
--- a/pc/datagram_rtp_transport.h
+++ b/pc/datagram_rtp_transport.h
@@ -18,6 +18,7 @@
#include "api/crypto/crypto_options.h"
#include "api/transport/datagram_transport_interface.h"
+#include "api/transport/media/media_transport_interface.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
#include "p2p/base/ice_transport_internal.h"
diff --git a/pc/jsep_transport.cc b/pc/jsep_transport.cc
index 79b933c9..37f3162 100644
--- a/pc/jsep_transport.cc
+++ b/pc/jsep_transport.cc
@@ -111,7 +111,6 @@
std::unique_ptr<DtlsTransportInternal> rtp_dtls_transport,
std::unique_ptr<DtlsTransportInternal> rtcp_dtls_transport,
std::unique_ptr<SctpTransportInternal> sctp_transport,
- std::unique_ptr<webrtc::MediaTransportInterface> media_transport,
std::unique_ptr<webrtc::DatagramTransportInterface> datagram_transport,
webrtc::DataChannelTransportInterface* data_channel_transport)
: network_thread_(rtc::Thread::Current()),
@@ -139,7 +138,6 @@
? new rtc::RefCountedObject<webrtc::SctpTransport>(
std::move(sctp_transport))
: nullptr),
- media_transport_(std::move(media_transport)),
datagram_transport_(std::move(datagram_transport)),
datagram_rtp_transport_(std::move(datagram_rtp_transport)),
data_channel_transport_(data_channel_transport) {
@@ -149,7 +147,6 @@
// present.
RTC_DCHECK_EQ((rtcp_ice_transport_ != nullptr),
(rtcp_dtls_transport_ != nullptr));
- RTC_DCHECK(!datagram_transport_ || !media_transport_);
// Verify the "only one out of these three can be set" invariant.
if (unencrypted_rtp_transport_) {
RTC_DCHECK(!sdes_transport);
@@ -173,10 +170,6 @@
datagram_rtp_transport_.get(), default_rtp_transport()});
}
- if (media_transport_) {
- media_transport_->SetMediaTransportStateCallback(this);
- }
-
if (data_channel_transport_ && sctp_data_channel_transport_) {
composite_data_channel_transport_ =
std::make_unique<webrtc::CompositeDataChannelTransport>(
@@ -186,11 +179,6 @@
}
JsepTransport::~JsepTransport() {
- // Disconnect media transport state callbacks.
- if (media_transport_) {
- media_transport_->SetMediaTransportStateCallback(nullptr);
- }
-
if (sctp_transport_) {
sctp_transport_->Clear();
}
@@ -784,18 +772,6 @@
return true;
}
-void JsepTransport::OnStateChanged(webrtc::MediaTransportState state) {
- // TODO(bugs.webrtc.org/9719) This method currently fires on the network
- // thread, but media transport does not make such guarantees. We need to make
- // sure this callback is guaranteed to be executed on the network thread.
- RTC_DCHECK_RUN_ON(network_thread_);
- {
- rtc::CritScope scope(&accessor_lock_);
- media_transport_state_ = state;
- }
- SignalMediaTransportStateChanged();
-}
-
void JsepTransport::NegotiateDatagramTransport(SdpType type) {
RTC_DCHECK(type == SdpType::kAnswer || type == SdpType::kPrAnswer);
rtc::CritScope lock(&accessor_lock_);
diff --git a/pc/jsep_transport.h b/pc/jsep_transport.h
index 658e8e7..5f7d46f 100644
--- a/pc/jsep_transport.h
+++ b/pc/jsep_transport.h
@@ -21,7 +21,6 @@
#include "api/ice_transport_interface.h"
#include "api/jsep.h"
#include "api/transport/datagram_transport_interface.h"
-#include "api/transport/media/media_transport_interface.h"
#include "media/sctp/sctp_transport_internal.h"
#include "p2p/base/dtls_transport.h"
#include "p2p/base/p2p_constants.h"
@@ -89,16 +88,11 @@
//
// On Threading: JsepTransport performs work solely on the network thread, and
// so its methods should only be called on the network thread.
-class JsepTransport : public sigslot::has_slots<>,
- public webrtc::MediaTransportStateCallback {
+class JsepTransport : public sigslot::has_slots<> {
public:
// |mid| is just used for log statements in order to identify the Transport.
// Note that |local_certificate| is allowed to be null since a remote
// description may be set before a local certificate is generated.
- //
- // |media_trasport| is optional (experimental). If available it will be used
- // to send / receive encoded audio and video frames instead of RTP.
- // Currently |media_transport| can co-exist with RTP / RTCP transports.
JsepTransport(
const std::string& mid,
const rtc::scoped_refptr<rtc::RTCCertificate>& local_certificate,
@@ -111,7 +105,6 @@
std::unique_ptr<DtlsTransportInternal> rtp_dtls_transport,
std::unique_ptr<DtlsTransportInternal> rtcp_dtls_transport,
std::unique_ptr<SctpTransportInternal> sctp_transport,
- std::unique_ptr<webrtc::MediaTransportInterface> media_transport,
std::unique_ptr<webrtc::DatagramTransportInterface> datagram_transport,
webrtc::DataChannelTransportInterface* data_channel_transport);
@@ -246,34 +239,17 @@
return data_channel_transport_;
}
- // Returns media transport, if available.
- // Note that media transport is owned by jseptransport and the pointer
- // to media transport will becomes invalid after destruction of jseptransport.
- webrtc::MediaTransportInterface* media_transport() const {
- rtc::CritScope scope(&accessor_lock_);
- return media_transport_.get();
- }
-
// Returns datagram transport, if available.
webrtc::DatagramTransportInterface* datagram_transport() const {
rtc::CritScope scope(&accessor_lock_);
return datagram_transport_.get();
}
- // Returns the latest media transport state.
- webrtc::MediaTransportState media_transport_state() const {
- rtc::CritScope scope(&accessor_lock_);
- return media_transport_state_;
- }
-
// This is signaled when RTCP-mux becomes active and
// |rtcp_dtls_transport_| is destroyed. The JsepTransportController will
// handle the signal and update the aggregate transport states.
sigslot::signal<> SignalRtcpMuxActive;
- // This is signaled for changes in |media_transport_| state.
- sigslot::signal<> SignalMediaTransportStateChanged;
-
// Signals that a data channel transport was negotiated and may be used to
// send data. The first parameter is |this|. The second parameter is the
// transport that was negotiated, or null if negotiation rejected the data
@@ -338,9 +314,6 @@
bool GetTransportStats(DtlsTransportInternal* dtls_transport,
TransportStats* stats);
- // Invoked whenever the state of the media transport changes.
- void OnStateChanged(webrtc::MediaTransportState state) override;
-
// Deactivates, signals removal, and deletes |composite_rtp_transport_| if the
// current state of negotiation is sufficient to determine which rtp_transport
// and data channel transport to use.
@@ -418,10 +391,6 @@
absl::optional<std::vector<int>> recv_extension_ids_
RTC_GUARDED_BY(network_thread_);
- // Optional media transport (experimental).
- std::unique_ptr<webrtc::MediaTransportInterface> media_transport_
- RTC_GUARDED_BY(accessor_lock_);
-
// Optional datagram transport (experimental).
std::unique_ptr<webrtc::DatagramTransportInterface> datagram_transport_
RTC_GUARDED_BY(accessor_lock_);
@@ -429,9 +398,8 @@
std::unique_ptr<webrtc::RtpTransportInternal> datagram_rtp_transport_
RTC_GUARDED_BY(accessor_lock_);
- // Non-SCTP data channel transport. Set to one of |media_transport_| or
- // |datagram_transport_| if that transport should be used for data chanels.
- // Unset if neither should be used for data channels.
+ // Non-SCTP data channel transport. Set to |datagram_transport_| if that
+ // transport should be used for data chanels. Unset otherwise.
webrtc::DataChannelTransportInterface* data_channel_transport_
RTC_GUARDED_BY(accessor_lock_) = nullptr;
@@ -439,15 +407,6 @@
std::unique_ptr<webrtc::CompositeDataChannelTransport>
composite_data_channel_transport_ RTC_GUARDED_BY(accessor_lock_);
- // If |media_transport_| is provided, this variable represents the state of
- // media transport.
- //
- // NOTE: datagram transport state is handled by DatagramDtlsAdaptor, because
- // DatagramDtlsAdaptor owns DatagramTransport. This state only represents
- // media transport.
- webrtc::MediaTransportState media_transport_state_
- RTC_GUARDED_BY(accessor_lock_) = webrtc::MediaTransportState::kPending;
-
RTC_DISALLOW_COPY_AND_ASSIGN(JsepTransport);
};
diff --git a/pc/jsep_transport_controller.cc b/pc/jsep_transport_controller.cc
index 590aa6b..f62cd87 100644
--- a/pc/jsep_transport_controller.cc
+++ b/pc/jsep_transport_controller.cc
@@ -18,7 +18,6 @@
#include "api/transport/datagram_transport_interface.h"
#include "api/transport/media/media_transport_interface.h"
#include "p2p/base/ice_transport_internal.h"
-#include "p2p/base/no_op_dtls_transport.h"
#include "p2p/base/port.h"
#include "pc/datagram_rtp_transport.h"
#include "pc/srtp_filter.h"
@@ -148,22 +147,12 @@
return MediaTransportConfig();
}
- MediaTransportInterface* media_transport = nullptr;
- if (config_.use_media_transport_for_media) {
- media_transport = jsep_transport->media_transport();
- }
-
DatagramTransportInterface* datagram_transport = nullptr;
if (config_.use_datagram_transport) {
datagram_transport = jsep_transport->datagram_transport();
}
- // Media transport and datagram transports can not be used together.
- RTC_DCHECK(!media_transport || !datagram_transport);
-
- if (media_transport) {
- return MediaTransportConfig(media_transport);
- } else if (datagram_transport) {
+ if (datagram_transport) {
return MediaTransportConfig(
/*rtp_max_packet_size=*/datagram_transport->GetLargestDatagramSize());
} else {
@@ -180,15 +169,6 @@
return jsep_transport->data_channel_transport();
}
-MediaTransportState JsepTransportController::GetMediaTransportState(
- const std::string& mid) const {
- auto jsep_transport = GetJsepTransportForMid(mid);
- if (!jsep_transport) {
- return MediaTransportState::kPending;
- }
- return jsep_transport->media_transport_state();
-}
-
cricket::DtlsTransportInternal* JsepTransportController::GetDtlsTransport(
const std::string& mid) {
auto jsep_transport = GetJsepTransportForMid(mid);
@@ -446,26 +426,9 @@
}
void JsepTransportController::SetMediaTransportSettings(
- bool use_media_transport_for_media,
- bool use_media_transport_for_data_channels,
bool use_datagram_transport,
bool use_datagram_transport_for_data_channels,
bool use_datagram_transport_for_data_channels_receive_only) {
- RTC_DCHECK(use_media_transport_for_media ==
- config_.use_media_transport_for_media ||
- jsep_transports_by_name_.empty())
- << "You can only change media transport configuration before creating "
- "the first transport.";
-
- RTC_DCHECK(use_media_transport_for_data_channels ==
- config_.use_media_transport_for_data_channels ||
- jsep_transports_by_name_.empty())
- << "You can only change media transport configuration before creating "
- "the first transport.";
-
- config_.use_media_transport_for_media = use_media_transport_for_media;
- config_.use_media_transport_for_data_channels =
- use_media_transport_for_data_channels;
config_.use_datagram_transport = use_datagram_transport;
config_.use_datagram_transport_for_data_channels =
use_datagram_transport_for_data_channels;
@@ -514,14 +477,6 @@
if (datagram_transport) {
RTC_DCHECK(config_.use_datagram_transport ||
config_.use_datagram_transport_for_data_channels);
- } else if (config_.media_transport_factory &&
- config_.use_media_transport_for_media &&
- config_.use_media_transport_for_data_channels) {
- // If media transport is used for both media and data channels,
- // then we don't need to create DTLS.
- // Otherwise, DTLS is still created.
- dtls = std::make_unique<cricket::NoOpDtlsTransport>(ice,
- config_.crypto_options);
} else if (config_.dtls_transport_factory) {
dtls = config_.dtls_transport_factory->CreateDtlsTransport(
ice, config_.crypto_options);
@@ -916,13 +871,12 @@
mid_to_transport_[mid] = jsep_transport;
return config_.transport_observer->OnTransportChanged(
mid, jsep_transport->rtp_transport(), jsep_transport->RtpDtlsTransport(),
- jsep_transport->media_transport(),
jsep_transport->data_channel_transport());
}
void JsepTransportController::RemoveTransportForMid(const std::string& mid) {
- bool ret = config_.transport_observer->OnTransportChanged(
- mid, nullptr, nullptr, nullptr, nullptr);
+ bool ret = config_.transport_observer->OnTransportChanged(mid, nullptr,
+ nullptr, nullptr);
// Calling OnTransportChanged with nullptr should always succeed, since it is
// only expected to fail when adding media to a transport (not removing).
RTC_DCHECK(ret);
@@ -1102,76 +1056,6 @@
return (it == jsep_transports_by_name_.end()) ? nullptr : it->second.get();
}
-std::unique_ptr<webrtc::MediaTransportInterface>
-JsepTransportController::MaybeCreateMediaTransport(
- const cricket::ContentInfo& content_info,
- const cricket::SessionDescription& description,
- bool local) {
- if (config_.media_transport_factory == nullptr) {
- return nullptr;
- }
-
- if (!config_.use_media_transport_for_media &&
- !config_.use_media_transport_for_data_channels) {
- return nullptr;
- }
-
- // Caller (offerer) media transport.
- if (local) {
- if (offer_media_transport_) {
- RTC_LOG(LS_INFO) << "Offered media transport has now been activated.";
- return std::move(offer_media_transport_);
- } else {
- RTC_LOG(LS_INFO)
- << "Not returning media transport. Either SDES wasn't enabled, or "
- "media transport didn't return an offer earlier.";
- // Offer wasn't generated. Either because media transport didn't want it,
- // or because SDES wasn't enabled.
- return nullptr;
- }
- }
-
- // Remote offer. If no x-mt lines, do not create media transport.
- if (description.MediaTransportSettings().empty()) {
- return nullptr;
- }
-
- // When bundle is enabled, two JsepTransports are created, and then
- // the second transport is destroyed (right away).
- // For media transport, we don't want to create the second
- // media transport in the first place.
- RTC_LOG(LS_INFO) << "Returning new, client media transport.";
-
- RTC_DCHECK(!local)
- << "If media transport is used, you must call "
- "GenerateOrGetLastMediaTransportOffer before SetLocalDescription. You "
- "also "
- "must use kRtcpMuxPolicyRequire and kBundlePolicyMaxBundle with media "
- "transport.";
- MediaTransportSettings settings;
- settings.is_caller = local;
- if (config_.use_media_transport_for_media) {
- settings.event_log = config_.event_log;
- }
-
- // Assume there is only one media transport (or if more, use the first one).
- if (!local && !description.MediaTransportSettings().empty() &&
- config_.media_transport_factory->GetTransportName() ==
- description.MediaTransportSettings()[0].transport_name) {
- settings.remote_transport_parameters =
- description.MediaTransportSettings()[0].transport_setting;
- }
-
- auto media_transport_result =
- config_.media_transport_factory->CreateMediaTransport(network_thread_,
- settings);
-
- // TODO(sukhanov): Proper error handling.
- RTC_CHECK(media_transport_result.ok());
-
- return media_transport_result.MoveValue();
-}
-
// TODO(sukhanov): Refactor to avoid code duplication for Media and Datagram
// transports setup.
std::unique_ptr<webrtc::DatagramTransportInterface>
@@ -1259,13 +1143,6 @@
CreateIceTransport(content_info.name, /*rtcp=*/false);
RTC_DCHECK(ice);
- std::unique_ptr<MediaTransportInterface> media_transport =
- MaybeCreateMediaTransport(content_info, description, local);
- if (media_transport) {
- media_transport_created_once_ = true;
- media_transport->Connect(ice->internal());
- }
-
std::unique_ptr<DatagramTransportInterface> datagram_transport =
MaybeCreateDatagramTransport(content_info, description, local);
if (datagram_transport) {
@@ -1285,7 +1162,6 @@
if (config_.rtcp_mux_policy !=
PeerConnectionInterface::kRtcpMuxPolicyRequire &&
content_info.type == cricket::MediaProtocolType::kRtp) {
- RTC_DCHECK(media_transport == nullptr);
RTC_DCHECK(datagram_transport == nullptr);
rtcp_ice = CreateIceTransport(content_info.name, /*rtcp=*/true);
rtcp_dtls_transport =
@@ -1335,8 +1211,6 @@
DataChannelTransportInterface* data_channel_transport = nullptr;
if (config_.use_datagram_transport_for_data_channels) {
data_channel_transport = datagram_transport.get();
- } else if (config_.use_media_transport_for_data_channels) {
- data_channel_transport = media_transport.get();
}
std::unique_ptr<cricket::JsepTransport> jsep_transport =
@@ -1345,16 +1219,14 @@
std::move(unencrypted_rtp_transport), std::move(sdes_transport),
std::move(dtls_srtp_transport), std::move(datagram_rtp_transport),
std::move(rtp_dtls_transport), std::move(rtcp_dtls_transport),
- std::move(sctp_transport), std::move(media_transport),
- std::move(datagram_transport), data_channel_transport);
+ std::move(sctp_transport), std::move(datagram_transport),
+ data_channel_transport);
jsep_transport->rtp_transport()->SignalRtcpPacketReceived.connect(
this, &JsepTransportController::OnRtcpPacketReceived_n);
jsep_transport->SignalRtcpMuxActive.connect(
this, &JsepTransportController::UpdateAggregateStates_n);
- jsep_transport->SignalMediaTransportStateChanged.connect(
- this, &JsepTransportController::OnMediaTransportStateChanged_n);
jsep_transport->SignalDataChannelTransportNegotiated.connect(
this, &JsepTransportController::OnDataChannelTransportNegotiated_n);
SetTransportForMid(content_info.name, jsep_transport.get());
@@ -1387,8 +1259,8 @@
RTC_DCHECK(network_thread_->IsCurrent());
for (const auto& jsep_transport : jsep_transports_by_name_) {
- config_.transport_observer->OnTransportChanged(
- jsep_transport.first, nullptr, nullptr, nullptr, nullptr);
+ config_.transport_observer->OnTransportChanged(jsep_transport.first,
+ nullptr, nullptr, nullptr);
}
jsep_transports_by_name_.clear();
@@ -1559,10 +1431,6 @@
UpdateAggregateStates_n();
}
-void JsepTransportController::OnMediaTransportStateChanged_n() {
- UpdateAggregateStates_n();
-}
-
void JsepTransportController::OnDataChannelTransportNegotiated_n(
cricket::JsepTransport* transport,
DataChannelTransportInterface* data_channel_transport) {
@@ -1570,7 +1438,7 @@
if (it.second == transport) {
config_.transport_observer->OnTransportChanged(
it.first, transport->rtp_transport(), transport->RtpDtlsTransport(),
- transport->media_transport(), data_channel_transport);
+ data_channel_transport);
}
}
}
@@ -1587,10 +1455,6 @@
PeerConnectionInterface::PeerConnectionState::kNew;
cricket::IceGatheringState new_gathering_state = cricket::kIceGatheringNew;
bool any_failed = false;
-
- // TODO(http://bugs.webrtc.org/9719) If(when) media_transport disables
- // dtls_transports entirely, the below line will have to be changed to account
- // for the fact that dtls transports might be absent.
bool all_connected = !dtls_transports.empty();
bool all_completed = !dtls_transports.empty();
bool any_gathering = false;
@@ -1620,35 +1484,6 @@
ice_state_counts[dtls->ice_transport()->GetIceTransportState()]++;
}
- // Don't indicate that the call failed or isn't connected due to media
- // transport state unless the media transport is used for media. If it's only
- // used for data channels, it will signal those separately.
- if (config_.use_media_transport_for_media || config_.use_datagram_transport) {
- for (auto it = jsep_transports_by_name_.begin();
- it != jsep_transports_by_name_.end(); ++it) {
- auto jsep_transport = it->second.get();
- if (!jsep_transport->media_transport()) {
- continue;
- }
-
- // There is no 'kIceConnectionDisconnected', so we only need to handle
- // connected and completed.
- // We treat kClosed as failed, because if it happens before shutting down
- // media transports it means that there was a failure.
- // MediaTransportInterface allows to flip back and forth between kWritable
- // and kPending, but there does not exist an implementation that does
- // that, and the contract of jsep transport controller doesn't quite
- // expect that. When this happens, we would go from connected to
- // connecting state, but this may change in future.
- any_failed |= jsep_transport->media_transport_state() ==
- webrtc::MediaTransportState::kClosed;
- all_completed &= jsep_transport->media_transport_state() ==
- webrtc::MediaTransportState::kWritable;
- all_connected &= jsep_transport->media_transport_state() ==
- webrtc::MediaTransportState::kWritable;
- }
- }
-
if (any_failed) {
new_connection_state = cricket::kIceConnectionFailed;
} else if (all_completed) {
@@ -1809,67 +1644,6 @@
SignalDtlsHandshakeError(error);
}
-absl::optional<cricket::SessionDescription::MediaTransportSetting>
-JsepTransportController::GenerateOrGetLastMediaTransportOffer() {
- if (media_transport_created_once_) {
- RTC_LOG(LS_INFO) << "Not regenerating media transport for the new offer in "
- "existing session.";
- return media_transport_offer_settings_;
- }
-
- RTC_LOG(LS_INFO) << "Generating media transport offer!";
-
- absl::optional<std::string> transport_parameters;
-
- // Check that media transport is supposed to be used.
- // Note that ICE is not available when media transport is created. It will
- // only be available in 'Connect'. This may be a potential server config, if
- // we decide to use this peer connection as a caller, not as a callee.
- // TODO(sukhanov): Avoid code duplication with CreateMedia/MediaTransport.
- if (config_.use_media_transport_for_media ||
- config_.use_media_transport_for_data_channels) {
- RTC_DCHECK(config_.media_transport_factory != nullptr);
- RTC_DCHECK(!config_.use_datagram_transport);
- webrtc::MediaTransportSettings settings;
- settings.is_caller = true;
- settings.pre_shared_key = rtc::CreateRandomString(32);
- if (config_.use_media_transport_for_media) {
- settings.event_log = config_.event_log;
- }
- auto media_transport_or_error =
- config_.media_transport_factory->CreateMediaTransport(network_thread_,
- settings);
-
- if (media_transport_or_error.ok()) {
- offer_media_transport_ = std::move(media_transport_or_error.value());
- transport_parameters =
- offer_media_transport_->GetTransportParametersOffer();
- } else {
- RTC_LOG(LS_INFO) << "Unable to create media transport, error="
- << media_transport_or_error.error().message();
- }
- }
-
- if (!offer_media_transport_) {
- RTC_LOG(LS_INFO) << "Media and data transports do not exist";
- return absl::nullopt;
- }
-
- if (!transport_parameters) {
- RTC_LOG(LS_INFO) << "Media transport didn't generate the offer";
- // Media transport didn't generate the offer, and is not supposed to be
- // used. Destroy the temporary media transport.
- offer_media_transport_ = nullptr;
- return absl::nullopt;
- }
-
- cricket::SessionDescription::MediaTransportSetting setting;
- setting.transport_name = config_.media_transport_factory->GetTransportName();
- setting.transport_setting = *transport_parameters;
- media_transport_offer_settings_ = setting;
- return setting;
-}
-
absl::optional<cricket::OpaqueTransportParameters>
JsepTransportController::GetTransportParameters(const std::string& mid) {
if (!(config_.use_datagram_transport ||
diff --git a/pc/jsep_transport_controller.h b/pc/jsep_transport_controller.h
index b7121e7..9c3f691 100644
--- a/pc/jsep_transport_controller.h
+++ b/pc/jsep_transport_controller.h
@@ -23,7 +23,6 @@
#include "api/peer_connection_interface.h"
#include "api/rtc_event_log/rtc_event_log.h"
#include "api/transport/media/media_transport_config.h"
-#include "api/transport/media/media_transport_interface.h"
#include "media/sctp/sctp_transport_internal.h"
#include "p2p/base/dtls_transport.h"
#include "p2p/base/dtls_transport_factory.h"
@@ -72,7 +71,6 @@
const std::string& mid,
RtpTransportInternal* rtp_transport,
rtc::scoped_refptr<DtlsTransport> dtls_transport,
- MediaTransportInterface* media_transport,
DataChannelTransportInterface* data_channel_transport) = 0;
};
@@ -106,12 +104,6 @@
// Factory for SCTP transports.
cricket::SctpTransportInternalFactory* sctp_factory = nullptr;
- // Whether media transport is used for media.
- bool use_media_transport_for_media = false;
-
- // Whether media transport is used for data channels.
- bool use_media_transport_for_data_channels = false;
-
// Whether an RtpMediaTransport should be created as default, when no
// MediaTransportFactory is provided.
bool use_rtp_media_transport = false;
@@ -128,13 +120,13 @@
bool use_datagram_transport_for_data_channels_receive_only = false;
// Optional media transport factory (experimental). If provided it will be
- // used to create media_transport (as long as either
- // |use_media_transport_for_media| or
- // |use_media_transport_for_data_channels| is set to true). However, whether
- // it will be used to send / receive audio and video frames instead of RTP
- // is determined by |use_media_transport_for_media|. Note that currently
- // media_transport co-exists with RTP / RTCP transports and may use the same
- // underlying ICE transport.
+ // used to create datagram_transport (as long as either
+ // |use_datagram_transport| or
+ // |use_datagram_transport_for_data_channels| is set to true). However,
+ // whether it will be used to send / receive audio and video frames instead
+ // of RTP is determined by |use_datagram_transport|. Note that currently
+ // datagram_transport co-exists with RTP / RTCP transports and may use the
+ // same underlying ICE transport.
MediaTransportFactory* media_transport_factory = nullptr;
};
@@ -174,13 +166,6 @@
DataChannelTransportInterface* GetDataChannelTransport(
const std::string& mid) const;
- // TODO(sukhanov): Deprecate, return only config.
- MediaTransportInterface* GetMediaTransport(const std::string& mid) const {
- return GetMediaTransportConfig(mid).media_transport;
- }
-
- MediaTransportState GetMediaTransportState(const std::string& mid) const;
-
/*********************
* ICE-related methods
********************/
@@ -235,8 +220,6 @@
// you did not call 'GetMediaTransport' or 'MaybeCreateJsepTransport'. Once
// Jsep transport is created, you can't change this setting.
void SetMediaTransportSettings(
- bool use_media_transport_for_media,
- bool use_media_transport_for_data_channels,
bool use_datagram_transport,
bool use_datagram_transport_for_data_channels,
bool use_datagram_transport_for_data_channels_receive_only);
@@ -245,13 +228,6 @@
// and deletes unused transports, but doesn't consider anything more complex.
void RollbackTransportForMids(const std::vector<std::string>& mids);
- // If media transport is present enabled and supported,
- // when this method is called, it creates a media transport and generates its
- // offer. The new offer is then returned, and the created media transport will
- // subsequently be used.
- absl::optional<cricket::SessionDescription::MediaTransportSetting>
- GenerateOrGetLastMediaTransportOffer();
-
// Gets the transport parameters for the transport identified by |mid|.
// If |mid| is bundled, returns the parameters for the bundled transport.
// If the transport for |mid| has not been created yet, it may be allocated in
@@ -371,16 +347,6 @@
const cricket::ContentInfo& content_info,
const cricket::SessionDescription& description);
- // Creates media transport if config wants to use it, and a=x-mt line is
- // present for the current media transport. Returned MediaTransportInterface
- // is not connected, and must be connected to ICE. You must call
- // |GenerateOrGetLastMediaTransportOffer| on the caller before calling
- // MaybeCreateMediaTransport.
- std::unique_ptr<webrtc::MediaTransportInterface> MaybeCreateMediaTransport(
- const cricket::ContentInfo& content_info,
- const cricket::SessionDescription& description,
- bool local);
-
// Creates datagram transport if config wants to use it, and a=x-mt line is
// present for the current media transport. Returned
// DatagramTransportInterface is not connected, and must be connected to ICE.
@@ -441,7 +407,6 @@
const cricket::Candidates& candidates);
void OnTransportRoleConflict_n(cricket::IceTransportInternal* transport);
void OnTransportStateChanged_n(cricket::IceTransportInternal* transport);
- void OnMediaTransportStateChanged_n();
void OnTransportCandidatePairChanged_n(
const cricket::CandidatePairChangeEvent& event);
void OnDataChannelTransportNegotiated_n(
@@ -480,21 +445,6 @@
Config config_;
- // Early on in the call we don't know if media transport is going to be used,
- // but we need to get the server-supported parameters to add to an SDP.
- // This server media transport will be promoted to the used media transport
- // after the local description is set, and the ownership will be transferred
- // to the actual JsepTransport.
- // This "offer" media transport is not created if it's done on the party that
- // provides answer. This offer media transport is only created once at the
- // beginning of the connection, and never again.
- std::unique_ptr<MediaTransportInterface> offer_media_transport_ = nullptr;
-
- // Contains the offer of the |offer_media_transport_|, in case if it needs to
- // be repeated.
- absl::optional<cricket::SessionDescription::MediaTransportSetting>
- media_transport_offer_settings_;
-
// Early on in the call we don't know if datagram transport is going to be
// used, but we need to get the server-supported parameters to add to an SDP.
// This server datagram transport will be promoted to the used datagram
@@ -506,24 +456,6 @@
std::unique_ptr<DatagramTransportInterface> offer_datagram_transport_ =
nullptr;
- // Contains the offer of the |offer_datagram_transport_|, in case if it needs
- // to be repeated.
- absl::optional<cricket::SessionDescription::MediaTransportSetting>
- datagram_transport_offer_settings_;
-
- // When the new offer is regenerated (due to upgrade), we don't want to
- // re-create media transport. New streams might be created; but media
- // transport stays the same. This flag prevents re-creation of the transport
- // on the offerer.
- // The first media transport is created in jsep transport controller as the
- // |offer_media_transport_|, and then the ownership is moved to the
- // appropriate JsepTransport, at which point |offer_media_transport_| is
- // zeroed out. On the callee (answerer), the first media transport is not even
- // assigned to |offer_media_transport_|. Both offerer and answerer can
- // recreate the Offer (e.g. after adding streams in Plan B), and so we want to
- // prevent recreation of the media transport when that happens.
- bool media_transport_created_once_ = false;
-
const cricket::SessionDescription* local_desc_ = nullptr;
const cricket::SessionDescription* remote_desc_ = nullptr;
absl::optional<bool> initial_offerer_;
diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc
index b96a999..196be13 100644
--- a/pc/jsep_transport_controller_unittest.cc
+++ b/pc/jsep_transport_controller_unittest.cc
@@ -19,7 +19,6 @@
#include "p2p/base/dtls_transport_factory.h"
#include "p2p/base/fake_dtls_transport.h"
#include "p2p/base/fake_ice_transport.h"
-#include "p2p/base/no_op_dtls_transport.h"
#include "p2p/base/transport_info.h"
#include "rtc_base/gunit.h"
#include "rtc_base/thread.h"
@@ -331,7 +330,6 @@
const std::string& mid,
RtpTransportInternal* rtp_transport,
rtc::scoped_refptr<DtlsTransport> dtls_transport,
- MediaTransportInterface* media_transport,
DataChannelTransportInterface* data_channel_transport) override {
changed_rtp_transport_by_mid_[mid] = rtp_transport;
if (dtls_transport) {
@@ -339,7 +337,6 @@
} else {
changed_dtls_transport_by_mid_[mid] = nullptr;
}
- changed_media_transport_by_mid_[mid] = media_transport;
return true;
}
@@ -373,8 +370,6 @@
std::map<std::string, RtpTransportInternal*> changed_rtp_transport_by_mid_;
std::map<std::string, cricket::DtlsTransportInternal*>
changed_dtls_transport_by_mid_;
- std::map<std::string, MediaTransportInterface*>
- changed_media_transport_by_mid_;
// Transport controller needs to be destroyed first, because it may issue
// callbacks that modify the changed_*_by_mid in the destructor.
@@ -443,46 +438,6 @@
EXPECT_EQ(nullptr, transport_controller_->GetRtcpDtlsTransport(kAudioMid1));
EXPECT_NE(nullptr, transport_controller_->GetDtlsTransport(kVideoMid1));
EXPECT_EQ(nullptr, transport_controller_->GetRtcpDtlsTransport(kVideoMid1));
- EXPECT_EQ(nullptr, transport_controller_->GetMediaTransport(kAudioMid1));
-}
-
-TEST_F(JsepTransportControllerTest,
- DtlsIsStillCreatedIfMediaTransportIsOnlyUsedForDataChannels) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
-
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
-
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetDataChannelTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- // After SetLocalDescription, media transport should be created as caller.
- EXPECT_TRUE(media_transport->is_caller());
- EXPECT_TRUE(media_transport->pre_shared_key().has_value());
-
- // Return nullptr for non-existing mids.
- EXPECT_EQ(nullptr,
- transport_controller_->GetDataChannelTransport(kVideoMid2));
-
- EXPECT_EQ(cricket::ICE_CANDIDATE_COMPONENT_RTP,
- transport_controller_->GetDtlsTransport(kAudioMid1)->component())
- << "Media transport for media was not enabled, and so DTLS transport "
- "should be created.";
}
TEST_F(JsepTransportControllerTest,
@@ -575,339 +530,6 @@
.ok());
}
-TEST_F(JsepTransportControllerTest, GetMediaTransportInCaller) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
-
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
-
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- // After SetLocalDescription, media transport should be created as caller.
- EXPECT_TRUE(media_transport->is_caller());
- // We set the pre-shared key on the caller.
- EXPECT_TRUE(media_transport->pre_shared_key().has_value());
- EXPECT_TRUE(media_transport->is_connected());
-
- // Return nullptr for non-existing mids.
- EXPECT_EQ(nullptr, transport_controller_->GetMediaTransport(kVideoMid2));
-
- EXPECT_EQ(cricket::kNoOpDtlsTransportComponent,
- transport_controller_->GetDtlsTransport(kAudioMid1)->component())
- << "Because media transport is used, expected no-op DTLS transport.";
-}
-
-TEST_F(JsepTransportControllerTest,
- GetMediaTransportOfferInTheConfigOnSubsequentCalls) {
- FakeMediaTransportFactory fake_media_transport_factory;
- WrapperMediaTransportFactory wrapping_factory(&fake_media_transport_factory);
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &wrapping_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
-
- absl::optional<cricket::SessionDescription::MediaTransportSetting> settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
- ASSERT_NE(absl::nullopt, settings);
-
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- absl::optional<cricket::SessionDescription::MediaTransportSetting>
- new_settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
- ASSERT_NE(absl::nullopt, new_settings);
- EXPECT_EQ(settings->transport_name, new_settings->transport_name);
- EXPECT_EQ(settings->transport_setting, new_settings->transport_setting);
- EXPECT_EQ(1, wrapping_factory.created_transport_count());
-}
-
-TEST_F(JsepTransportControllerTest, GetMediaTransportInCallee) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- description->AddMediaTransportSetting("fake", "fake-remote-settings");
- EXPECT_TRUE(transport_controller_
- ->SetRemoteDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- // After SetRemoteDescription, media transport should be created as callee.
- EXPECT_FALSE(media_transport->is_caller());
- // We do not set pre-shared key on the callee, it comes in media transport
- // settings.
- EXPECT_EQ(absl::nullopt, media_transport->settings().pre_shared_key);
- EXPECT_TRUE(media_transport->is_connected());
-
- // Return nullptr for non-existing mids.
- EXPECT_EQ(nullptr, transport_controller_->GetMediaTransport(kVideoMid2));
-
- EXPECT_EQ(cricket::kNoOpDtlsTransportComponent,
- transport_controller_->GetDtlsTransport(kAudioMid1)->component())
- << "Because media transport is used, expected no-op DTLS transport.";
-}
-
-TEST_F(JsepTransportControllerTest, GetMediaTransportInCalleePassesSdp) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- description->AddMediaTransportSetting("fake", "this-is-a-test-setting");
- EXPECT_TRUE(transport_controller_
- ->SetRemoteDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- EXPECT_EQ("this-is-a-test-setting",
- media_transport->settings().remote_transport_parameters);
-}
-
-// Caller generates the offer if media transport returns empty offer (no
-// parameters).
-TEST_F(JsepTransportControllerTest, MediaTransportGeneratesSessionDescription) {
- FakeMediaTransportFactory fake_media_transport_factory(
- /*transport_offer=*/"");
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- absl::optional<cricket::SessionDescription::MediaTransportSetting> settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
-
- ASSERT_TRUE(settings.has_value());
- EXPECT_EQ("fake", settings->transport_name);
- // Fake media transport returns empty settings (but not nullopt settings!)
- EXPECT_EQ("", settings->transport_setting);
-}
-
-// Caller generates the offer if media transport returns offer with parameters.
-TEST_F(JsepTransportControllerTest,
- MediaTransportGeneratesSessionDescriptionWithOfferParams) {
- FakeMediaTransportFactory fake_media_transport_factory(
- /*transport_offer=*/"offer-params");
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- absl::optional<cricket::SessionDescription::MediaTransportSetting> settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
-
- ASSERT_TRUE(settings.has_value());
- EXPECT_EQ("fake", settings->transport_name);
- EXPECT_EQ("offer-params", settings->transport_setting);
-}
-
-// Caller skips the offer if media transport requests it.
-TEST_F(JsepTransportControllerTest,
- MediaTransportGeneratesSkipsSessionDescription) {
- FakeMediaTransportFactory fake_media_transport_factory(
- /*transport_offer=*/absl::nullopt);
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- absl::optional<cricket::SessionDescription::MediaTransportSetting> settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
-
- // Fake media transport returns nullopt settings
- ASSERT_EQ(absl::nullopt, settings);
-}
-
-// Caller ignores its own outgoing parameters.
-TEST_F(JsepTransportControllerTest,
- GetMediaTransportInCallerIgnoresXmtSection) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- // Remote parameters are nullopt, because we are the offerer (we don't)
- // have the remote transport parameters, only ours.
- EXPECT_EQ(absl::nullopt,
- media_transport->settings().remote_transport_parameters);
-}
-
-TEST_F(JsepTransportControllerTest,
- GetMediaTransportInCalleeIgnoresDifferentTransport) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- description->AddMediaTransportSetting("not-a-fake-transport",
- "this-is-a-test-setting");
- EXPECT_TRUE(transport_controller_
- ->SetRemoteDescription(SdpType::kOffer, description.get())
- .ok());
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- EXPECT_EQ(absl::nullopt,
- media_transport->settings().remote_transport_parameters);
-}
-
-TEST_F(JsepTransportControllerTest, GetMediaTransportIsNotSetIfNoSdes) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- EXPECT_TRUE(transport_controller_
- ->SetRemoteDescription(SdpType::kOffer, description.get())
- .ok());
-
- EXPECT_EQ(nullptr, transport_controller_->GetMediaTransport(kAudioMid1));
-
- // Even if we set local description with crypto now (after the remote offer
- // was set), media transport won't be provided.
- auto description2 = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description2.get());
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kAnswer, description2.get())
- .ok());
-
- EXPECT_EQ(nullptr, transport_controller_->GetMediaTransport(kAudioMid1));
- EXPECT_EQ(cricket::ICE_CANDIDATE_COMPONENT_RTP,
- transport_controller_->GetDtlsTransport(kAudioMid1)->component())
- << "Because media transport is NOT used (fallback to RTP), expected "
- "actual DTLS transport for RTP";
-}
-
-TEST_F(JsepTransportControllerTest,
- AfterSettingAnswerTheSameMediaTransportIsReturnedCallee) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
-
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.media_transport_factory = &fake_media_transport_factory;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- description->AddMediaTransportSetting("fake", "fake-settings");
- EXPECT_TRUE(transport_controller_
- ->SetRemoteDescription(SdpType::kOffer, description.get())
- .ok());
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
- EXPECT_NE(nullptr, media_transport);
- EXPECT_FALSE(media_transport->pre_shared_key().has_value())
- << "On the callee, preshared key is passed through the media-transport "
- "settings (x-mt)";
-
- // Even if we set local description with crypto now (after the remote offer
- // was set), media transport won't be provided.
- auto description2 = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description2.get());
-
- RTCError result = transport_controller_->SetLocalDescription(
- SdpType::kAnswer, description2.get());
- EXPECT_TRUE(result.ok()) << result.message();
-
- // Media transport did not change.
- EXPECT_EQ(media_transport,
- transport_controller_->GetMediaTransport(kAudioMid1));
-}
-
TEST_F(JsepTransportControllerTest, SetIceConfig) {
CreateJsepTransportController(JsepTransportController::Config());
auto description = CreateSessionDescriptionWithoutBundle();
@@ -1190,164 +812,6 @@
EXPECT_EQ(3, combined_connection_state_signal_count_);
}
-TEST_F(JsepTransportControllerTest,
- SignalConnectionStateConnectedWithMediaTransportAndNoDtlsCaller) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
- config.media_transport_factory = &fake_media_transport_factory;
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.use_media_transport_for_data_channels = true;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
-
- // Media Transport is only used with bundle.
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- auto fake_audio_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kAudioMid1)->ice_transport());
- auto fake_video_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kVideoMid1)->ice_transport());
- EXPECT_EQ(fake_audio_ice, fake_video_ice);
- fake_audio_ice->SetConnectionCount(2);
- fake_audio_ice->SetConnectionCount(1);
- fake_video_ice->SetConnectionCount(2);
- fake_video_ice->SetConnectionCount(1);
- fake_audio_ice->SetWritable(true);
- fake_video_ice->SetWritable(true);
-
- // Still not connected, because we are waiting for media transport.
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnecting, connection_state_,
- kTimeout);
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- media_transport->SetState(webrtc::MediaTransportState::kWritable);
- // Only one media transport.
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnected, connection_state_, kTimeout);
-}
-
-TEST_F(JsepTransportControllerTest,
- SignalConnectionStateConnectedWithMediaTransportCaller) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
- config.media_transport_factory = &fake_media_transport_factory;
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
-
- // Media Transport is only used with bundle.
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- auto fake_audio_dtls = static_cast<FakeDtlsTransport*>(
- transport_controller_->GetDtlsTransport(kAudioMid1));
- auto fake_video_dtls = static_cast<FakeDtlsTransport*>(
- transport_controller_->GetDtlsTransport(kVideoMid1));
-
- auto fake_audio_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kAudioMid1)->ice_transport());
- auto fake_video_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kVideoMid1)->ice_transport());
- fake_audio_ice->SetConnectionCount(2);
- fake_audio_ice->SetConnectionCount(1);
- fake_video_ice->SetConnectionCount(2);
- fake_video_ice->SetConnectionCount(1);
- fake_audio_ice->SetWritable(true);
- fake_video_ice->SetWritable(true);
- fake_audio_dtls->SetWritable(true);
- fake_video_dtls->SetWritable(true);
-
- // Still not connected, because we are waiting for media transport.
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnecting, connection_state_,
- kTimeout);
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
-
- ASSERT_NE(nullptr, media_transport);
-
- media_transport->SetState(webrtc::MediaTransportState::kWritable);
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnecting, connection_state_,
- kTimeout);
-
- // Still waiting for the second media transport.
- media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kVideoMid1));
- media_transport->SetState(webrtc::MediaTransportState::kWritable);
-
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnected, connection_state_, kTimeout);
-}
-
-TEST_F(JsepTransportControllerTest,
- SignalConnectionStateFailedWhenMediaTransportClosedCaller) {
- FakeMediaTransportFactory fake_media_transport_factory;
- JsepTransportController::Config config;
- config.media_transport_factory = &fake_media_transport_factory;
- config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- config.use_media_transport_for_media = true;
- CreateJsepTransportController(config);
- auto description = CreateSessionDescriptionWithBundleGroup();
- AddCryptoSettings(description.get());
- EXPECT_NE(absl::nullopt,
- transport_controller_->GenerateOrGetLastMediaTransportOffer());
- EXPECT_TRUE(transport_controller_
- ->SetLocalDescription(SdpType::kOffer, description.get())
- .ok());
-
- auto fake_audio_dtls = static_cast<FakeDtlsTransport*>(
- transport_controller_->GetDtlsTransport(kAudioMid1));
- auto fake_video_dtls = static_cast<FakeDtlsTransport*>(
- transport_controller_->GetDtlsTransport(kVideoMid1));
-
- auto fake_audio_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kAudioMid1)->ice_transport());
- auto fake_video_ice = static_cast<cricket::FakeIceTransport*>(
- transport_controller_->GetDtlsTransport(kVideoMid1)->ice_transport());
- fake_audio_ice->SetWritable(true);
- fake_video_ice->SetWritable(true);
- // Decreasing connection count from 2 to 1 triggers connection state event.
- fake_audio_ice->SetConnectionCount(2);
- fake_audio_ice->SetConnectionCount(1);
- fake_video_ice->SetConnectionCount(2);
- fake_video_ice->SetConnectionCount(1);
-
- fake_audio_dtls->SetWritable(true);
- fake_video_dtls->SetWritable(true);
-
- FakeMediaTransport* media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kAudioMid1));
- ASSERT_NE(nullptr, media_transport);
- media_transport->SetState(webrtc::MediaTransportState::kWritable);
-
- media_transport = static_cast<FakeMediaTransport*>(
- transport_controller_->GetMediaTransport(kVideoMid1));
- ASSERT_NE(nullptr, media_transport);
-
- media_transport->SetState(webrtc::MediaTransportState::kWritable);
-
- EXPECT_EQ_WAIT(cricket::kIceConnectionConnected, connection_state_, kTimeout);
-
- media_transport->SetState(webrtc::MediaTransportState::kClosed);
- EXPECT_EQ_WAIT(cricket::kIceConnectionFailed, connection_state_, kTimeout);
-}
-
TEST_F(JsepTransportControllerTest, SignalConnectionStateComplete) {
CreateJsepTransportController(JsepTransportController::Config());
auto description = CreateSessionDescriptionWithoutBundle();
diff --git a/pc/jsep_transport_unittest.cc b/pc/jsep_transport_unittest.cc
index 87d6e87..c4193e5 100644
--- a/pc/jsep_transport_unittest.cc
+++ b/pc/jsep_transport_unittest.cc
@@ -114,11 +114,6 @@
RTC_NOTREACHED();
}
- // TODO(sukhanov): Currently there is no media_transport specific
- // logic in jseptransport, so jseptransport unittests are created with
- // media_transport = nullptr. In the future we will probably add
- // more logic that require unit tests. Note that creation of media_transport
- // is covered in jseptransportcontroller_unittest.
auto jsep_transport = std::make_unique<JsepTransport>(
kTransportName, /*local_certificate=*/nullptr, std::move(ice),
std::move(rtcp_ice), std::move(unencrypted_rtp_transport),
@@ -126,7 +121,6 @@
/*datagram_rtp_transport=*/nullptr, std::move(rtp_dtls_transport),
std::move(rtcp_dtls_transport),
/*sctp_transport=*/nullptr,
- /*media_transport=*/nullptr,
/*datagram_transport=*/nullptr,
/*data_channel_transport=*/nullptr);
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 873f27d..59f140f 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -1523,12 +1523,6 @@
offer->set_extmap_allow_mixed(session_options.offer_extmap_allow_mixed);
- if (session_options.media_transport_settings.has_value()) {
- offer->AddMediaTransportSetting(
- session_options.media_transport_settings->transport_name,
- session_options.media_transport_settings->transport_setting);
- }
-
return offer;
}
diff --git a/pc/media_session.h b/pc/media_session.h
index f91729a..235945c 100644
--- a/pc/media_session.h
+++ b/pc/media_session.h
@@ -115,11 +115,6 @@
std::vector<MediaDescriptionOptions> media_description_options;
std::vector<IceParameters> pooled_ice_credentials;
- // An optional media transport settings.
- // In the future we may consider using a vector here, to indicate multiple
- // supported transports.
- absl::optional<cricket::SessionDescription::MediaTransportSetting>
- media_transport_settings;
// Use the draft-ietf-mmusic-sctp-sdp-03 obsolete syntax for SCTP
// datachannels.
// Default is true for backwards compatibility with clients that use
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index f5f51c4..c24bd2e 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -1135,7 +1135,6 @@
const PeerConnectionInterface::RTCConfiguration& configuration,
PeerConnectionDependencies dependencies) {
RTC_DCHECK_RUN_ON(signaling_thread());
- RTC_DCHECK_RUNS_SERIALIZED(&use_media_transport_race_checker_);
TRACE_EVENT0("webrtc", "PeerConnection::Initialize");
RTCError config_error = ValidateConfiguration(configuration);
@@ -1260,37 +1259,15 @@
use_datagram_transport_for_data_channels_receive_only_ =
configuration.use_datagram_transport_for_data_channels_receive_only
.value_or(datagram_transport_data_channel_config_.receive_only);
- if (use_datagram_transport_ || use_datagram_transport_for_data_channels_ ||
- configuration.use_media_transport ||
- configuration.use_media_transport_for_data_channels) {
+ if (use_datagram_transport_ || use_datagram_transport_for_data_channels_) {
if (!factory_->media_transport_factory()) {
RTC_DCHECK(false)
- << "PeerConnecton is initialized with use_media_transport = true or "
- << "use_media_transport_for_data_channels = true "
+ << "PeerConnecton is initialized with use_datagram_transport = true "
+ "or use_datagram_transport_for_data_channels = true "
<< "but media transport factory is not set in PeerConnectionFactory";
return false;
}
- if (configuration.use_media_transport ||
- configuration.use_media_transport_for_data_channels) {
- // TODO(bugs.webrtc.org/9719): This check will eventually go away, when
- // RTP media transport is introduced. But until then, we require SDES to
- // be enabled.
- if (configuration.enable_dtls_srtp.has_value() &&
- configuration.enable_dtls_srtp.value()) {
- RTC_LOG(LS_WARNING)
- << "When media transport is used, SDES must be enabled. Set "
- "configuration.enable_dtls_srtp to false. use_media_transport="
- << configuration.use_media_transport
- << ", use_media_transport_for_data_channels="
- << configuration.use_media_transport_for_data_channels;
- return false;
- }
- }
-
- config.use_media_transport_for_media = configuration.use_media_transport;
- config.use_media_transport_for_data_channels =
- configuration.use_media_transport_for_data_channels;
config.use_datagram_transport = use_datagram_transport_;
config.use_datagram_transport_for_data_channels =
use_datagram_transport_for_data_channels_;
@@ -1336,14 +1313,6 @@
data_channel_type_ = cricket::DCT_DATA_CHANNEL_TRANSPORT_SCTP;
config.sctp_factory = sctp_factory_.get();
}
- } else if (configuration.use_media_transport_for_data_channels) {
- if (configuration.enable_rtp_data_channel) {
- RTC_LOG(LS_ERROR) << "enable_rtp_data_channel and "
- "use_media_transport_for_data_channels are "
- "incompatible and cannot both be set to true";
- return false;
- }
- data_channel_type_ = cricket::DCT_MEDIA_TRANSPORT;
} else if (configuration.enable_rtp_data_channel) {
// Enable creation of RTP data channels if the kEnableRtpDataChannels is
// set. It takes precendence over the disable_sctp_data_channels
@@ -1385,7 +1354,6 @@
stats_collector_ = RTCStatsCollector::Create(this);
configuration_ = configuration;
- use_media_transport_ = configuration.use_media_transport;
transport_controller_->SetIceConfig(ParseIceConfig(configuration));
@@ -3928,7 +3896,6 @@
RTCError PeerConnection::SetConfiguration(
const RTCConfiguration& configuration) {
RTC_DCHECK_RUN_ON(signaling_thread());
- RTC_DCHECK_RUNS_SERIALIZED(&use_media_transport_race_checker_);
TRACE_EVENT0("webrtc", "PeerConnection::SetConfiguration");
if (IsClosed()) {
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_STATE,
@@ -3946,36 +3913,6 @@
}
if (local_description() &&
- configuration.use_media_transport != configuration_.use_media_transport) {
- LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
- "Can't change media_transport after calling "
- "SetLocalDescription.");
- }
-
- if (remote_description() &&
- configuration.use_media_transport != configuration_.use_media_transport) {
- LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
- "Can't change media_transport after calling "
- "SetRemoteDescription.");
- }
-
- if (local_description() &&
- configuration.use_media_transport_for_data_channels !=
- configuration_.use_media_transport_for_data_channels) {
- LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
- "Can't change media_transport_for_data_channels "
- "after calling SetLocalDescription.");
- }
-
- if (remote_description() &&
- configuration.use_media_transport_for_data_channels !=
- configuration_.use_media_transport_for_data_channels) {
- LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
- "Can't change media_transport_for_data_channels "
- "after calling SetRemoteDescription.");
- }
-
- if (local_description() &&
configuration.crypto_options != configuration_.crypto_options) {
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
"Can't change crypto_options after calling "
@@ -4034,9 +3971,7 @@
"after calling SetRemoteDescription.");
}
- if (configuration.use_media_transport_for_data_channels ||
- configuration.use_media_transport ||
- (configuration.use_datagram_transport &&
+ if ((configuration.use_datagram_transport &&
*configuration.use_datagram_transport) ||
(configuration.use_datagram_transport_for_data_channels &&
*configuration.use_datagram_transport_for_data_channels)) {
@@ -4072,9 +4007,6 @@
modified_config.network_preference = configuration.network_preference;
modified_config.active_reset_srtp_params =
configuration.active_reset_srtp_params;
- modified_config.use_media_transport = configuration.use_media_transport;
- modified_config.use_media_transport_for_data_channels =
- configuration.use_media_transport_for_data_channels;
modified_config.use_datagram_transport = configuration.use_datagram_transport;
modified_config.use_datagram_transport_for_data_channels =
configuration.use_datagram_transport_for_data_channels;
@@ -4158,8 +4090,6 @@
modified_config.use_datagram_transport_for_data_channels_receive_only
.value_or(datagram_transport_data_channel_config_.receive_only);
transport_controller_->SetMediaTransportSettings(
- modified_config.use_media_transport,
- modified_config.use_media_transport_for_data_channels,
use_datagram_transport_, use_datagram_transport_for_data_channels_,
use_datagram_transport_for_data_channels_receive_only_);
@@ -4178,7 +4108,6 @@
}
configuration_ = modified_config;
- use_media_transport_ = configuration.use_media_transport;
return RTCError::OK();
}
@@ -4967,12 +4896,6 @@
session_options->offer_extmap_allow_mixed =
configuration_.offer_extmap_allow_mixed;
- if (configuration_.use_media_transport ||
- configuration_.use_media_transport_for_data_channels) {
- session_options->media_transport_settings =
- transport_controller_->GenerateOrGetLastMediaTransportOffer();
- }
-
// If datagram transport is in use, add opaque transport parameters.
if (use_datagram_transport_ || use_datagram_transport_for_data_channels_) {
for (auto& options : session_options->media_description_options) {
@@ -5476,7 +5399,6 @@
}
return rtp_data_channel_->content_name();
case cricket::DCT_SCTP:
- case cricket::DCT_MEDIA_TRANSPORT:
case cricket::DCT_DATA_CHANNEL_TRANSPORT:
case cricket::DCT_DATA_CHANNEL_TRANSPORT_SCTP:
return sctp_mid_;
@@ -7106,7 +7028,6 @@
case cricket::DCT_SCTP:
case cricket::DCT_DATA_CHANNEL_TRANSPORT_SCTP:
case cricket::DCT_DATA_CHANNEL_TRANSPORT:
- case cricket::DCT_MEDIA_TRANSPORT:
if (!network_thread()->Invoke<bool>(
RTC_FROM_HERE,
rtc::Bind(&PeerConnection::SetupDataChannelTransport_n, this,
@@ -7777,20 +7698,14 @@
const std::string& mid,
RtpTransportInternal* rtp_transport,
rtc::scoped_refptr<DtlsTransport> dtls_transport,
- MediaTransportInterface* media_transport,
DataChannelTransportInterface* data_channel_transport) {
RTC_DCHECK_RUN_ON(network_thread());
- RTC_DCHECK_RUNS_SERIALIZED(&use_media_transport_race_checker_);
bool ret = true;
auto base_channel = GetChannel(mid);
if (base_channel) {
ret = base_channel->SetRtpTransport(rtp_transport);
}
- if (use_media_transport_) {
- RTC_LOG(LS_ERROR) << "Media transport isn't supported.";
- }
-
if (data_channel_transport_ && mid == sctp_mid_ &&
data_channel_transport_ != data_channel_transport) {
// Changed which data channel transport is used for |sctp_mid_| (eg. now
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index 3126348..9bc6119 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -20,7 +20,6 @@
#include "api/peer_connection_interface.h"
#include "api/transport/data_channel_transport_interface.h"
-#include "api/transport/media/media_transport_interface.h"
#include "api/turn_customizer.h"
#include "pc/ice_server_parsing.h"
#include "pc/jsep_transport_controller.h"
@@ -1201,7 +1200,6 @@
const std::string& mid,
RtpTransportInternal* rtp_transport,
rtc::scoped_refptr<DtlsTransport> dtls_transport,
- MediaTransportInterface* media_transport,
DataChannelTransportInterface* data_channel_transport) override;
// RtpSenderBase::SetStreamsObserver override.
@@ -1289,14 +1287,6 @@
bool use_datagram_transport_for_data_channels_receive_only_
RTC_GUARDED_BY(signaling_thread()) = false;
- // Cache configuration_.use_media_transport so that we can access it from
- // other threads.
- // TODO(bugs.webrtc.org/9987): Caching just this bool and allowing the data
- // it's derived from to change is not necessarily sound. Stop doing it.
- rtc::RaceChecker use_media_transport_race_checker_;
- bool use_media_transport_ RTC_GUARDED_BY(use_media_transport_race_checker_) =
- configuration_.use_media_transport;
-
// TODO(zstein): |async_resolver_factory_| can currently be nullptr if it
// is not injected. It should be required once chromium supplies it.
std::unique_ptr<AsyncResolverFactory> async_resolver_factory_
diff --git a/pc/peer_connection_data_channel_unittest.cc b/pc/peer_connection_data_channel_unittest.cc
index a902c76..b063c39 100644
--- a/pc/peer_connection_data_channel_unittest.cc
+++ b/pc/peer_connection_data_channel_unittest.cc
@@ -22,8 +22,6 @@
#include "api/peer_connection_proxy.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/test/fake_media_transport.h"
-#include "api/transport/media/media_transport_interface.h"
#include "media/base/codec.h"
#include "media/base/fake_media_engine.h"
#include "media/base/media_constants.h"
@@ -65,8 +63,7 @@
rtc::Thread* worker_thread,
rtc::Thread* signaling_thread,
std::unique_ptr<cricket::MediaEngineInterface> media_engine,
- std::unique_ptr<CallFactoryInterface> call_factory,
- std::unique_ptr<MediaTransportFactory> media_transport_factory) {
+ std::unique_ptr<CallFactoryInterface> call_factory) {
PeerConnectionFactoryDependencies deps;
deps.network_thread = network_thread;
deps.worker_thread = worker_thread;
@@ -74,7 +71,6 @@
deps.task_queue_factory = CreateDefaultTaskQueueFactory();
deps.media_engine = std::move(media_engine);
deps.call_factory = std::move(call_factory);
- deps.media_transport_factory = std::move(media_transport_factory);
return deps;
}
@@ -90,8 +86,7 @@
rtc::Thread::Current(),
rtc::Thread::Current(),
std::make_unique<cricket::FakeMediaEngine>(),
- CreateCallFactory(),
- std::make_unique<FakeMediaTransportFactory>())) {}
+ CreateCallFactory())) {}
std::unique_ptr<cricket::SctpTransportInternalFactory>
CreateSctpTransportInternalFactory() {
@@ -385,50 +380,6 @@
EXPECT_EQ(kNewRecvPort, callee_transport->local_port());
}
-TEST_P(PeerConnectionDataChannelTest,
- NoSctpTransportCreatedIfMediaTransportDataChannelsEnabled) {
- RTCConfiguration config;
- config.use_media_transport_for_data_channels = true;
- config.enable_dtls_srtp = false; // SDES is required to use media transport.
- auto caller = CreatePeerConnectionWithDataChannel(config);
-
- ASSERT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
- EXPECT_FALSE(caller->sctp_transport_factory()->last_fake_sctp_transport());
-}
-
-TEST_P(PeerConnectionDataChannelTest,
- MediaTransportDataChannelCreatedEvenIfSctpAvailable) {
- RTCConfiguration config;
- config.use_media_transport_for_data_channels = true;
- config.enable_dtls_srtp = false; // SDES is required to use media transport.
- PeerConnectionFactoryInterface::Options options;
- options.disable_sctp_data_channels = false;
- auto caller = CreatePeerConnectionWithDataChannel(config, options);
-
- ASSERT_TRUE(caller->SetLocalDescription(caller->CreateOffer()));
- EXPECT_FALSE(caller->sctp_transport_factory()->last_fake_sctp_transport());
-}
-
-TEST_P(PeerConnectionDataChannelTest,
- CannotEnableBothMediaTransportAndRtpDataChannels) {
- RTCConfiguration config;
- config.enable_rtp_data_channel = true;
- config.use_media_transport_for_data_channels = true;
- config.enable_dtls_srtp = false; // SDES is required to use media transport.
- EXPECT_EQ(CreatePeerConnection(config), nullptr);
-}
-
-// This test now DCHECKs, instead of failing to SetLocalDescription.
-TEST_P(PeerConnectionDataChannelTest, MediaTransportWithoutSdesFails) {
- RTCConfiguration config;
- config.use_media_transport_for_data_channels = true;
- config.enable_dtls_srtp = true; // Disables SDES for data sections.
-
- auto caller = CreatePeerConnectionWithDataChannel(config);
-
- EXPECT_EQ(nullptr, caller);
-}
-
TEST_P(PeerConnectionDataChannelTest, ModernSdpSyntaxByDefault) {
PeerConnectionInterface::RTCOfferAnswerOptions options;
auto caller = CreatePeerConnectionWithDataChannel();
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index e59ce9a..dd06b65 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -4278,331 +4278,6 @@
ASSERT_TRUE(ExpectNewFrames(media_expectations));
}
-// This test sets up a call between two parties with a media transport data
-// channel.
-TEST_P(PeerConnectionIntegrationTest, MediaTransportDataChannelEndToEnd) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- rtc_config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- rtc_config.use_media_transport_for_data_channels = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Expect that data channel created on caller side will show up for callee as
- // well.
- caller()->CreateDataChannel();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Caller data channel should already exist (it created one). Callee data
- // channel may not exist yet, since negotiation happens in-band, not in SDP.
- ASSERT_NE(nullptr, caller()->data_channel());
- ASSERT_TRUE_WAIT(callee()->data_channel() != nullptr, kDefaultTimeout);
- EXPECT_TRUE_WAIT(caller()->data_observer()->IsOpen(), kDefaultTimeout);
- EXPECT_TRUE_WAIT(callee()->data_observer()->IsOpen(), kDefaultTimeout);
-
- // Ensure data can be sent in both directions.
- std::string data = "hello world";
- caller()->data_channel()->Send(DataBuffer(data));
- EXPECT_EQ_WAIT(data, callee()->data_observer()->last_message(),
- kDefaultTimeout);
- callee()->data_channel()->Send(DataBuffer(data));
- EXPECT_EQ_WAIT(data, caller()->data_observer()->last_message(),
- kDefaultTimeout);
-}
-
-// Tests that 'zero-rtt' data channel transports (which are ready-to-send as
-// soon as they're created) work correctly.
-TEST_P(PeerConnectionIntegrationTest, MediaTransportDataChannelZeroRtt) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- rtc_config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- rtc_config.use_media_transport_for_data_channels = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Ensure that the callee's media transport is ready-to-send immediately.
- // Note that only the callee can become writable in zero RTTs. The caller
- // must wait for the callee's answer.
- loopback_media_transports()->SetSecondStateAfterConnect(
- webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Expect that data channel created on caller side will show up for callee as
- // well.
- caller()->CreateDataChannel();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- loopback_media_transports()->SetFirstState(
- webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Caller data channel should already exist (it created one). Callee data
- // channel may not exist yet, since negotiation happens in-band, not in SDP.
- ASSERT_NE(nullptr, caller()->data_channel());
- ASSERT_TRUE_WAIT(callee()->data_channel() != nullptr, kDefaultTimeout);
- EXPECT_TRUE_WAIT(caller()->data_observer()->IsOpen(), kDefaultTimeout);
- EXPECT_TRUE_WAIT(callee()->data_observer()->IsOpen(), kDefaultTimeout);
-
- // Ensure data can be sent in both directions.
- std::string data = "hello world";
- caller()->data_channel()->Send(DataBuffer(data));
- EXPECT_EQ_WAIT(data, callee()->data_observer()->last_message(),
- kDefaultTimeout);
- callee()->data_channel()->Send(DataBuffer(data));
- EXPECT_EQ_WAIT(data, caller()->data_observer()->last_message(),
- kDefaultTimeout);
-}
-
-// Ensure that when the callee closes a media transport data channel, the
-// closing procedure results in the data channel being closed for the caller
-// as well.
-TEST_P(PeerConnectionIntegrationTest, MediaTransportDataChannelCalleeCloses) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.use_media_transport_for_data_channels = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Create a data channel on the caller and signal it to the callee.
- caller()->CreateDataChannel();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Data channels exist and open on both ends of the connection.
- ASSERT_NE(nullptr, caller()->data_channel());
- ASSERT_TRUE_WAIT(callee()->data_channel() != nullptr, kDefaultTimeout);
- ASSERT_TRUE_WAIT(caller()->data_observer()->IsOpen(), kDefaultTimeout);
- ASSERT_TRUE_WAIT(callee()->data_observer()->IsOpen(), kDefaultTimeout);
-
- // Close the data channel on the callee side, and wait for it to reach the
- // "closed" state on both sides.
- callee()->data_channel()->Close();
- EXPECT_TRUE_WAIT(!caller()->data_observer()->IsOpen(), kDefaultTimeout);
- EXPECT_TRUE_WAIT(!callee()->data_observer()->IsOpen(), kDefaultTimeout);
-}
-
-TEST_P(PeerConnectionIntegrationTest,
- MediaTransportDataChannelConfigSentToOtherSide) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.use_media_transport_for_data_channels = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Create a data channel with a non-default configuration and signal it to the
- // callee.
- webrtc::DataChannelInit init;
- init.id = 53;
- init.maxRetransmits = 52;
- caller()->CreateDataChannel("data-channel", &init);
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Ensure that the data channel exists on the callee with the correct
- // configuration.
- ASSERT_TRUE_WAIT(callee()->data_channel() != nullptr, kDefaultTimeout);
- ASSERT_TRUE_WAIT(callee()->data_observer()->IsOpen(), kDefaultTimeout);
- // Since "negotiate" is false, the "id" parameter is ignored.
- EXPECT_NE(init.id, callee()->data_channel()->id());
- EXPECT_EQ("data-channel", callee()->data_channel()->label());
- EXPECT_EQ(init.maxRetransmits, callee()->data_channel()->maxRetransmits());
- EXPECT_FALSE(callee()->data_channel()->negotiated());
-}
-
-TEST_P(PeerConnectionIntegrationTest, MediaTransportOfferUpgrade) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- rtc_config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- rtc_config.use_media_transport = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Do initial offer/answer with just a video track.
- caller()->AddVideoTrack();
- callee()->AddVideoTrack();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Now add an audio track and do another offer/answer.
- caller()->AddAudioTrack();
- callee()->AddAudioTrack();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure both audio and video frames are received end-to-end.
- MediaExpectations media_expectations;
- media_expectations.ExpectBidirectionalAudioAndVideo();
- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-
- // The second offer should not have generated another media transport.
- // Media transport was kept alive, and was not recreated.
- EXPECT_EQ(1, loopback_media_transports()->first_factory_transport_count());
- EXPECT_EQ(1, loopback_media_transports()->second_factory_transport_count());
-}
-
-TEST_P(PeerConnectionIntegrationTest, MediaTransportOfferUpgradeOnTheCallee) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- rtc_config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- rtc_config.use_media_transport = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- // Do initial offer/answer with just a video track.
- caller()->AddVideoTrack();
- callee()->AddVideoTrack();
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- // Now add an audio track and do another offer/answer.
- caller()->AddAudioTrack();
- callee()->AddAudioTrack();
- callee()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure both audio and video frames are received end-to-end.
- MediaExpectations media_expectations;
- media_expectations.ExpectBidirectionalAudioAndVideo();
- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-
- // The second offer should not have generated another media transport.
- // Media transport was kept alive, and was not recreated.
- EXPECT_EQ(1, loopback_media_transports()->first_factory_transport_count());
- EXPECT_EQ(1, loopback_media_transports()->second_factory_transport_count());
-}
-
-TEST_P(PeerConnectionIntegrationTest, MediaTransportBidirectionalAudio) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
- rtc_config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
- rtc_config.use_media_transport = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- caller()->AddAudioTrack();
- callee()->AddAudioTrack();
- // Start offer/answer exchange and wait for it to complete.
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- MediaExpectations media_expectations;
- media_expectations.ExpectBidirectionalAudio();
- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-
- webrtc::MediaTransportPair::Stats first_stats =
- loopback_media_transports()->FirstStats();
- webrtc::MediaTransportPair::Stats second_stats =
- loopback_media_transports()->SecondStats();
-
- EXPECT_GT(first_stats.received_audio_frames, 0);
- EXPECT_GE(second_stats.sent_audio_frames, first_stats.received_audio_frames);
-
- EXPECT_GT(second_stats.received_audio_frames, 0);
- EXPECT_GE(first_stats.sent_audio_frames, second_stats.received_audio_frames);
-}
-
-TEST_P(PeerConnectionIntegrationTest, MediaTransportBidirectionalVideo) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.use_media_transport = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- caller()->AddVideoTrack();
- callee()->AddVideoTrack();
- // Start offer/answer exchange and wait for it to complete.
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- // Ensure that the media transport is ready.
- loopback_media_transports()->SetState(webrtc::MediaTransportState::kWritable);
- loopback_media_transports()->FlushAsyncInvokes();
-
- MediaExpectations media_expectations;
- media_expectations.ExpectBidirectionalVideo();
- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-
- webrtc::MediaTransportPair::Stats first_stats =
- loopback_media_transports()->FirstStats();
- webrtc::MediaTransportPair::Stats second_stats =
- loopback_media_transports()->SecondStats();
-
- EXPECT_GT(first_stats.received_video_frames, 0);
- EXPECT_GE(second_stats.sent_video_frames, first_stats.received_video_frames);
-
- EXPECT_GT(second_stats.received_video_frames, 0);
- EXPECT_GE(first_stats.sent_video_frames, second_stats.received_video_frames);
-}
-
-TEST_P(PeerConnectionIntegrationTest,
- MediaTransportDataChannelUsesRtpBidirectionalVideo) {
- PeerConnectionInterface::RTCConfiguration rtc_config;
- rtc_config.use_media_transport = false;
- rtc_config.use_media_transport_for_data_channels = true;
- rtc_config.enable_dtls_srtp = false; // SDES is required for media transport.
- ASSERT_TRUE(CreatePeerConnectionWrappersWithConfigAndMediaTransportFactory(
- rtc_config, rtc_config, loopback_media_transports()->first_factory(),
- loopback_media_transports()->second_factory()));
- ConnectFakeSignaling();
-
- caller()->AddVideoTrack();
- callee()->AddVideoTrack();
- // Start offer/answer exchange and wait for it to complete.
- caller()->CreateAndSetAndSignalOffer();
- ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
-
- MediaExpectations media_expectations;
- media_expectations.ExpectBidirectionalVideo();
- ASSERT_TRUE(ExpectNewFrames(media_expectations));
-}
-
// Test that the ICE connection and gathering states eventually reach
// "complete".
TEST_P(PeerConnectionIntegrationTest, IceStatesReachCompletion) {
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 5a01430..7f42b8c 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -1421,15 +1421,15 @@
PeerConnectionInterface::RTCConfiguration config = pc_->GetConfiguration();
config.type = PeerConnectionInterface::kRelay;
- config.use_media_transport = true;
- config.use_media_transport_for_data_channels = true;
+ config.use_datagram_transport = true;
+ config.use_datagram_transport_for_data_channels = true;
EXPECT_TRUE(pc_->SetConfiguration(config).ok());
PeerConnectionInterface::RTCConfiguration returned_config =
pc_->GetConfiguration();
EXPECT_EQ(PeerConnectionInterface::kRelay, returned_config.type);
- EXPECT_TRUE(returned_config.use_media_transport);
- EXPECT_TRUE(returned_config.use_media_transport_for_data_channels);
+ EXPECT_TRUE(returned_config.use_datagram_transport);
+ EXPECT_TRUE(returned_config.use_datagram_transport_for_data_channels);
}
TEST_P(PeerConnectionInterfaceTest, SetConfigurationFailsAfterClose) {
diff --git a/pc/peer_connection_media_unittest.cc b/pc/peer_connection_media_unittest.cc
index 62368a2..077c4a3 100644
--- a/pc/peer_connection_media_unittest.cc
+++ b/pc/peer_connection_media_unittest.cc
@@ -20,7 +20,6 @@
#include "api/call/call_factory_interface.h"
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/test/fake_media_transport.h"
#include "media/base/fake_media_engine.h"
#include "p2p/base/fake_port_allocator.h"
#include "pc/media_session.h"
@@ -85,8 +84,6 @@
}
// Creates PeerConnectionFactory and PeerConnection for given configuration.
- // Note that PeerConnectionFactory is created with MediaTransportFactory,
- // because some tests pass config.use_media_transport = true.
WrapperPtr CreatePeerConnection(
const RTCConfiguration& config,
std::unique_ptr<FakeMediaEngine> media_engine) {
@@ -103,8 +100,6 @@
factory_dependencies.event_log_factory =
std::make_unique<RtcEventLogFactory>(
factory_dependencies.task_queue_factory.get());
- factory_dependencies.media_transport_factory =
- std::make_unique<FakeMediaTransportFactory>();
auto pc_factory =
CreateModularPeerConnectionFactory(std::move(factory_dependencies));
@@ -1244,128 +1239,6 @@
audio_options.combined_audio_video_bwe);
}
-TEST_P(PeerConnectionMediaTest, MediaTransportPropagatedToVoiceEngine) {
- RTCConfiguration config;
-
- // Setup PeerConnection to use media transport.
- config.use_media_transport = true;
-
- // Force SDES.
- config.enable_dtls_srtp = false;
-
- auto caller = CreatePeerConnectionWithAudio(config);
- auto callee = CreatePeerConnectionWithAudio(config);
-
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- auto answer = callee->CreateAnswer();
- ASSERT_TRUE(callee->SetLocalDescription(std::move(answer)));
-
- auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
- auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
- ASSERT_TRUE(caller_voice);
- ASSERT_TRUE(callee_voice);
-
- // Make sure media transport is propagated to voice channel.
- FakeMediaTransport* caller_voice_media_transport =
- static_cast<FakeMediaTransport*>(caller_voice->media_transport());
- FakeMediaTransport* callee_voice_media_transport =
- static_cast<FakeMediaTransport*>(callee_voice->media_transport());
- ASSERT_NE(nullptr, caller_voice_media_transport);
- ASSERT_NE(nullptr, callee_voice_media_transport);
-
- // Make sure media transport is created with correct is_caller.
- EXPECT_TRUE(caller_voice_media_transport->is_caller());
- EXPECT_FALSE(callee_voice_media_transport->is_caller());
-
- // TODO(sukhanov): Propagate media transport to video channel.
- // This test does NOT set up video channels, because currently it causes
- // us to create two media transports.
-}
-
-TEST_P(PeerConnectionMediaTest, MediaTransportOnlyForDataChannels) {
- RTCConfiguration config;
-
- // Setup PeerConnection to use media transport for data channels.
- config.use_media_transport_for_data_channels = true;
-
- // Force SDES.
- config.enable_dtls_srtp = false;
-
- auto caller = CreatePeerConnectionWithAudio(config);
- auto callee = CreatePeerConnectionWithAudio(config);
-
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- ASSERT_TRUE(callee->SetLocalDescription(callee->CreateAnswer()));
-
- auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
- auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
- ASSERT_TRUE(caller_voice);
- ASSERT_TRUE(callee_voice);
-
- // Make sure media transport is not propagated to voice channel.
- EXPECT_EQ(nullptr, caller_voice->media_transport());
- EXPECT_EQ(nullptr, callee_voice->media_transport());
-}
-
-TEST_P(PeerConnectionMediaTest, MediaTransportForMediaAndDataChannels) {
- RTCConfiguration config;
-
- // Setup PeerConnection to use media transport for both media and data
- // channels.
- config.use_media_transport = true;
- config.use_media_transport_for_data_channels = true;
-
- // Force SDES.
- config.enable_dtls_srtp = false;
-
- auto caller = CreatePeerConnectionWithAudio(config);
- auto callee = CreatePeerConnectionWithAudio(config);
-
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- ASSERT_TRUE(callee->SetLocalDescription(callee->CreateAnswer()));
-
- auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
- auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
- ASSERT_TRUE(caller_voice);
- ASSERT_TRUE(callee_voice);
-
- // Make sure media transport is propagated to voice channel.
- FakeMediaTransport* caller_voice_media_transport =
- static_cast<FakeMediaTransport*>(caller_voice->media_transport());
- FakeMediaTransport* callee_voice_media_transport =
- static_cast<FakeMediaTransport*>(callee_voice->media_transport());
- ASSERT_NE(nullptr, caller_voice_media_transport);
- ASSERT_NE(nullptr, callee_voice_media_transport);
-
- // Make sure media transport is created with correct is_caller.
- EXPECT_TRUE(caller_voice_media_transport->is_caller());
- EXPECT_FALSE(callee_voice_media_transport->is_caller());
-}
-
-TEST_P(PeerConnectionMediaTest, MediaTransportNotPropagatedToVoiceEngine) {
- auto caller = CreatePeerConnectionWithAudioVideo();
- auto callee = CreatePeerConnectionWithAudioVideo();
-
- ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
- auto answer = callee->CreateAnswer();
- ASSERT_TRUE(callee->SetLocalDescription(std::move(answer)));
-
- auto caller_voice = caller->media_engine()->GetVoiceChannel(0);
- auto callee_voice = callee->media_engine()->GetVoiceChannel(0);
- ASSERT_TRUE(caller_voice);
- ASSERT_TRUE(callee_voice);
-
- // Since we did not setup PeerConnection to use media transport, media
- // transport should not be created / propagated to the voice engine.
- ASSERT_EQ(nullptr, caller_voice->media_transport());
- ASSERT_EQ(nullptr, callee_voice->media_transport());
-
- auto caller_video = caller->media_engine()->GetVideoChannel(0);
- auto callee_video = callee->media_engine()->GetVideoChannel(0);
- ASSERT_EQ(nullptr, caller_video->media_transport());
- ASSERT_EQ(nullptr, callee_video->media_transport());
-}
-
template <typename C>
bool CompareCodecs(const std::vector<webrtc::RtpCodecCapability>& capabilities,
const std::vector<C>& codecs) {
diff --git a/pc/session_description.h b/pc/session_description.h
index f5e3635..7546d12 100644
--- a/pc/session_description.h
+++ b/pc/session_description.h
@@ -515,8 +515,6 @@
std::unique_ptr<SessionDescription> Clone() const;
- struct MediaTransportSetting;
-
// Content accessors.
const ContentInfos& contents() const { return contents_; }
ContentInfos& contents() { return contents_; }
@@ -627,32 +625,6 @@
}
bool extmap_allow_mixed() const { return extmap_allow_mixed_; }
- // Adds the media transport setting.
- // Media transport name uniquely identifies the type of media transport.
- // The name cannot be empty, or repeated in the previously added transport
- // settings.
- void AddMediaTransportSetting(const std::string& media_transport_name,
- const std::string& media_transport_setting) {
- RTC_DCHECK(!media_transport_name.empty());
- for (const auto& setting : media_transport_settings_) {
- RTC_DCHECK(media_transport_name != setting.transport_name)
- << "MediaTransportSetting was already registered, transport_name="
- << setting.transport_name;
- }
- media_transport_settings_.push_back(
- {media_transport_name, media_transport_setting});
- }
-
- // Gets the media transport settings, in order of preference.
- const std::vector<MediaTransportSetting>& MediaTransportSettings() const {
- return media_transport_settings_;
- }
-
- struct MediaTransportSetting {
- std::string transport_name;
- std::string transport_setting;
- };
-
private:
SessionDescription(const SessionDescription&);
@@ -669,8 +641,6 @@
// correctly. If it's included in offer to us we will respond that we support
// it.
bool extmap_allow_mixed_ = false;
-
- std::vector<MediaTransportSetting> media_transport_settings_;
};
// Indicates whether a session description was sent by the local client or
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index 7a42dca..c0e959a 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -229,13 +229,6 @@
static const char kDefaultSctpmapProtocol[] = "webrtc-datachannel";
-// This is a non-standardized media transport settings.
-// This setting is going to be set in the offer. There may be one or more
-// a=x-mt: settings, and they are in the priority order (the most preferred on
-// top). x-mt setting format depends on the media transport, and is generated by
-// |MediaTransportInterface::GetTransportParametersOffer|.
-static const char kMediaTransportSettingLine[] = "x-mt";
-
// This is a non-standardized setting for plugin transports.
static const char kOpaqueTransportParametersLine[] = "x-opaque";
@@ -530,17 +523,6 @@
InitLine(kLineTypeAttributes, attribute, os);
}
-// Writes an x-mt SDP attribute line based on the media transport settings.
-static void AddMediaTransportLine(
- const cricket::SessionDescription::MediaTransportSetting& setting,
- std::string* message) {
- rtc::StringBuilder os;
- InitAttrLine(kMediaTransportSettingLine, &os);
- os << kSdpDelimiterColon << setting.transport_name << kSdpDelimiterColon
- << rtc::Base64::Encode(setting.transport_setting);
- AddLine(os.str(), message);
-}
-
// Adds an x-otp SDP attribute line based on opaque transport parameters.
static void AddOpaqueTransportLine(
const cricket::OpaqueTransportParameters params,
@@ -902,11 +884,6 @@
// Time Description.
AddLine(kTimeDescription, &message);
- for (const cricket::SessionDescription::MediaTransportSetting& settings :
- desc->MediaTransportSettings()) {
- AddMediaTransportLine(settings, &message);
- }
-
// Group
if (desc->HasGroup(cricket::GROUP_TYPE_BUNDLE)) {
std::string group_line = kAttrGroup;
@@ -2122,28 +2099,6 @@
return true;
}
-bool ParseMediaTransportLine(const std::string& line,
- std::string* transport_name,
- std::string* transport_setting,
- SdpParseError* error) {
- std::string value;
- if (!GetValue(line, kMediaTransportSettingLine, &value, error)) {
- return false;
- }
- std::string media_transport_settings_base64;
- if (!rtc::tokenize_first(value, kSdpDelimiterColonChar, transport_name,
- &media_transport_settings_base64)) {
- return ParseFailedGetValue(line, kMediaTransportSettingLine, error);
- }
- if (!rtc::Base64::Decode(media_transport_settings_base64,
- rtc::Base64::DO_STRICT, transport_setting,
- nullptr)) {
- return ParseFailedGetValue(line, kMediaTransportSettingLine, error);
- }
-
- return true;
-}
-
bool ParseOpaqueTransportLine(const std::string& line,
std::string* protocol,
std::string* transport_parameters,
@@ -2327,24 +2282,6 @@
return false;
}
session_extmaps->push_back(extmap);
- } else if (HasAttribute(line, kMediaTransportSettingLine)) {
- std::string transport_name;
- std::string transport_setting;
- if (!ParseMediaTransportLine(line, &transport_name, &transport_setting,
- error)) {
- return false;
- }
-
- for (const auto& setting : desc->MediaTransportSettings()) {
- if (setting.transport_name == transport_name) {
- // Ignore repeated transport names rather than failing to parse so
- // that in the future the same transport could have multiple configs.
- RTC_LOG(INFO) << "x-mt line with repeated transport, transport_name="
- << transport_name;
- return true;
- }
- }
- desc->AddMediaTransportSetting(transport_name, transport_setting);
}
}
diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc
index 5c7e783..e8e937a 100644
--- a/pc/webrtc_sdp_unittest.cc
+++ b/pc/webrtc_sdp_unittest.cc
@@ -4640,121 +4640,6 @@
Field("name", &cricket::ContentInfo::name, "")));
}
-// Test that the media transport name and base64-decoded setting is parsed from
-// an a=x-mt line.
-TEST_F(WebRtcSdpTest, ParseMediaTransport) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp += "a=x-mt:rtp:dGVzdDY0\r\n";
- SdpParseError error;
-
- ASSERT_TRUE(webrtc::SdpDeserialize(sdp, &output, &error))
- << error.description;
- const auto& settings = output.description()->MediaTransportSettings();
- ASSERT_EQ(1u, settings.size());
- EXPECT_EQ("rtp", settings[0].transport_name);
- EXPECT_EQ("test64", settings[0].transport_setting);
-}
-
-// Test that an a=x-mt line fails to parse if its setting is invalid base 64.
-TEST_F(WebRtcSdpTest, ParseMediaTransportInvalidBase64) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp += "a=x-mt:rtp:ThisIsInvalidBase64\r\n";
- SdpParseError error;
-
- ASSERT_FALSE(webrtc::SdpDeserialize(sdp, &output, &error));
-}
-
-// Test that multiple a=x-mt lines are parsed in the order of preference (the
-// order of the lines in the SDP).
-TEST_F(WebRtcSdpTest, ParseMediaTransportMultipleLines) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp +=
- "a=x-mt:rtp:dGVzdDY0\r\n"
- "a=x-mt:generic:Z2VuZXJpY3NldHRpbmc=\r\n";
- SdpParseError error;
-
- ASSERT_TRUE(webrtc::SdpDeserialize(sdp, &output, &error))
- << error.description;
- const auto& settings = output.description()->MediaTransportSettings();
- ASSERT_EQ(2u, settings.size());
- EXPECT_EQ("rtp", settings[0].transport_name);
- EXPECT_EQ("test64", settings[0].transport_setting);
- EXPECT_EQ("generic", settings[1].transport_name);
- EXPECT_EQ("genericsetting", settings[1].transport_setting);
-}
-
-// Test that only the first a=x-mt line associated with a transport name is
-// parsed and the rest ignored.
-TEST_F(WebRtcSdpTest, ParseMediaTransportSkipRepeatedTransport) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp +=
- "a=x-mt:rtp:dGVzdDY0\r\n"
- "a=x-mt:rtp:Z2VuZXJpY3NldHRpbmc=\r\n";
- SdpParseError error;
-
- // Repeated 'rtp' transport setting. We still parse the SDP successfully,
- // but ignore the repeated transport.
- ASSERT_TRUE(webrtc::SdpDeserialize(sdp, &output, &error));
- const auto& settings = output.description()->MediaTransportSettings();
- EXPECT_EQ("test64", settings[0].transport_setting);
-}
-
-// Test that an a=x-mt line fails to parse if it is missing a setting.
-TEST_F(WebRtcSdpTest, ParseMediaTransportMalformedLine) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp += "a=x-mt:rtp\r\n";
- SdpParseError error;
-
- ASSERT_FALSE(webrtc::SdpDeserialize(sdp, &output, &error));
-}
-
-// Test that an a=x-mt line fails to parse if its missing a name and setting.
-TEST_F(WebRtcSdpTest, ParseMediaTransportMalformedLine2) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp += "a=x-mt\r\n";
- SdpParseError error;
-
- ASSERT_FALSE(webrtc::SdpDeserialize(sdp, &output, &error));
-}
-
-TEST_F(WebRtcSdpTest, ParseMediaTransportIgnoreNonsenseAttributeLines) {
- JsepSessionDescription output(kDummyType);
- std::string sdp = kSdpSessionString;
- sdp += "a=x-nonsense:rtp:dGVzdDY0\r\n";
- SdpParseError error;
-
- ASSERT_TRUE(webrtc::SdpDeserialize(sdp, &output, &error))
- << error.description;
- EXPECT_TRUE(output.description()->MediaTransportSettings().empty());
-}
-
-TEST_F(WebRtcSdpTest, SerializeMediaTransportSettings) {
- auto description = std::make_unique<cricket::SessionDescription>();
-
- JsepSessionDescription output(SdpType::kOffer);
- // JsepSessionDescription takes ownership of the description.
- output.Initialize(std::move(description), "session_id", "session_version");
- output.description()->AddMediaTransportSetting("foo", "bar");
- std::string serialized_out;
- output.ToString(&serialized_out);
- ASSERT_THAT(serialized_out, ::testing::HasSubstr("\r\na=x-mt:foo:YmFy\r\n"));
-}
-
-TEST_F(WebRtcSdpTest, SerializeMediaTransportSettingsTestCopy) {
- cricket::SessionDescription description;
- description.AddMediaTransportSetting("name", "setting");
- std::unique_ptr<cricket::SessionDescription> copy = description.Clone();
- ASSERT_EQ(1u, copy->MediaTransportSettings().size());
- EXPECT_EQ("name", copy->MediaTransportSettings()[0].transport_name);
- EXPECT_EQ("setting", copy->MediaTransportSettings()[0].transport_setting);
-}
-
TEST_F(WebRtcSdpTest, SerializeWithDefaultSctpProtocol) {
AddSctpDataChannel(false); // Don't use sctpmap
JsepSessionDescription jsep_desc(kDummyType);