Index: remoting/protocol/webrtc_audio_stream.cc |
diff --git a/remoting/protocol/webrtc_audio_stream.cc b/remoting/protocol/webrtc_audio_stream.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d09d036b1f535323a892b088a74869c59384c850 |
--- /dev/null |
+++ b/remoting/protocol/webrtc_audio_stream.cc |
@@ -0,0 +1,70 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "remoting/protocol/webrtc_audio_stream.h" |
+ |
+#include "base/location.h" |
+#include "base/logging.h" |
+#include "base/single_thread_task_runner.h" |
+#include "remoting/base/constants.h" |
+#include "remoting/protocol/audio_source.h" |
+#include "remoting/protocol/webrtc_audio_source_adapter.h" |
+#include "remoting/protocol/webrtc_transport.h" |
+#include "third_party/webrtc/api/mediastreaminterface.h" |
+#include "third_party/webrtc/api/peerconnectioninterface.h" |
+#include "third_party/webrtc/base/refcount.h" |
+ |
+namespace remoting { |
+namespace protocol { |
+ |
+const char kAudioStreamLabel[] = "audio_stream"; |
+const char kAudioTrackLabel[] = "system_audio"; |
+ |
+WebrtcAudioStream::WebrtcAudioStream() {} |
+ |
+WebrtcAudioStream::~WebrtcAudioStream() { |
+ if (stream_) { |
+ for (const auto& track : stream_->GetAudioTracks()) { |
+ stream_->RemoveTrack(track.get()); |
+ } |
+ peer_connection_->RemoveStream(stream_.get()); |
+ } |
+} |
+ |
+bool WebrtcAudioStream::Start( |
+ scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner, |
+ std::unique_ptr<AudioSource> audio_source, |
+ WebrtcTransport* webrtc_transport) { |
+ DCHECK(webrtc_transport); |
+ |
+ source_adapter_ = |
+ new rtc::RefCountedObject<WebrtcAudioSourceAdapter>(audio_task_runner); |
+ source_adapter_->Start(std::move(audio_source)); |
+ |
+ scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_connection_factory( |
+ webrtc_transport->peer_connection_factory()); |
+ peer_connection_ = webrtc_transport->peer_connection(); |
+ |
+ rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track = |
+ peer_connection_factory->CreateAudioTrack(kAudioTrackLabel, |
+ source_adapter_.get()); |
+ |
+ stream_ = peer_connection_factory->CreateLocalMediaStream(kAudioStreamLabel); |
+ |
+ if (!stream_->AddTrack(audio_track.get()) || |
+ !peer_connection_->AddStream(stream_.get())) { |
+ stream_ = nullptr; |
+ peer_connection_ = nullptr; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+void WebrtcAudioStream::Pause(bool pause) { |
+ source_adapter_->Pause(pause); |
+} |
+ |
+} // namespace protocol |
+} // namespace remoting |