Index: remoting/protocol/webrtc_transport.cc |
diff --git a/remoting/protocol/webrtc_transport.cc b/remoting/protocol/webrtc_transport.cc |
index afa408592e47af22a31e257e45f5ac5c0018ad31..604f5d9bd3fbbc16a57aeee1026e17f28c74b9c4 100644 |
--- a/remoting/protocol/webrtc_transport.cc |
+++ b/remoting/protocol/webrtc_transport.cc |
@@ -146,11 +146,10 @@ class WebrtcTransport::PeerConnectionWrapper |
std::unique_ptr<cricket::PortAllocator> port_allocator, |
base::WeakPtr<WebrtcTransport> transport) |
: transport_(transport) { |
- scoped_refptr<WebrtcAudioModule> audio_module = |
- new rtc::RefCountedObject<WebrtcAudioModule>(); |
+ audio_module_ = new rtc::RefCountedObject<WebrtcAudioModule>(); |
peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( |
- worker_thread, rtc::Thread::Current(), audio_module.get(), |
+ worker_thread, rtc::Thread::Current(), audio_module_.get(), |
encoder_factory.release(), nullptr); |
webrtc::FakeConstraints constraints; |
@@ -162,6 +161,10 @@ class WebrtcTransport::PeerConnectionWrapper |
} |
virtual ~PeerConnectionWrapper() { peer_connection_->Close(); } |
+ WebrtcAudioModule* audio_module() { |
+ return audio_module_.get(); |
+ } |
+ |
webrtc::PeerConnectionInterface* peer_connection() { |
return peer_connection_.get(); |
} |
@@ -225,12 +228,21 @@ WebrtcTransport::WebrtcTransport( |
rtc::Thread* worker_thread, |
scoped_refptr<TransportContext> transport_context, |
EventHandler* event_handler) |
- : worker_thread_(worker_thread), |
- transport_context_(transport_context), |
+ : transport_context_(transport_context), |
event_handler_(event_handler), |
handshake_hmac_(crypto::HMAC::SHA256), |
weak_factory_(this) { |
transport_context_->set_relay_mode(TransportContext::RelayMode::TURN); |
+ |
+ video_encoder_factory_ = new WebrtcDummyVideoEncoderFactory(); |
+ std::unique_ptr<cricket::PortAllocator> port_allocator = |
+ transport_context_->port_allocator_factory()->CreatePortAllocator( |
+ transport_context_); |
+ |
+ // Takes ownership of video_encoder_factory_. |
+ peer_connection_wrapper_.reset(new PeerConnectionWrapper( |
+ worker_thread, base::WrapUnique(video_encoder_factory_), |
+ std::move(port_allocator), weak_factory_.GetWeakPtr())); |
} |
WebrtcTransport::~WebrtcTransport() { |
@@ -249,6 +261,12 @@ WebrtcTransport::peer_connection_factory() { |
: nullptr; |
} |
+WebrtcAudioModule* WebrtcTransport::audio_module() { |
+ return peer_connection_wrapper_ |
+ ? peer_connection_wrapper_->audio_module() |
+ : nullptr; |
+} |
+ |
std::unique_ptr<MessagePipe> WebrtcTransport::CreateOutgoingChannel( |
const std::string& name) { |
webrtc::DataChannelInit config; |
@@ -274,16 +292,6 @@ void WebrtcTransport::Start( |
LOG(FATAL) << "HMAC::Init() failed."; |
} |
- video_encoder_factory_ = new WebrtcDummyVideoEncoderFactory(); |
- std::unique_ptr<cricket::PortAllocator> port_allocator = |
- transport_context_->port_allocator_factory()->CreatePortAllocator( |
- transport_context_); |
- |
- // Takes ownership of video_encoder_factory_. |
- peer_connection_wrapper_.reset(new PeerConnectionWrapper( |
- worker_thread_, base::WrapUnique(video_encoder_factory_), |
- std::move(port_allocator), weak_factory_.GetWeakPtr())); |
- |
event_handler_->OnWebrtcTransportConnecting(); |
if (transport_context_->role() == TransportRole::SERVER) |
@@ -434,6 +442,13 @@ void WebrtcTransport::OnLocalSessionDescriptionCreated( |
} |
description_sdp = NormalizeSessionDescription(description_sdp); |
+ // Update SDP format to use stereo for opus codec. |
+ std::string opus_line = "a=rtpmap:111 opus/48000/2\n"; |
+ std::string opus_line_with_bitrate = |
+ opus_line + "a=fmtp:111 stereo=1; x-google-min-bitrate=160\n"; |
+ base::ReplaceSubstringsAfterOffset(&description_sdp, 0, opus_line, |
+ opus_line_with_bitrate); |
+ |
// Format and send the session description to the peer. |
std::unique_ptr<XmlElement> transport_info( |
new XmlElement(QName(kTransportNamespace, "transport"), true)); |