Index: webrtc/pc/channelmanager.cc |
diff --git a/webrtc/pc/channelmanager.cc b/webrtc/pc/channelmanager.cc |
index a0b3609ecfc89ee61f733082528514007348170a..4c3c8976a2a58659b4c2cfcbb3b5c6883ecf4067 100644 |
--- a/webrtc/pc/channelmanager.cc |
+++ b/webrtc/pc/channelmanager.cc |
@@ -237,16 +237,29 @@ VoiceChannel* ChannelManager::CreateVoiceChannel_w( |
ASSERT(initialized_); |
ASSERT(worker_thread_ == rtc::Thread::Current()); |
ASSERT(nullptr != media_controller); |
+ |
VoiceMediaChannel* media_channel = media_engine_->CreateChannel( |
media_controller->call_w(), media_controller->config(), options); |
if (!media_channel) |
return nullptr; |
+ rtc::Thread* signaling_thread = |
+ transport_controller ? transport_controller->signaling_thread() : nullptr; |
VoiceChannel* voice_channel = new VoiceChannel( |
- worker_thread_, network_thread_, media_engine_.get(), media_channel, |
- transport_controller, content_name, rtcp, srtp_required); |
+ worker_thread_, network_thread_, signaling_thread, media_engine_.get(), |
+ media_channel, content_name, rtcp, srtp_required); |
voice_channel->SetCryptoOptions(crypto_options_); |
- if (!voice_channel->Init_w(bundle_transport_name)) { |
+ std::string transport_name = |
+ bundle_transport_name ? *bundle_transport_name : content_name; |
+ TransportChannel* rtp_transport = |
+ transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
+ TransportChannel* rtcp_transport = |
+ rtcp |
+ ? transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP) |
+ : nullptr; |
Taylor Brandstetter
2017/01/09 22:50:42
Could this code be moved to WebRtcSession? That wo
Zhi Huang
2017/01/12 03:47:46
Done.
|
+ if (!voice_channel->Init_w(rtp_transport, rtcp_transport)) { |
delete voice_channel; |
return nullptr; |
} |
@@ -308,11 +321,23 @@ VideoChannel* ChannelManager::CreateVideoChannel_w( |
return NULL; |
} |
+ rtc::Thread* signaling_thread = |
+ transport_controller ? transport_controller->signaling_thread() : nullptr; |
VideoChannel* video_channel = |
- new VideoChannel(worker_thread_, network_thread_, media_channel, |
- transport_controller, content_name, rtcp, srtp_required); |
+ new VideoChannel(worker_thread_, network_thread_, signaling_thread, |
+ media_channel, content_name, rtcp, srtp_required); |
video_channel->SetCryptoOptions(crypto_options_); |
- if (!video_channel->Init_w(bundle_transport_name)) { |
+ std::string transport_name = |
+ bundle_transport_name ? *bundle_transport_name : content_name; |
+ TransportChannel* rtp_transport = |
+ transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
+ TransportChannel* rtcp_transport = |
+ rtcp |
+ ? transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP) |
+ : nullptr; |
+ if (!video_channel->Init_w(rtp_transport, rtcp_transport)) { |
delete video_channel; |
return NULL; |
} |
@@ -380,14 +405,25 @@ DataChannel* ChannelManager::CreateDataChannel_w( |
<< data_channel_type; |
return NULL; |
} |
- |
+ rtc::Thread* signaling_thread = |
+ transport_controller ? transport_controller->signaling_thread() : nullptr; |
// Only RTP data channels need SRTP. |
srtp_required = srtp_required && data_channel_type == DCT_RTP; |
DataChannel* data_channel = |
- new DataChannel(worker_thread_, network_thread_, media_channel, |
- transport_controller, content_name, rtcp, srtp_required); |
+ new DataChannel(worker_thread_, network_thread_, signaling_thread, |
+ media_channel, content_name, rtcp, srtp_required); |
+ std::string transport_name = |
+ bundle_transport_name ? *bundle_transport_name : content_name; |
+ TransportChannel* rtp_transport = |
+ transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
+ TransportChannel* rtcp_transport = |
+ rtcp |
+ ? transport_controller->CreateTransportChannel( |
+ transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP) |
+ : nullptr; |
data_channel->SetCryptoOptions(crypto_options_); |
- if (!data_channel->Init_w(bundle_transport_name)) { |
+ if (!data_channel->Init_w(rtp_transport, rtcp_transport)) { |
LOG(LS_WARNING) << "Failed to init data channel."; |
delete data_channel; |
return NULL; |