blob: 09352b8f58cd128a11b7f67ed62883b65faef985 [file] [log] [blame]
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +00001var RTCPeerConnection = null;
2var getUserMedia = null;
3var attachMediaStream = null;
4var reattachMediaStream = null;
5var webrtcDetectedBrowser = null;
vikasmarwaha@webrtc.orgfddf6be2013-05-29 22:13:19 +00006var webrtcDetectedVersion = null;
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +00007
vikasmarwaha@webrtc.orga856db22013-03-05 03:35:26 +00008function 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
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000016if (navigator.mozGetUserMedia) {
17 console.log("This appears to be Firefox");
18
19 webrtcDetectedBrowser = "firefox";
20
vikasmarwaha@webrtc.orgbb252562013-06-25 14:52:51 +000021 webrtcDetectedVersion =
22 parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]);
23
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000024 // 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
vikasmarwaha@webrtc.orgbb252562013-06-25 14:52:51 +000037 // 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 }
vikasmarwaha@webrtc.orgfddf6be2013-05-29 22:13:19 +000054 return iceServer;
55 };
56
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000057 // 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";
vikasmarwaha@webrtc.orgfddf6be2013-05-29 22:13:19 +000082 webrtcDetectedVersion =
83 parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2]);
84
vikasmarwaha@webrtc.orgbb252562013-06-25 14:52:51 +000085 // 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 };
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +0000107
108 // The RTCPeerConnection object.
109 RTCPeerConnection = webkitRTCPeerConnection;
braveyao@webrtc.org07db4a62013-03-06 03:35:03 +0000110
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +0000111 // 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) {
vikasmarwaha@webrtc.org77ac8482013-04-25 23:22:03 +0000117 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 }
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +0000126 };
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}