| Index: webrtc/api/webrtcsession.cc
|
| diff --git a/webrtc/api/webrtcsession.cc b/webrtc/api/webrtcsession.cc
|
| index 30a0a7c25ef955e9d2c9cc3f20e4a4ff8ccd0f09..aa172cef3719155f8080e5139dc1f3dc08cf41d4 100644
|
| --- a/webrtc/api/webrtcsession.cc
|
| +++ b/webrtc/api/webrtcsession.cc
|
| @@ -1787,6 +1787,7 @@
|
| const std::string* bundle_transport) {
|
| bool require_rtcp_mux =
|
| rtcp_mux_policy_ == PeerConnectionInterface::kRtcpMuxPolicyRequire;
|
| + bool create_rtcp_transport_channel = !require_rtcp_mux;
|
|
|
| std::string transport_name =
|
| bundle_transport ? *bundle_transport : content->name;
|
| @@ -1795,7 +1796,7 @@
|
| transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
|
| cricket::TransportChannel* rtcp_transport = nullptr;
|
| - if (!require_rtcp_mux) {
|
| + if (create_rtcp_transport_channel) {
|
| rtcp_transport = transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP);
|
| }
|
| @@ -1803,13 +1804,18 @@
|
| voice_channel_.reset(channel_manager_->CreateVoiceChannel(
|
| media_controller_, rtp_transport, rtcp_transport,
|
| transport_controller_->signaling_thread(), content->name,
|
| - bundle_transport, require_rtcp_mux, SrtpRequired(), audio_options_));
|
| + bundle_transport, create_rtcp_transport_channel, SrtpRequired(),
|
| + audio_options_));
|
| if (!voice_channel_) {
|
| return false;
|
| }
|
|
|
| - voice_channel_->SignalRtcpMuxFullyActive.connect(
|
| - this, &WebRtcSession::DestroyRtcpTransport_n);
|
| + voice_channel_->SignalDestroyRtcpTransport.connect(
|
| + this, &WebRtcSession::OnDestroyRtcpTransport_n);
|
| + if (require_rtcp_mux) {
|
| + voice_channel_->ActivateRtcpMux();
|
| + }
|
| +
|
| voice_channel_->SignalDtlsSrtpSetupFailure.connect(
|
| this, &WebRtcSession::OnDtlsSrtpSetupFailure);
|
|
|
| @@ -1823,6 +1829,7 @@
|
| const std::string* bundle_transport) {
|
| bool require_rtcp_mux =
|
| rtcp_mux_policy_ == PeerConnectionInterface::kRtcpMuxPolicyRequire;
|
| + bool create_rtcp_transport_channel = !require_rtcp_mux;
|
|
|
| std::string transport_name =
|
| bundle_transport ? *bundle_transport : content->name;
|
| @@ -1831,7 +1838,7 @@
|
| transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
|
| cricket::TransportChannel* rtcp_transport = nullptr;
|
| - if (!require_rtcp_mux) {
|
| + if (create_rtcp_transport_channel) {
|
| rtcp_transport = transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP);
|
| }
|
| @@ -1839,14 +1846,18 @@
|
| video_channel_.reset(channel_manager_->CreateVideoChannel(
|
| media_controller_, rtp_transport, rtcp_transport,
|
| transport_controller_->signaling_thread(), content->name,
|
| - bundle_transport, require_rtcp_mux, SrtpRequired(), video_options_));
|
| + bundle_transport, create_rtcp_transport_channel, SrtpRequired(),
|
| + video_options_));
|
|
|
| if (!video_channel_) {
|
| return false;
|
| }
|
|
|
| - video_channel_->SignalRtcpMuxFullyActive.connect(
|
| - this, &WebRtcSession::DestroyRtcpTransport_n);
|
| + video_channel_->SignalDestroyRtcpTransport.connect(
|
| + this, &WebRtcSession::OnDestroyRtcpTransport_n);
|
| + if (require_rtcp_mux) {
|
| + video_channel_->ActivateRtcpMux();
|
| + }
|
| video_channel_->SignalDtlsSrtpSetupFailure.connect(
|
| this, &WebRtcSession::OnDtlsSrtpSetupFailure);
|
|
|
| @@ -1883,6 +1894,7 @@
|
| } else {
|
| bool require_rtcp_mux =
|
| rtcp_mux_policy_ == PeerConnectionInterface::kRtcpMuxPolicyRequire;
|
| + bool create_rtcp_transport_channel = !sctp && !require_rtcp_mux;
|
|
|
| std::string transport_name =
|
| bundle_transport ? *bundle_transport : content->name;
|
| @@ -1890,7 +1902,7 @@
|
| transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
|
| cricket::TransportChannel* rtcp_transport = nullptr;
|
| - if (!require_rtcp_mux) {
|
| + if (create_rtcp_transport_channel) {
|
| rtcp_transport = transport_controller_->CreateTransportChannel(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP);
|
| }
|
| @@ -1898,14 +1910,18 @@
|
| rtp_data_channel_.reset(channel_manager_->CreateRtpDataChannel(
|
| media_controller_, rtp_transport, rtcp_transport,
|
| transport_controller_->signaling_thread(), content->name,
|
| - bundle_transport, require_rtcp_mux, SrtpRequired()));
|
| + bundle_transport, create_rtcp_transport_channel, SrtpRequired()));
|
|
|
| if (!rtp_data_channel_) {
|
| return false;
|
| }
|
|
|
| - rtp_data_channel_->SignalRtcpMuxFullyActive.connect(
|
| - this, &WebRtcSession::DestroyRtcpTransport_n);
|
| + rtp_data_channel_->SignalDestroyRtcpTransport.connect(
|
| + this, &WebRtcSession::OnDestroyRtcpTransport_n);
|
| +
|
| + if (require_rtcp_mux) {
|
| + rtp_data_channel_->ActivateRtcpMux();
|
| + }
|
| rtp_data_channel_->SignalDtlsSrtpSetupFailure.connect(
|
| this, &WebRtcSession::OnDtlsSrtpSetupFailure);
|
| rtp_data_channel_->SignalSentPacket.connect(this,
|
| @@ -2373,7 +2389,8 @@
|
| transport_controller_.get(), transport_name, component));
|
| }
|
|
|
| -void WebRtcSession::DestroyRtcpTransport_n(const std::string& transport_name) {
|
| +void WebRtcSession::OnDestroyRtcpTransport_n(
|
| + const std::string& transport_name) {
|
| ASSERT(network_thread()->IsCurrent());
|
| transport_controller_->DestroyTransportChannel_n(
|
| transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP);
|
|
|