Index: content/public/renderer/media_stream_api.cc |
diff --git a/content/public/renderer/media_stream_api.cc b/content/public/renderer/media_stream_api.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ca16cf23c31fd5da31a7b4f847fee281c5a25cf0 |
--- /dev/null |
+++ b/content/public/renderer/media_stream_api.cc |
@@ -0,0 +1,125 @@ |
+// Copyright 2015 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 "content/public/renderer/media_stream_api.h" |
+ |
+#include "base/base64.h" |
+#include "base/callback.h" |
+#include "base/rand_util.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "content/renderer/media/media_stream_audio_source.h" |
+#include "content/renderer/media/media_stream_video_capturer_source.h" |
+#include "content/renderer/media/media_stream_video_track.h" |
+#include "media/base/audio_capturer_source.h" |
+#include "media/base/video_capturer_source.h" |
+#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" |
+#include "third_party/WebKit/public/platform/WebMediaStream.h" |
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
+#include "third_party/WebKit/public/platform/WebURL.h" |
+#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" |
+#include "url/gurl.h" |
+ |
+namespace content { |
+ |
+namespace { |
+ |
+blink::WebString MakeTrackId() { |
+ std::string track_id; |
+ base::Base64Encode(base::RandBytesAsString(64), &track_id); |
+ return base::UTF8ToUTF16(track_id); |
+} |
+ |
+} // namespace |
+ |
+bool AddVideoTrackToMediaStream( |
+ scoped_ptr<media::VideoCapturerSource> source, |
+ bool is_remote, |
+ bool is_readonly, |
+ const std::string& media_stream_url) { |
+ blink::WebMediaStream stream = |
+ blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
+ GURL(media_stream_url)); |
+ |
+ if (stream.isNull()) { |
+ LOG(ERROR) << "Stream not found"; |
+ return false; |
+ } |
+ blink::WebString track_id = MakeTrackId(); |
+ blink::WebMediaStreamSource webkit_source; |
+ scoped_ptr<MediaStreamVideoSource> media_stream_source( |
+ new content::MediaStreamVideoCapturerSource( |
jam
2015/03/04 07:07:06
ntit: here and elsewhere, no content:: inside cont
hubbe
2015/03/04 23:12:33
Done.
|
+ content::MediaStreamSource::SourceStoppedCallback(), |
+ source.Pass())); |
+ webkit_source.initialize( |
+ track_id, |
+ blink::WebMediaStreamSource::TypeVideo, |
+ track_id, |
+ is_remote, |
+ is_readonly); |
+ webkit_source.setExtraData(media_stream_source.get()); |
+ |
+ blink::WebMediaConstraints constraints; |
+ constraints.initialize(); |
+ stream.addTrack(MediaStreamVideoTrack::CreateVideoTrack( |
+ media_stream_source.release(), |
+ constraints, |
+ MediaStreamVideoSource::ConstraintsCallback(), |
+ true)); |
+ return true; |
+} |
+ |
+bool AddAudioTrackToMediaStream( |
+ scoped_refptr<media::AudioCapturerSource> source, |
+ const media::AudioParameters& params, |
+ bool is_remote, |
+ bool is_readonly, |
+ const std::string& media_stream_url) { |
+ DCHECK(params.IsValid()) << params.AsHumanReadableString(); |
+ blink::WebMediaStream stream = |
+ blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
+ GURL(media_stream_url)); |
+ |
+ if (stream.isNull()) { |
+ LOG(ERROR) << "Stream not found"; |
+ return false; |
+ } |
+ blink::WebMediaStreamSource webkit_source; |
+ blink::WebString track_id = MakeTrackId(); |
+ webkit_source.initialize( |
+ track_id, |
+ blink::WebMediaStreamSource::TypeAudio, |
+ track_id, |
+ is_remote, |
+ is_readonly); |
+ |
+ MediaStreamAudioSource* audio_source( |
+ new MediaStreamAudioSource( |
jam
2015/03/04 07:07:06
nit: indentation
hubbe
2015/03/04 23:12:33
Done.
|
+ -1, |
+ StreamDeviceInfo(), |
+ content::MediaStreamSource::SourceStoppedCallback(), |
+ RenderThreadImpl::current()->GetPeerConnectionDependencyFactory())); |
+ |
+ blink::WebMediaConstraints constraints; |
+ constraints.initialize(); |
+ scoped_refptr<WebRtcAudioCapturer> capturer( |
+ WebRtcAudioCapturer::CreateCapturer( |
+ -1, |
+ StreamDeviceInfo(), |
+ constraints, |
+ nullptr, |
+ audio_source)); |
+ capturer->SetCapturerSource(source, params); |
+ audio_source->SetAudioCapturer(capturer); |
+ webkit_source.setExtraData(audio_source); |
+ |
+ blink::WebMediaStreamTrack web_media_audio_track; |
+ web_media_audio_track.initialize(webkit_source); |
+ RenderThreadImpl::current()->GetPeerConnectionDependencyFactory()-> |
+ CreateLocalAudioTrack(web_media_audio_track); |
+ |
+ stream.addTrack(web_media_audio_track); |
+ return true; |
+} |
+ |
+} // namespace content |