Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: remoting/protocol/webrtc_audio_stream.cc

Issue 2392963003: Add Audio support in Chromoting host when using WebRTC. (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/webrtc_audio_stream.h ('k') | remoting/protocol/webrtc_connection_to_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..5ede04ec81bcb85d81f86b6234df982b00ccfc9b
--- /dev/null
+++ b/remoting/protocol/webrtc_audio_stream.cc
@@ -0,0 +1,71 @@
+// 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());
+ }
+}
+
+void 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);
+
+ // AddTrack() may fail only if there is another track with the same name,
+ // which is impossible because it's a brand new stream.
+ bool result = stream_->AddTrack(audio_track.get());
+ DCHECK(result);
+
+ // AddStream() may fail if there is another stream with the same name or when
+ // the PeerConnection is closed, neither is expected.
+ result = peer_connection_->AddStream(stream_.get());
+ DCHECK(result);
+}
+
+void WebrtcAudioStream::Pause(bool pause) {
+ source_adapter_->Pause(pause);
+}
+
+} // namespace protocol
+} // namespace remoting
« no previous file with comments | « remoting/protocol/webrtc_audio_stream.h ('k') | remoting/protocol/webrtc_connection_to_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698