Skip to content

Commit bc9aab4

Browse files
committed
Added streaming
1 parent acc4761 commit bc9aab4

File tree

8 files changed

+498
-60
lines changed

8 files changed

+498
-60
lines changed

img/person_dark.png

4.03 KB
Loading

img/person_light.png

717 Bytes
Loading

js/rtc-controller.js

Lines changed: 76 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,24 @@ var CONTROLLER = window.CONTROLLER = function(phone, stream){
2121
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2222
var readycb = function(session){};
2323
var receivecb = function(session){};
24+
var authcb = function(){};
2425
var videotogglecb = function(session, isEnabled){};
2526
var audiotogglecb = function(session, isEnabled){};
2627

2728
CONTROLLER.ready = function(cb) { readycb = cb };
29+
CONTROLLER.auth = function(cb) { authcb = cb }
2830
CONTROLLER.receive = function(cb) { receivecb = cb };
2931
CONTROLLER.videoToggled = function(cb) { videotogglecb = cb };
3032
CONTROLLER.audioToggled = function(cb) { audiotogglecb = cb };
3133

3234
phone.ready(function(){ readycb() });
3335
phone.receive(function(session){
34-
CONTROLLER.manageUsers(session);
36+
manage_users(session);
3537
receivecb(session);
3638
});
37-
3839

3940
// Require some boolean form of authentication to accept a call
40-
CONTROLLER.postAuth = function(session, auth, cb){
41+
CONTROLLER.answerCall = function(session, auth, cb){
4142
auth(acceptCall(session, cb), session);
4243
}
4344

@@ -51,21 +52,65 @@ var CONTROLLER = window.CONTROLLER = function(phone, stream){
5152
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
5253
// Setup broadcasting, your screen to all.
5354
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
54-
CONTROLLER.broadcast = function(vid){
55+
var streamreceivecb = function(m){};
56+
var streamprescb = function(m){};
57+
var stream_name = "";
58+
59+
60+
CONTROLLER.streamPresence = function(cb){ streamprescb = cb; }
61+
CONTROLLER.streamReceive = function(cb){ streamreceivecb = cb; }
62+
63+
function broadcast(vid){
5564
var video = document.createElement('video');
65+
5666
video.src = URL.createObjectURL(phone.mystream);
5767
video.volume = 0.0;
5868
video.play();
59-
vid.innerHTML=""
60-
vid.appendChild(video);
61-
vid.style.cssText = "-moz-transform: scale(-1, 1); \
62-
-webkit-transform: scale(-1, 1); -o-transform: scale(-1, 1); \
63-
transform: scale(-1, 1); filter: FlipH;";
69+
//vid.innerHTML=""
70+
vid.setAttribute( 'data-number', phone.number() );
71+
vid.style.cssText ="-moz-transform: scale(-1, 1); \
72+
-webkit-transform: scale(-1, 1); -o-transform: scale(-1, 1); \
73+
transform: scale(-1, 1); filter: FlipH;";
74+
vid.appendChild(video);
6475
};
6576

77+
function stream_subscribe(name){
78+
var ch = (name ? name : phone.number()) + "-stream";
79+
pubnub.subscribe({
80+
channel : ch,
81+
message : streamreceivecb,
82+
presence : streamprescb,
83+
connect : function() { stream_name = ch; console.log("Streaming channel " + ch); }
84+
});
85+
}
86+
87+
CONTROLLER.stream = function(){
88+
stream_subscribe();
89+
}
90+
91+
CONTROLLER.joinStream = function(name){
92+
stream_subscribe(name);
93+
publishCtrl(controlChannel(name), "userJoin", phone.number());
94+
}
95+
96+
CONTROLLER.send = function( message, number ) {
97+
if (isStream) return stream_message(message);
98+
phone.send(message, number);
99+
};
100+
101+
function stream_message(message){
102+
if (!stream_name) return; // Not in a stream
103+
pubnub.publish({
104+
channel: stream_name,
105+
message: msg,
106+
callback : function(m){console.log(m)}
107+
});
108+
}
109+
110+
66111
// Give it a div and it will set up the thumbnail image
67-
CONTROLLER.registerThumbnailHolder = function(thumbnailHolder){
68-
CONTROLLER.broadcast(thumbnailHolder);
112+
CONTROLLER.addLocalStream = function(streamHolder){
113+
broadcast(streamHolder);
69114
};
70115

71116
CONTROLLER.dial = function(number){ // Authenticate here??
@@ -117,26 +162,30 @@ transform: scale(-1, 1); filter: FlipH;";
117162
});
118163
};
119164

120-
CONTROLLER.manageUsers = function(session){
165+
CONTROLLER.isStreaming = function(number, cb){
166+
CONTROLLER.isOnline(number+"-stream", cb);
167+
};
168+
169+
function manage_users(session){
121170
if (session.number == phone.number()) return; // Do nothing if it is self.
122-
console.log(phone.number());
123-
console.log(session.number);
124171
var idx = findWithAttr(userArray, "number", session.number); // Find session by number
125172
if (session.closed){
126173
if (idx != -1) userArray.splice(idx, 1)[0]; // User leaving
127174
} else { // New User added to stream/group
128175
if (idx == -1) { // Tell everyone in array of new user first, then add to array.
129-
if (!isStream) {
130-
publishCtrlAll("userJoin", session.number);
131-
}
176+
if (!isStream) publishCtrlAll("userJoin", session.number);
132177
userArray.push(session);
133178
}
134179
}
135180
userArray = userArray.filter(function(s){ return !s.closed; }); // Clean to only open talks
136181
console.log(userArray);
137182
}
138183

139-
function addToGroupChat(number){
184+
function add_to_stream(number){
185+
phone.dial(number);
186+
}
187+
188+
function add_to_group(number){
140189
var session = phone.dial(number, get_xirsys_servers()); // Dial Number
141190
if (!session) return; // No Dupelicate Dialing Allowed
142191
}
@@ -159,7 +208,7 @@ transform: scale(-1, 1); filter: FlipH;";
159208
}
160209

161210
function subscribe(){
162-
pubnub.subscribe({
211+
pubnub.subscribe({
163212
channel : ctrlChan,
164213
message : receive,
165214
connect : function() { console.log("Subscribed to " + ctrlChan); }
@@ -168,8 +217,13 @@ transform: scale(-1, 1); filter: FlipH;";
168217

169218
function receive(m){
170219
switch(m.type) {
220+
case "userCall":
221+
callAuth(m.data);
222+
break;
171223
case "userJoin":
172-
addToGroupChat(m.data);
224+
alert(isStream);
225+
if (isStream) add_to_stream(m.data); // JOIN STREAM HERE!
226+
else add_to_group(m.data);
173227
break;
174228
case "userLeave":
175229
var idx = findWithAttr(userArray, "number", m.data);
@@ -178,18 +232,15 @@ transform: scale(-1, 1); filter: FlipH;";
178232
case "userVideo":
179233
var idx = findWithAttr(userArray, "number", m.data.user);
180234
var vidEnabled = m.data.video;
181-
if (idx != -1)
182-
videotogglecb(userArray[idx], vidEnabled);
235+
if (idx != -1) videotogglecb(userArray[idx], vidEnabled);
183236
break;
184237
case "userAudio":
185238
var idx = findWithAttr(userArray, "number", m.data.user);
186239
var audEnabled = m.data.audio;
187-
if (idx != -1)
188-
audiotogglecb(userArray[idx], audEnabled);
240+
if (idx != -1) audiotogglecb(userArray[idx], audEnabled);
189241
break;
190242
}
191243
console.log(m);
192-
console.log(userArray);
193244
}
194245

195246
function findWithAttr(array, attr, value) {

0 commit comments

Comments
 (0)