OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <!-- | 3 <!-- |
4 Copyright (c) 2013 The Chromium Authors. All rights reserved. | 4 Copyright (c) 2013 The Chromium Authors. All rights reserved. |
5 Use of this source code is governed by a BSD-style license that can be | 5 Use of this source code is governed by a BSD-style license that can be |
6 found in the LICENSE file. | 6 found in the LICENSE file. |
7 --> | 7 --> |
8 <head> | 8 <head> |
9 <title>Video Effects Demo</title> | 9 <title>Video Effects Demo</title> |
10 <style> | 10 <style> |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 callButton.disabled = false; | 85 callButton.disabled = false; |
86 initEffect(); | 86 initEffect(); |
87 } | 87 } |
88 | 88 |
89 function start() { | 89 function start() { |
90 trace("Requesting local stream"); | 90 trace("Requesting local stream"); |
91 startButton.disabled = true; | 91 startButton.disabled = true; |
92 // Call into getUserMedia via the polyfill (adapter.js). | 92 // Call into getUserMedia via the polyfill (adapter.js). |
93 getUserMedia({audio:false, video:true}, | 93 getUserMedia({audio:false, video:true}, |
94 gotStream, function() {}); | 94 gotStream, function() {}); |
95 } | 95 } |
96 | 96 |
97 function onRegisterStreamDone() { | 97 function onRegisterStreamDone() { |
98 vidprocessedlocal.src = URL.createObjectURL(processedLocalstream); | 98 vidprocessedlocal.src = URL.createObjectURL(processedLocalstream); |
99 toggleEffectButton.disabled = false; | 99 toggleEffectButton.disabled = false; |
100 } | 100 } |
101 | 101 |
102 function HandleMessage(message_event) { | 102 function HandleMessage(message_event) { |
103 if (message_event.data) { | 103 if (message_event.data) { |
104 if (message_event.data == 'DoneRegistering') { | 104 if (message_event.data == 'DoneRegistering') { |
105 onRegisterStreamDone(); | 105 onRegisterStreamDone(); |
106 } else { | 106 } else { |
107 trace(message_event.data); | 107 trace(message_event.data); |
108 } | 108 } |
109 } | 109 } |
110 } | 110 } |
111 | 111 |
112 function initEffect() { | 112 function initEffect() { |
113 var url = URL.createObjectURL(localstream); | 113 var url = URL.createObjectURL(localstream); |
114 processedLocalstream = new webkitMediaStream([]); | 114 processedLocalstream = new MediaStream([]); |
115 var processedStreamUrl = URL.createObjectURL(processedLocalstream); | 115 var processedStreamUrl = URL.createObjectURL(processedLocalstream); |
116 effectsPlugin.postMessage( | 116 effectsPlugin.postMessage( |
117 'registerStream' + ' ' + url + ' ' + processedStreamUrl); | 117 'registerStream' + ' ' + url + ' ' + processedStreamUrl); |
118 } | 118 } |
119 | 119 |
120 function toggleEffect() { | 120 function toggleEffect() { |
121 effectsEnabled = !effectsEnabled; | 121 effectsEnabled = !effectsEnabled; |
122 if (effectsEnabled) { | 122 if (effectsEnabled) { |
123 toggleEffectButton.innerHTML = 'Disable Effect'; | 123 toggleEffectButton.innerHTML = 'Disable Effect'; |
124 effectsPlugin.postMessage('effectOn'); | 124 effectsPlugin.postMessage('effectOn'); |
125 } else { | 125 } else { |
126 toggleEffectButton.innerHTML = 'Enable Effect'; | 126 toggleEffectButton.innerHTML = 'Enable Effect'; |
127 effectsPlugin.postMessage('effectOff'); | 127 effectsPlugin.postMessage('effectOff'); |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 function call() { | 131 function call() { |
132 callButton.disabled = true; | 132 callButton.disabled = true; |
133 hangupButton.disabled = false; | 133 hangupButton.disabled = false; |
134 trace("Starting call"); | 134 trace("Starting call"); |
135 var servers = null; | 135 var servers = null; |
136 pc1 = new RTCPeerConnection(servers); | 136 pc1 = new RTCPeerConnection(servers); |
137 trace("Created local peer connection object pc1"); | 137 trace("Created local peer connection object pc1"); |
138 pc1.onicecandidate = iceCallback1; | 138 pc1.onicecandidate = iceCallback1; |
139 pc2 = new RTCPeerConnection(servers); | 139 pc2 = new RTCPeerConnection(servers); |
140 trace("Created remote peer connection object pc2"); | 140 trace("Created remote peer connection object pc2"); |
141 pc2.onicecandidate = iceCallback2; | 141 pc2.onicecandidate = iceCallback2; |
142 pc2.onaddstream = gotRemoteStream; | 142 pc2.onaddstream = gotRemoteStream; |
143 | 143 |
144 pc1.addStream(processedLocalstream); | 144 pc1.addStream(processedLocalstream); |
145 trace("Adding Local Stream to peer connection"); | 145 trace("Adding Local Stream to peer connection"); |
146 | 146 |
147 pc1.createOffer(gotDescription1); | 147 pc1.createOffer(gotDescription1); |
148 } | 148 } |
149 | 149 |
150 function gotDescription1(desc){ | 150 function gotDescription1(desc){ |
151 pc1.setLocalDescription(desc); | 151 pc1.setLocalDescription(desc); |
152 trace("Offer from pc1 \n" + desc.sdp); | 152 trace("Offer from pc1 \n" + desc.sdp); |
153 pc2.setRemoteDescription(desc); | 153 pc2.setRemoteDescription(desc); |
154 // Since the "remote" side has no media stream we need | 154 // Since the "remote" side has no media stream we need |
155 // to pass in the right constraints in order for it to | 155 // to pass in the right constraints in order for it to |
156 // accept the incoming offer of audio and video. | 156 // accept the incoming offer of audio and video. |
157 var sdpConstraints = {'mandatory': { | 157 var sdpConstraints = {'mandatory': { |
158 'OfferToReceiveAudio':true, | 158 'OfferToReceiveAudio':true, |
159 'OfferToReceiveVideo':true }}; | 159 'OfferToReceiveVideo':true }}; |
160 pc2.createAnswer(gotDescription2, null, sdpConstraints); | 160 pc2.createAnswer(gotDescription2, null, sdpConstraints); |
161 } | 161 } |
162 | 162 |
163 function gotDescription2(desc){ | 163 function gotDescription2(desc){ |
164 pc2.setLocalDescription(desc); | 164 pc2.setLocalDescription(desc); |
165 trace("Answer from pc2 \n" + desc.sdp); | 165 trace("Answer from pc2 \n" + desc.sdp); |
166 pc1.setRemoteDescription(desc); | 166 pc1.setRemoteDescription(desc); |
167 } | 167 } |
168 | 168 |
169 function hangup() { | 169 function hangup() { |
170 trace("Ending call"); | 170 trace("Ending call"); |
171 pc1.close(); | 171 pc1.close(); |
172 pc2.close(); | 172 pc2.close(); |
173 pc1 = null; | 173 pc1 = null; |
174 pc2 = null; | 174 pc2 = null; |
175 hangupButton.disabled = true; | 175 hangupButton.disabled = true; |
176 callButton.disabled = false; | 176 callButton.disabled = false; |
177 } | 177 } |
178 | 178 |
179 function gotRemoteStream(e){ | 179 function gotRemoteStream(e){ |
180 vidremote.src = URL.createObjectURL(e.stream); | 180 vidremote.src = URL.createObjectURL(e.stream); |
181 trace("Received remote stream"); | 181 trace("Received remote stream"); |
182 } | 182 } |
183 | 183 |
184 function iceCallback1(event){ | 184 function iceCallback1(event){ |
185 if (event.candidate) { | 185 if (event.candidate) { |
186 pc2.addIceCandidate(new RTCIceCandidate(event.candidate)); | 186 pc2.addIceCandidate(new RTCIceCandidate(event.candidate)); |
187 trace("Local ICE candidate: \n" + event.candidate.candidate); | 187 trace("Local ICE candidate: \n" + event.candidate.candidate); |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 function iceCallback2(event){ | 191 function iceCallback2(event){ |
192 if (event.candidate) { | 192 if (event.candidate) { |
193 pc1.addIceCandidate(new RTCIceCandidate(event.candidate)); | 193 pc1.addIceCandidate(new RTCIceCandidate(event.candidate)); |
194 trace("Remote ICE candidate: \n " + event.candidate.candidate); | 194 trace("Remote ICE candidate: \n " + event.candidate.candidate); |
195 } | 195 } |
196 } | 196 } |
197 | 197 |
198 function InitializePlugin() { | 198 function InitializePlugin() { |
199 effectsPlugin = document.getElementById('plugin'); | 199 effectsPlugin = document.getElementById('plugin'); |
200 effectsPlugin.addEventListener('message', HandleMessage, false); | 200 effectsPlugin.addEventListener('message', HandleMessage, false); |
201 } | 201 } |
202 | 202 |
203 document.addEventListener('DOMContentLoaded', InitializePlugin, false); | 203 document.addEventListener('DOMContentLoaded', InitializePlugin, false); |
204 </script> | 204 </script> |
205 </body> | 205 </body> |
206 </html> | 206 </html> |
207 | |
208 | |
OLD | NEW |