OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | |
2 // | |
3 // Use of this source code is governed by a BSD-style license | |
4 // that can be found in the LICENSE file in the root of the source | |
5 // tree. An additional intellectual property rights grant can be found | |
6 // in the file PATENTS. All contributing project authors may | |
7 // be found in the AUTHORS file in the root of the source tree. | |
8 // | |
9 var localStreams = []; | |
10 var remoteStreams = []; | |
11 | |
12 function ping(callback) { | |
13 callback("pong"); | |
14 } | |
15 | |
16 function getUserMedia(constraints, onSuccessCallback, onFailCallback){ | |
17 console.log("Getting user media."); | |
18 navigator.webkitGetUserMedia(constraints, | |
19 onSuccessCallbackWraper, onFailCallback); | |
20 | |
21 function onSuccessCallbackWraper(stream) { | |
22 console.log("GetUserMedia success."); | |
23 localStreams[stream.id] = stream; | |
24 onSuccessCallback(stream); | |
25 } | |
26 } | |
27 | |
28 function createPeerConnection(config, doneCallback, failCallback) { | |
29 console.log("Creating peer connection"); | |
30 var obj = {}; | |
31 var pc = new webkitRTCPeerConnection(config); | |
32 | |
33 expose(obj, pc, "close"); | |
34 expose(obj, pc, "createOffer"); | |
35 expose(obj, pc, "createAnswer"); | |
36 expose(obj, pc, "addEventListener"); | |
37 expose(obj, pc, "addIceCandidate", { 0: RTCIceCandidate}); | |
38 expose(obj, pc, "setRemoteDescription", { 0: RTCSessionDescription }); | |
39 expose(obj, pc, "setLocalDescription", { 0: RTCSessionDescription }); | |
40 | |
41 obj.addStream = function(stream) { | |
42 console.log("Adding local stream."); | |
43 var tempStream = localStreams[stream.id]; | |
44 if (!tempStream) { | |
45 console.log("Undefined stream!"); | |
46 return; | |
47 } | |
48 pc.addStream(tempStream); | |
49 }; | |
50 | |
51 // Return an array of Objects, each Object is a copy of RTCStateReport | |
52 // and has the following attributes (id, type, names, and stats). | |
53 // names: array originaly returned by calling RTCStateReport.names(). | |
54 // stats: dictionary of stat name as key and stat value as dictionary | |
55 // value. | |
56 obj.getStats = function(callback, mediaTrack) { | |
57 pc.getStats(onStatsReady, mediaTrack); | |
58 | |
59 function onStatsReady(stateResponse) { | |
60 var outputReports = []; | |
61 var reports = stateResponse.result(); | |
62 for (index in reports) { | |
63 var report = {}; | |
64 report.id = reports[index].id; | |
65 report.type = reports[index].type; | |
66 report.names = reports[index].names(); | |
67 report.stats = []; | |
68 populateStats(reports[index], report.stats); | |
69 | |
70 outputReports.push(report); | |
71 } | |
72 | |
73 callback(outputReports); | |
74 } | |
75 | |
76 function populateStats(report, stats) { | |
77 var names = report.names(); | |
78 for (index in names) { | |
79 stats.push({ | |
80 name: names[index], | |
81 stat: report.stat(names[index]), | |
82 }); | |
83 } | |
84 | |
85 } | |
86 }; | |
87 | |
88 pc.addEventListener('addstream', function(event) { | |
89 remoteStreams[event.stream.id] = event.stream; | |
90 }); | |
91 | |
92 doneCallback(obj); | |
93 }; | |
94 | |
95 function showStream(streamId, autoplay, muted) { | |
96 var stream = getStreamFromIdentifier_(streamId); | |
97 var video = document.createElement('video'); | |
98 video.autoplay = autoplay; | |
99 video.muted = muted; | |
100 document.body.appendChild(video); | |
101 video.src = URL.createObjectURL(stream); | |
102 console.log("Stream " + stream.id + " attached to video element"); | |
103 }; | |
104 | |
105 function getStreamFromIdentifier_(id) { | |
106 var tempStream = localStreams[id]; | |
107 if (tempStream) | |
108 return tempStream; | |
109 tempStream = remoteStreams[id]; | |
110 if (tempStream) | |
111 return tempStream; | |
112 console.log(id + " is not id for stream."); | |
113 return null; | |
114 }; | |
115 | |
116 function downloadFile(path, onSuccess, onError) { | |
117 var xhr = new XMLHttpRequest(); | |
118 function onResult() { | |
119 if (xhr.readyState != 4) | |
120 return; | |
121 | |
122 if (xhr.status != 200) { | |
123 onError("Download request failed!"); | |
124 return; | |
125 } | |
126 onSuccess(xhr.responseText); | |
127 } | |
128 | |
129 xhr.onreadystatechange = onResult; | |
130 xhr.open('GET', path, true); | |
131 xhr.send(); | |
132 }; | |
133 | |
134 connectToServer({ | |
135 ping: ping, | |
136 getUserMedia: getUserMedia, | |
137 createPeerConnection: createPeerConnection, | |
138 showStream: showStream, | |
139 downloadFile: downloadFile, | |
140 }); | |
OLD | NEW |