OLD | NEW |
(Empty) | |
| 1 var RTCPeerConnection = null; |
| 2 var getUserMedia = null; |
| 3 var attachMediaStream = null; |
| 4 var reattachMediaStream = null; |
| 5 var webrtcDetectedBrowser = null; |
| 6 var webrtcDetectedVersion = null; |
| 7 |
| 8 function trace(text) { |
| 9 // This function is used for logging. |
| 10 if (text[text.length - 1] == '\n') { |
| 11 text = text.substring(0, text.length - 1); |
| 12 } |
| 13 console.log((performance.now() / 1000).toFixed(3) + ": " + text); |
| 14 } |
| 15 |
| 16 if (navigator.mozGetUserMedia) { |
| 17 console.log("This appears to be Firefox"); |
| 18 |
| 19 webrtcDetectedBrowser = "firefox"; |
| 20 |
| 21 webrtcDetectedVersion = |
| 22 parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]); |
| 23 |
| 24 // The RTCPeerConnection object. |
| 25 RTCPeerConnection = mozRTCPeerConnection; |
| 26 |
| 27 // The RTCSessionDescription object. |
| 28 RTCSessionDescription = mozRTCSessionDescription; |
| 29 |
| 30 // The RTCIceCandidate object. |
| 31 RTCIceCandidate = mozRTCIceCandidate; |
| 32 |
| 33 // Get UserMedia (only difference is the prefix). |
| 34 // Code from Adam Barth. |
| 35 getUserMedia = navigator.mozGetUserMedia.bind(navigator); |
| 36 |
| 37 // Creates iceServer from the url for FF. |
| 38 createIceServer = function(url, username, password) { |
| 39 var iceServer = null; |
| 40 var url_parts = url.split(':'); |
| 41 if (url_parts[0].indexOf('stun') === 0) { |
| 42 // Create iceServer with stun url. |
| 43 iceServer = { 'url': url }; |
| 44 } else if (url_parts[0].indexOf('turn') === 0 && |
| 45 (url.indexOf('transport=udp') !== -1 || |
| 46 url.indexOf('?transport') === -1)) { |
| 47 // Create iceServer with turn url. |
| 48 // Ignore the transport parameter from TURN url. |
| 49 var turn_url_parts = url.split("?"); |
| 50 iceServer = { 'url': turn_url_parts[0], |
| 51 'credential': password, |
| 52 'username': username }; |
| 53 } |
| 54 return iceServer; |
| 55 }; |
| 56 |
| 57 // Attach a media stream to an element. |
| 58 attachMediaStream = function(element, stream) { |
| 59 console.log("Attaching media stream"); |
| 60 element.mozSrcObject = stream; |
| 61 element.play(); |
| 62 }; |
| 63 |
| 64 reattachMediaStream = function(to, from) { |
| 65 console.log("Reattaching media stream"); |
| 66 to.mozSrcObject = from.mozSrcObject; |
| 67 to.play(); |
| 68 }; |
| 69 |
| 70 // Fake get{Video,Audio}Tracks |
| 71 MediaStream.prototype.getVideoTracks = function() { |
| 72 return []; |
| 73 }; |
| 74 |
| 75 MediaStream.prototype.getAudioTracks = function() { |
| 76 return []; |
| 77 }; |
| 78 } else if (navigator.webkitGetUserMedia) { |
| 79 console.log("This appears to be Chrome"); |
| 80 |
| 81 webrtcDetectedBrowser = "chrome"; |
| 82 webrtcDetectedVersion = |
| 83 parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2]); |
| 84 |
| 85 // Creates iceServer from the url for Chrome. |
| 86 createIceServer = function(url, username, password) { |
| 87 var iceServer = null; |
| 88 var url_parts = url.split(':'); |
| 89 if (url_parts[0].indexOf('stun') === 0) { |
| 90 // Create iceServer with stun url. |
| 91 iceServer = { 'url': url }; |
| 92 } else if (url_parts[0].indexOf('turn') === 0) { |
| 93 if (webrtcDetectedVersion < 28) { |
| 94 // For pre-M28 chrome versions use old TURN format. |
| 95 var url_turn_parts = url.split("turn:"); |
| 96 iceServer = { 'url': 'turn:' + username + '@' + url_turn_parts[1], |
| 97 'credential': password }; |
| 98 } else { |
| 99 // For Chrome M28 & above use new TURN format. |
| 100 iceServer = { 'url': url, |
| 101 'credential': password, |
| 102 'username': username }; |
| 103 } |
| 104 } |
| 105 return iceServer; |
| 106 }; |
| 107 |
| 108 // The RTCPeerConnection object. |
| 109 RTCPeerConnection = webkitRTCPeerConnection; |
| 110 |
| 111 // Get UserMedia (only difference is the prefix). |
| 112 // Code from Adam Barth. |
| 113 getUserMedia = navigator.webkitGetUserMedia.bind(navigator); |
| 114 |
| 115 // Attach a media stream to an element. |
| 116 attachMediaStream = function(element, stream) { |
| 117 if (typeof element.srcObject !== 'undefined') { |
| 118 element.srcObject = stream; |
| 119 } else if (typeof element.mozSrcObject !== 'undefined') { |
| 120 element.mozSrcObject = stream; |
| 121 } else if (typeof element.src !== 'undefined') { |
| 122 element.src = URL.createObjectURL(stream); |
| 123 } else { |
| 124 console.log('Error attaching stream to element.'); |
| 125 } |
| 126 }; |
| 127 |
| 128 reattachMediaStream = function(to, from) { |
| 129 to.src = from.src; |
| 130 }; |
| 131 |
| 132 // The representation of tracks in a stream is changed in M26. |
| 133 // Unify them for earlier Chrome versions in the coexisting period. |
| 134 if (!webkitMediaStream.prototype.getVideoTracks) { |
| 135 webkitMediaStream.prototype.getVideoTracks = function() { |
| 136 return this.videoTracks; |
| 137 }; |
| 138 webkitMediaStream.prototype.getAudioTracks = function() { |
| 139 return this.audioTracks; |
| 140 }; |
| 141 } |
| 142 |
| 143 // New syntax of getXXXStreams method in M26. |
| 144 if (!webkitRTCPeerConnection.prototype.getLocalStreams) { |
| 145 webkitRTCPeerConnection.prototype.getLocalStreams = function() { |
| 146 return this.localStreams; |
| 147 }; |
| 148 webkitRTCPeerConnection.prototype.getRemoteStreams = function() { |
| 149 return this.remoteStreams; |
| 150 }; |
| 151 } |
| 152 } else { |
| 153 console.log("Browser does not appear to be WebRTC-capable"); |
| 154 } |
OLD | NEW |