OLD | NEW |
| (Empty) |
1 /** | |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 // This file is cloned from samples/js/base/adapter.js | |
12 // Modify the original and do new copy instead of doing changes here. | |
13 | |
14 var RTCPeerConnection = null; | |
15 var getUserMedia = null; | |
16 var attachMediaStream = null; | |
17 var reattachMediaStream = null; | |
18 var webrtcDetectedBrowser = null; | |
19 var webrtcDetectedVersion = null; | |
20 | |
21 function trace(text) { | |
22 // This function is used for logging. | |
23 if (text[text.length - 1] == '\n') { | |
24 text = text.substring(0, text.length - 1); | |
25 } | |
26 console.log((performance.now() / 1000).toFixed(3) + ": " + text); | |
27 } | |
28 function maybeFixConfiguration(pcConfig) { | |
29 if (pcConfig == null) { | |
30 return; | |
31 } | |
32 for (var i = 0; i < pcConfig.iceServers.length; i++) { | |
33 if (pcConfig.iceServers[i].hasOwnProperty('urls')){ | |
34 pcConfig.iceServers[i]['url'] = pcConfig.iceServers[i]['urls']; | |
35 delete pcConfig.iceServers[i]['urls']; | |
36 } | |
37 } | |
38 } | |
39 | |
40 if (navigator.mozGetUserMedia) { | |
41 console.log("This appears to be Firefox"); | |
42 | |
43 webrtcDetectedBrowser = "firefox"; | |
44 | |
45 webrtcDetectedVersion = | |
46 parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1], 10); | |
47 | |
48 // The RTCPeerConnection object. | |
49 var RTCPeerConnection = function(pcConfig, pcConstraints) { | |
50 // .urls is not supported in FF yet. | |
51 maybeFixConfiguration(pcConfig); | |
52 return new mozRTCPeerConnection(pcConfig, pcConstraints); | |
53 } | |
54 | |
55 // The RTCSessionDescription object. | |
56 RTCSessionDescription = mozRTCSessionDescription; | |
57 | |
58 // The RTCIceCandidate object. | |
59 RTCIceCandidate = mozRTCIceCandidate; | |
60 | |
61 // Get UserMedia (only difference is the prefix). | |
62 // Code from Adam Barth. | |
63 getUserMedia = navigator.mozGetUserMedia.bind(navigator); | |
64 navigator.getUserMedia = getUserMedia; | |
65 | |
66 // Creates iceServer from the url for FF. | |
67 createIceServer = function(url, username, password) { | |
68 var iceServer = null; | |
69 var url_parts = url.split(':'); | |
70 if (url_parts[0].indexOf('stun') === 0) { | |
71 // Create iceServer with stun url. | |
72 iceServer = { 'url': url }; | |
73 } else if (url_parts[0].indexOf('turn') === 0) { | |
74 if (webrtcDetectedVersion < 27) { | |
75 // Create iceServer with turn url. | |
76 // Ignore the transport parameter from TURN url for FF version <=27. | |
77 var turn_url_parts = url.split("?"); | |
78 // Return null for createIceServer if transport=tcp. | |
79 if (turn_url_parts.length === 1 || | |
80 turn_url_parts[1].indexOf('transport=udp') === 0) { | |
81 iceServer = {'url': turn_url_parts[0], | |
82 'credential': password, | |
83 'username': username}; | |
84 } | |
85 } else { | |
86 // FF 27 and above supports transport parameters in TURN url, | |
87 // So passing in the full url to create iceServer. | |
88 iceServer = {'url': url, | |
89 'credential': password, | |
90 'username': username}; | |
91 } | |
92 } | |
93 return iceServer; | |
94 }; | |
95 | |
96 createIceServers = function(urls, username, password) { | |
97 var iceServers = []; | |
98 // Use .url for FireFox. | |
99 for (i = 0; i < urls.length; i++) { | |
100 var iceServer = createIceServer(urls[i], | |
101 username, | |
102 password); | |
103 if (iceServer !== null) { | |
104 iceServers.push(iceServer); | |
105 } | |
106 } | |
107 return iceServers; | |
108 } | |
109 | |
110 // Attach a media stream to an element. | |
111 attachMediaStream = function(element, stream) { | |
112 console.log("Attaching media stream"); | |
113 element.mozSrcObject = stream; | |
114 element.play(); | |
115 }; | |
116 | |
117 reattachMediaStream = function(to, from) { | |
118 console.log("Reattaching media stream"); | |
119 to.mozSrcObject = from.mozSrcObject; | |
120 to.play(); | |
121 }; | |
122 | |
123 // Fake get{Video,Audio}Tracks | |
124 if (!MediaStream.prototype.getVideoTracks) { | |
125 MediaStream.prototype.getVideoTracks = function() { | |
126 return []; | |
127 }; | |
128 } | |
129 | |
130 if (!MediaStream.prototype.getAudioTracks) { | |
131 MediaStream.prototype.getAudioTracks = function() { | |
132 return []; | |
133 }; | |
134 } | |
135 } else if (navigator.webkitGetUserMedia) { | |
136 console.log("This appears to be Chrome"); | |
137 | |
138 webrtcDetectedBrowser = "chrome"; | |
139 webrtcDetectedVersion = | |
140 parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2], 10); | |
141 | |
142 // Creates iceServer from the url for Chrome M33 and earlier. | |
143 createIceServer = function(url, username, password) { | |
144 var iceServer = null; | |
145 var url_parts = url.split(':'); | |
146 if (url_parts[0].indexOf('stun') === 0) { | |
147 // Create iceServer with stun url. | |
148 iceServer = { 'url': url }; | |
149 } else if (url_parts[0].indexOf('turn') === 0) { | |
150 // Chrome M28 & above uses below TURN format. | |
151 iceServer = {'url': url, | |
152 'credential': password, | |
153 'username': username}; | |
154 } | |
155 return iceServer; | |
156 }; | |
157 | |
158 // Creates iceServers from the urls for Chrome M34 and above. | |
159 createIceServers = function(urls, username, password) { | |
160 var iceServers = []; | |
161 if (webrtcDetectedVersion >= 34) { | |
162 // .urls is supported since Chrome M34. | |
163 iceServers = {'urls': urls, | |
164 'credential': password, | |
165 'username': username }; | |
166 } else { | |
167 for (i = 0; i < urls.length; i++) { | |
168 var iceServer = createIceServer(urls[i], | |
169 username, | |
170 password); | |
171 if (iceServer !== null) { | |
172 iceServers.push(iceServer); | |
173 } | |
174 } | |
175 } | |
176 return iceServers; | |
177 }; | |
178 | |
179 // The RTCPeerConnection object. | |
180 var RTCPeerConnection = function(pcConfig, pcConstraints) { | |
181 // .urls is supported since Chrome M34. | |
182 if (webrtcDetectedVersion < 34) { | |
183 maybeFixConfiguration(pcConfig); | |
184 } | |
185 return new webkitRTCPeerConnection(pcConfig, pcConstraints); | |
186 } | |
187 | |
188 // Get UserMedia (only difference is the prefix). | |
189 // Code from Adam Barth. | |
190 getUserMedia = navigator.webkitGetUserMedia.bind(navigator); | |
191 navigator.getUserMedia = getUserMedia; | |
192 | |
193 // Attach a media stream to an element. | |
194 attachMediaStream = function(element, stream) { | |
195 if (typeof element.srcObject !== 'undefined') { | |
196 element.srcObject = stream; | |
197 } else if (typeof element.mozSrcObject !== 'undefined') { | |
198 element.mozSrcObject = stream; | |
199 } else if (typeof element.src !== 'undefined') { | |
200 element.src = URL.createObjectURL(stream); | |
201 } else { | |
202 console.log('Error attaching stream to element.'); | |
203 } | |
204 }; | |
205 | |
206 reattachMediaStream = function(to, from) { | |
207 to.src = from.src; | |
208 }; | |
209 } else { | |
210 console.log("Browser does not appear to be WebRTC-capable"); | |
211 } | |
OLD | NEW |