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

Side by Side Diff: remoting/protocol/webrtc_video_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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/webrtc_video_stream.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/webrtc_video_stream.h" 5 #include "remoting/protocol/webrtc_video_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/task_runner_util.h" 9 #include "base/task_runner_util.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 WebrtcVideoStream::~WebrtcVideoStream() { 70 WebrtcVideoStream::~WebrtcVideoStream() {
71 if (stream_) { 71 if (stream_) {
72 for (const auto& track : stream_->GetVideoTracks()) { 72 for (const auto& track : stream_->GetVideoTracks()) {
73 stream_->RemoveTrack(track.get()); 73 stream_->RemoveTrack(track.get());
74 } 74 }
75 peer_connection_->RemoveStream(stream_.get()); 75 peer_connection_->RemoveStream(stream_.get());
76 } 76 }
77 encode_task_runner_->DeleteSoon(FROM_HERE, encoder_.release()); 77 encode_task_runner_->DeleteSoon(FROM_HERE, encoder_.release());
78 } 78 }
79 79
80 bool WebrtcVideoStream::Start( 80 void WebrtcVideoStream::Start(
81 std::unique_ptr<webrtc::DesktopCapturer> desktop_capturer, 81 std::unique_ptr<webrtc::DesktopCapturer> desktop_capturer,
82 WebrtcTransport* webrtc_transport, 82 WebrtcTransport* webrtc_transport,
83 scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner) { 83 scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner) {
84 DCHECK(thread_checker_.CalledOnValidThread()); 84 DCHECK(thread_checker_.CalledOnValidThread());
85 DCHECK(webrtc_transport); 85 DCHECK(webrtc_transport);
86 DCHECK(desktop_capturer); 86 DCHECK(desktop_capturer);
87 DCHECK(encode_task_runner); 87 DCHECK(encode_task_runner);
88 88
89 scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_connection_factory( 89 scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_connection_factory(
90 webrtc_transport->peer_connection_factory()); 90 webrtc_transport->peer_connection_factory());
(...skipping 14 matching lines...) Expand all
105 webrtc::MediaConstraintsInterface::kMinFrameRate, 5); 105 webrtc::MediaConstraintsInterface::kMinFrameRate, 5);
106 106
107 rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> src = 107 rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> src =
108 peer_connection_factory->CreateVideoSource(new WebrtcDummyVideoCapturer(), 108 peer_connection_factory->CreateVideoSource(new WebrtcDummyVideoCapturer(),
109 &video_constraints); 109 &video_constraints);
110 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track = 110 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
111 peer_connection_factory->CreateVideoTrack(kVideoLabel, src); 111 peer_connection_factory->CreateVideoTrack(kVideoLabel, src);
112 112
113 stream_ = peer_connection_factory->CreateLocalMediaStream(kStreamLabel); 113 stream_ = peer_connection_factory->CreateLocalMediaStream(kStreamLabel);
114 114
115 if (!stream_->AddTrack(video_track.get()) || 115 // AddTrack() may fail only if there is another track with the same name,
116 !peer_connection_->AddStream(stream_.get())) { 116 // which is impossible because it's a brand new stream.
117 stream_ = nullptr; 117 bool result = stream_->AddTrack(video_track.get());
118 peer_connection_ = nullptr; 118 DCHECK(result);
119 return false; 119
120 } 120 // AddStream() may fail if there is another stream with the same name or when
121 // the PeerConnection is closed, neither is expected.
122 result = peer_connection_->AddStream(stream_.get());
123 DCHECK(result);
121 124
122 // Register for PLI requests. 125 // Register for PLI requests.
123 webrtc_transport_->video_encoder_factory()->SetKeyFrameRequestCallback( 126 webrtc_transport_->video_encoder_factory()->SetKeyFrameRequestCallback(
124 base::Bind(&PostTaskOnTaskRunner, base::ThreadTaskRunnerHandle::Get(), 127 base::Bind(&PostTaskOnTaskRunner, base::ThreadTaskRunnerHandle::Get(),
125 base::Bind(&WebrtcVideoStream::SetKeyFrameRequest, 128 base::Bind(&WebrtcVideoStream::SetKeyFrameRequest,
126 weak_factory_.GetWeakPtr()))); 129 weak_factory_.GetWeakPtr())));
127 130
128 // Register for target bitrate notifications. 131 // Register for target bitrate notifications.
129 webrtc_transport_->video_encoder_factory()->SetTargetBitrateCallback( 132 webrtc_transport_->video_encoder_factory()->SetTargetBitrateCallback(
130 base::Bind(&PostTaskOnTaskRunnerWithParam<int>, 133 base::Bind(&PostTaskOnTaskRunnerWithParam<int>,
131 base::ThreadTaskRunnerHandle::Get(), 134 base::ThreadTaskRunnerHandle::Get(),
132 base::Bind(&WebrtcVideoStream::SetTargetBitrate, 135 base::Bind(&WebrtcVideoStream::SetTargetBitrate,
133 weak_factory_.GetWeakPtr()))); 136 weak_factory_.GetWeakPtr())));
134 137
135 video_stats_dispatcher_.Init(webrtc_transport_->CreateOutgoingChannel( 138 video_stats_dispatcher_.Init(webrtc_transport_->CreateOutgoingChannel(
136 video_stats_dispatcher_.channel_name()), 139 video_stats_dispatcher_.channel_name()),
137 this); 140 this);
138 141
139 scheduler_.reset(new WebrtcFrameSchedulerSimple()); 142 scheduler_.reset(new WebrtcFrameSchedulerSimple());
140
141 return true;
142 } 143 }
143 144
144 void WebrtcVideoStream::Pause(bool pause) { 145 void WebrtcVideoStream::Pause(bool pause) {
145 DCHECK(thread_checker_.CalledOnValidThread()); 146 DCHECK(thread_checker_.CalledOnValidThread());
146 scheduler_->Pause(pause); 147 scheduler_->Pause(pause);
147 } 148 }
148 149
149 void WebrtcVideoStream::OnInputEventReceived(int64_t event_timestamp) { 150 void WebrtcVideoStream::OnInputEventReceived(int64_t event_timestamp) {
150 DCHECK(thread_checker_.CalledOnValidThread()); 151 DCHECK(thread_checker_.CalledOnValidThread());
151 152
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 // TODO(sergeyu): Figure out how to measure send_pending time with WebRTC 306 // TODO(sergeyu): Figure out how to measure send_pending time with WebRTC
306 // and set it here. 307 // and set it here.
307 stats.send_pending_delay = base::TimeDelta(); 308 stats.send_pending_delay = base::TimeDelta();
308 309
309 video_stats_dispatcher_.OnVideoFrameStats(result.frame_id, stats); 310 video_stats_dispatcher_.OnVideoFrameStats(result.frame_id, stats);
310 } 311 }
311 } 312 }
312 313
313 } // namespace protocol 314 } // namespace protocol
314 } // namespace remoting 315 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_video_stream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698