OLD | NEW |
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 "content/public/renderer/media_stream_api.h" | 5 #include "content/public/renderer/media_stream_api.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "content/renderer/media/media_stream_audio_source.h" | 11 #include "content/renderer/media/media_stream_audio_source.h" |
12 #include "content/renderer/media/media_stream_video_capturer_source.h" | 12 #include "content/renderer/media/media_stream_video_capturer_source.h" |
13 #include "content/renderer/media/media_stream_video_track.h" | 13 #include "content/renderer/media/media_stream_video_track.h" |
14 #include "media/base/audio_capturer_source.h" | |
15 #include "media/base/video_capturer_source.h" | |
16 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" | |
17 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 14 #include "third_party/WebKit/public/platform/WebMediaStream.h" |
18 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 15 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
19 #include "third_party/WebKit/public/platform/WebURL.h" | 16 #include "third_party/WebKit/public/platform/WebURL.h" |
20 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" | 17 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" |
21 #include "url/gurl.h" | 18 #include "url/gurl.h" |
22 | 19 |
23 namespace content { | 20 namespace content { |
24 | 21 |
25 namespace { | 22 namespace { |
26 | 23 |
27 blink::WebString MakeTrackId() { | 24 blink::WebString MakeTrackId() { |
28 std::string track_id; | 25 std::string track_id; |
29 base::Base64Encode(base::RandBytesAsString(64), &track_id); | 26 base::Base64Encode(base::RandBytesAsString(64), &track_id); |
30 return base::UTF8ToUTF16(track_id); | 27 return base::UTF8ToUTF16(track_id); |
31 } | 28 } |
32 | 29 |
33 } // namespace | 30 } // namespace |
34 | 31 |
35 bool AddVideoTrackToMediaStream( | 32 bool AddVideoTrackToMediaStream( |
36 scoped_ptr<media::VideoCapturerSource> source, | 33 scoped_ptr<media::VideoCapturerSource> source, |
37 bool is_remote, | 34 bool is_remote, |
38 bool is_readonly, | 35 bool is_readonly, |
39 const std::string& media_stream_url) { | 36 const std::string& media_stream_url) { |
40 blink::WebMediaStream stream = | 37 blink::WebMediaStream web_stream = |
41 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( | 38 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
42 GURL(media_stream_url)); | 39 GURL(media_stream_url)); |
43 | 40 return AddVideoTrackToMediaStream(source.Pass(), is_remote, is_readonly, |
44 if (stream.isNull()) { | 41 &web_stream); |
45 LOG(ERROR) << "Stream not found"; | |
46 return false; | |
47 } | |
48 blink::WebString track_id = MakeTrackId(); | |
49 blink::WebMediaStreamSource webkit_source; | |
50 scoped_ptr<MediaStreamVideoSource> media_stream_source( | |
51 new MediaStreamVideoCapturerSource( | |
52 MediaStreamSource::SourceStoppedCallback(), | |
53 source.Pass())); | |
54 webkit_source.initialize( | |
55 track_id, | |
56 blink::WebMediaStreamSource::TypeVideo, | |
57 track_id, | |
58 is_remote, | |
59 is_readonly); | |
60 webkit_source.setExtraData(media_stream_source.get()); | |
61 | |
62 blink::WebMediaConstraints constraints; | |
63 constraints.initialize(); | |
64 stream.addTrack(MediaStreamVideoTrack::CreateVideoTrack( | |
65 media_stream_source.release(), | |
66 constraints, | |
67 MediaStreamVideoSource::ConstraintsCallback(), | |
68 true)); | |
69 return true; | |
70 } | 42 } |
71 | 43 |
72 bool AddAudioTrackToMediaStream( | 44 bool AddAudioTrackToMediaStream( |
73 scoped_refptr<media::AudioCapturerSource> source, | 45 const scoped_refptr<media::AudioCapturerSource>& source, |
74 const media::AudioParameters& params, | 46 const media::AudioParameters& params, |
75 bool is_remote, | 47 bool is_remote, |
76 bool is_readonly, | 48 bool is_readonly, |
77 const std::string& media_stream_url) { | 49 const std::string& media_stream_url) { |
78 DCHECK(params.IsValid()) << params.AsHumanReadableString(); | 50 DCHECK(params.IsValid()) << params.AsHumanReadableString(); |
79 blink::WebMediaStream stream = | 51 blink::WebMediaStream web_stream = |
80 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( | 52 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
81 GURL(media_stream_url)); | 53 GURL(media_stream_url)); |
82 | 54 if (web_stream.isNull()) { |
83 if (stream.isNull()) { | 55 DLOG(ERROR) << "Stream not found"; |
84 LOG(ERROR) << "Stream not found"; | |
85 return false; | 56 return false; |
86 } | 57 } |
87 blink::WebMediaStreamSource webkit_source; | 58 blink::WebMediaStreamSource webkit_source; |
88 blink::WebString track_id = MakeTrackId(); | 59 const blink::WebString track_id = MakeTrackId(); |
89 webkit_source.initialize( | 60 webkit_source.initialize(track_id, |
90 track_id, | 61 blink::WebMediaStreamSource::TypeAudio, |
91 blink::WebMediaStreamSource::TypeAudio, | 62 track_id, |
92 track_id, | 63 is_remote, |
93 is_remote, | 64 is_readonly); |
94 is_readonly); | |
95 | 65 |
96 MediaStreamAudioSource* audio_source( | 66 MediaStreamAudioSource* audio_source( |
97 new MediaStreamAudioSource( | 67 new MediaStreamAudioSource( |
98 -1, | 68 -1, |
99 StreamDeviceInfo(), | 69 StreamDeviceInfo(), |
100 MediaStreamSource::SourceStoppedCallback(), | 70 MediaStreamSource::SourceStoppedCallback(), |
101 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory())); | 71 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory())); |
102 | 72 |
103 blink::WebMediaConstraints constraints; | 73 blink::WebMediaConstraints constraints; |
104 constraints.initialize(); | 74 constraints.initialize(); |
105 scoped_refptr<WebRtcAudioCapturer> capturer( | 75 scoped_refptr<WebRtcAudioCapturer> capturer( |
106 WebRtcAudioCapturer::CreateCapturer(-1, StreamDeviceInfo(), constraints, | 76 WebRtcAudioCapturer::CreateCapturer(-1, StreamDeviceInfo(), constraints, |
107 nullptr, audio_source)); | 77 nullptr, audio_source)); |
108 capturer->SetCapturerSource(source, params); | 78 capturer->SetCapturerSource(source, params); |
109 audio_source->SetAudioCapturer(capturer); | 79 audio_source->SetAudioCapturer(capturer); |
110 webkit_source.setExtraData(audio_source); | 80 webkit_source.setExtraData(audio_source); |
111 | 81 |
112 blink::WebMediaStreamTrack web_media_audio_track; | 82 blink::WebMediaStreamTrack web_media_audio_track; |
113 web_media_audio_track.initialize(webkit_source); | 83 web_media_audio_track.initialize(webkit_source); |
114 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory()-> | 84 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory()-> |
115 CreateLocalAudioTrack(web_media_audio_track); | 85 CreateLocalAudioTrack(web_media_audio_track); |
116 | 86 |
117 stream.addTrack(web_media_audio_track); | 87 web_stream.addTrack(web_media_audio_track); |
118 return true; | 88 return true; |
119 } | 89 } |
120 | 90 |
| 91 bool AddVideoTrackToMediaStream(scoped_ptr<media::VideoCapturerSource> source, |
| 92 bool is_remote, |
| 93 bool is_readonly, |
| 94 blink::WebMediaStream* web_stream) { |
| 95 if (web_stream->isNull()) { |
| 96 DLOG(ERROR) << "Stream not found"; |
| 97 return false; |
| 98 } |
| 99 const blink::WebString track_id = MakeTrackId(); |
| 100 blink::WebMediaStreamSource webkit_source; |
| 101 scoped_ptr<MediaStreamVideoSource> media_stream_source( |
| 102 new MediaStreamVideoCapturerSource( |
| 103 MediaStreamSource::SourceStoppedCallback(), |
| 104 source.Pass())); |
| 105 webkit_source.initialize(track_id, |
| 106 blink::WebMediaStreamSource::TypeVideo, |
| 107 track_id, |
| 108 is_remote, |
| 109 is_readonly); |
| 110 webkit_source.setExtraData(media_stream_source.get()); |
| 111 |
| 112 blink::WebMediaConstraints constraints; |
| 113 constraints.initialize(); |
| 114 web_stream->addTrack(MediaStreamVideoTrack::CreateVideoTrack( |
| 115 media_stream_source.release(), |
| 116 constraints, |
| 117 MediaStreamVideoSource::ConstraintsCallback(), |
| 118 true)); |
| 119 return true; |
| 120 } |
| 121 |
121 } // namespace content | 122 } // namespace content |
OLD | NEW |