blob: 62978f20f47609ae0cc1ce766796d12c19cea9fc [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
21 // The RTCPeerConnection object.
22 RTCPeerConnection = mozRTCPeerConnection;
23
24 // The RTCSessionDescription object.
25 RTCSessionDescription = mozRTCSessionDescription;
26
27 // The RTCIceCandidate object.
28 RTCIceCandidate = mozRTCIceCandidate;
29
30 // Get UserMedia (only difference is the prefix).
31 // Code from Adam Barth.
32 getUserMedia = navigator.mozGetUserMedia.bind(navigator);
33
vikasmarwaha@webrtc.orgfddf6be2013-05-29 22:13:19 +000034 // Creates Turn Uri with new turn format.
35 createIceServer = function(turn_url, username, password) {
36 var iceServer = { 'url': turn_url,
37 'credential': password,
38 'username': username };
39 return iceServer;
40 };
41
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000042 // Attach a media stream to an element.
43 attachMediaStream = function(element, stream) {
44 console.log("Attaching media stream");
45 element.mozSrcObject = stream;
46 element.play();
47 };
48
49 reattachMediaStream = function(to, from) {
50 console.log("Reattaching media stream");
51 to.mozSrcObject = from.mozSrcObject;
52 to.play();
53 };
54
55 // Fake get{Video,Audio}Tracks
56 MediaStream.prototype.getVideoTracks = function() {
57 return [];
58 };
59
60 MediaStream.prototype.getAudioTracks = function() {
61 return [];
62 };
63} else if (navigator.webkitGetUserMedia) {
64 console.log("This appears to be Chrome");
65
66 webrtcDetectedBrowser = "chrome";
vikasmarwaha@webrtc.orgfddf6be2013-05-29 22:13:19 +000067 webrtcDetectedVersion =
68 parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2]);
69
70 // For pre-M28 chrome versions use old turn format, else use the new format.
71 if (webrtcDetectedVersion < 28) {
72 createIceServer = function(turn_url, username, password) {
73 var iceServer = { 'url': 'turn:' + username + '@' + turn_url,
74 'credential': password };
75 return iceServer;
76 };
77 } else {
78 createIceServer = function(turn_url, username, password) {
79 var iceServer = { 'url': turn_url,
80 'credential': password,
81 'username': username };
82 return iceServer;
83 };
84 }
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000085
86 // The RTCPeerConnection object.
87 RTCPeerConnection = webkitRTCPeerConnection;
braveyao@webrtc.org07db4a62013-03-06 03:35:03 +000088
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +000089 // Get UserMedia (only difference is the prefix).
90 // Code from Adam Barth.
91 getUserMedia = navigator.webkitGetUserMedia.bind(navigator);
92
93 // Attach a media stream to an element.
94 attachMediaStream = function(element, stream) {
vikasmarwaha@webrtc.org77ac8482013-04-25 23:22:03 +000095 if (typeof element.srcObject !== 'undefined') {
96 element.srcObject = stream;
97 } else if (typeof element.mozSrcObject !== 'undefined') {
98 element.mozSrcObject = stream;
99 } else if (typeof element.src !== 'undefined') {
100 element.src = URL.createObjectURL(stream);
101 } else {
102 console.log('Error attaching stream to element.');
103 }
vikasmarwaha@webrtc.org98fce152013-02-27 23:22:10 +0000104 };
105
106 reattachMediaStream = function(to, from) {
107 to.src = from.src;
108 };
109
110 // The representation of tracks in a stream is changed in M26.
111 // Unify them for earlier Chrome versions in the coexisting period.
112 if (!webkitMediaStream.prototype.getVideoTracks) {
113 webkitMediaStream.prototype.getVideoTracks = function() {
114 return this.videoTracks;
115 };
116 webkitMediaStream.prototype.getAudioTracks = function() {
117 return this.audioTracks;
118 };
119 }
120
121 // New syntax of getXXXStreams method in M26.
122 if (!webkitRTCPeerConnection.prototype.getLocalStreams) {
123 webkitRTCPeerConnection.prototype.getLocalStreams = function() {
124 return this.localStreams;
125 };
126 webkitRTCPeerConnection.prototype.getRemoteStreams = function() {
127 return this.remoteStreams;
128 };
129 }
130} else {
131 console.log("Browser does not appear to be WebRTC-capable");
132}