Skip to content

Commit

Permalink
Now merely upper-nodes are asked to rejoin; deeper nodes are merely r…
Browse files Browse the repository at this point in the history
  • Loading branch information
muaz-khan committed Feb 11, 2016
1 parent 56c4b63 commit 45064ee
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 100 deletions.
3 changes: 3 additions & 0 deletions Gruntfile.js
Expand Up @@ -30,6 +30,9 @@ module.exports = function(grunt) {
'dev/Plugin.EveryWhere.js',

'dev/RTCPeerConnection.js',
// 'dev/ios-hacks.js', // to support ios
// 'dev/CodecsHandler.js', // to force H264 or codecs other than opus

'dev/OnIceCandidateHandler.js',
'dev/IceServersHandler.js',
'dev/BandwidthHandler.js',
Expand Down
20 changes: 1 addition & 19 deletions RTCMultiConnection.js
@@ -1,4 +1,4 @@
// Last time updated: 2016-02-05 3:31:15 PM UTC
// Last time updated: 2016-02-11 6:44:44 AM UTC

// ______________________________
// RTCMultiConnection-v3.0 (Beta)
Expand Down Expand Up @@ -799,14 +799,6 @@

connection.direction = 'many-to-many';

Array.prototype.getStreamById = function(streamid) {
var stream;
this.forEach(function(_stream) {
if (_stream.streamid == streamid) stream = _stream;
});
return stream;
};

connection.removeStream = function(streamid) {
var stream;
connection.attachStreams.forEach(function(localStream) {
Expand Down Expand Up @@ -1289,16 +1281,6 @@
};
}

connection.getAllVideos = function(remoteUserId) {
var videos = [];
Array.prototype.slice.call(document.querySelectorAll('video')).forEach(function(video) {
if (video.getAttribute('data-userid') === remoteUserId) {
videos.push(video);
}
});
return videos;
}

connection.connectSocket = function(callback) {
connectSocket(callback);
};
Expand Down
10 changes: 5 additions & 5 deletions RTCMultiConnection.min.js

Large diffs are not rendered by default.

42 changes: 14 additions & 28 deletions Scalable-Broadcast.js
Expand Up @@ -103,6 +103,14 @@ module.exports = exports = function(socket, maxRelayLimitPerUser) {
if(!user) return;

if(user.isBroadcastInitiator === true) {
consoleLog({
'initiator-left': true,
'userid': user.userid,
'broadcastId': user.broadcastId,
'isBroadcastInitiator': user.isBroadcastInitiator,
'relayReceivers': Object.keys(user.relayReceivers)
});

// need to stop entire broadcast?
for(var n in users) {
var _user = users[n];
Expand Down Expand Up @@ -131,9 +139,6 @@ module.exports = exports = function(socket, maxRelayLimitPerUser) {
}

if(user.relayReceivers.length && user.isBroadcastInitiator === false) {
// todo: this causes "Maximum call stack size exceeded"
// need to find alternative solution
makeAllNestedUsersCanNotRelay(user.relayReceivers);
askNestedUsersToRejoin(user.relayReceivers);
}

Expand All @@ -149,31 +154,12 @@ function askNestedUsersToRejoin(relayReceivers) {
var usersToAskRejoin = [];

relayReceivers.forEach(function(receiver) {
receiver.socket.emit('rejoin-broadcast', receiver.broadcastId);

if(receiver.relayReceivers.length) {
askNestedUsersToRejoin(receiver.relayReceivers);
}
});
}
catch(e) {
consoleLog(e);
}
}

function makeAllNestedUsersCanNotRelay(relayReceivers) {
try {
relayReceivers.forEach(function(receiver) {
if(users[receiver.userid]) {
if(!!users[receiver.userid]) {
users[receiver.userid].canRelay = false;
users[receiver.userid].receivingFrom = null;
receiver.socket.emit('rejoin-broadcast', receiver.broadcastId);
}

if(receiver.relayReceivers.length) {
setTimeout(function() {
makeAllNestedUsersCanNotRelay(receiver.relayReceivers);
}, 2000);
}

});
}
catch(e) {
Expand Down Expand Up @@ -225,8 +211,8 @@ function getFirstAvailableBraodcater(broadcastId, maxRelayLimitPerUser) {
}
}

function consoleLog(arg) {
return; // comment this line for development testings
function consoleLog() {
// return; // comment this line for development testings

console.log(arg);
console.log(arguments);
}
27 changes: 22 additions & 5 deletions demos/Scalable-Broadcast.html
Expand Up @@ -114,9 +114,14 @@ <h1><a href="https://github.com/muaz-khan/WebRTC-Scalable-Broadcast">WebRTC Scal
</blockquote>

<script src="/socket.io/socket.io.js"></script>

<script>
// skipping xirsys servers
window.getExternalIceServers = false;
</script>

<!-- <script src="/RTCMultiConnection.min.js"></script> -->
<script src="https://cdn.webrtc-experiment.com/rmc3.min.js"></script>
<script src="/dist/rmc3.min.js"></script>

<script src="https://cdn.webrtc-experiment.com/RecordRTC.js"></script>
<script src="https://cdn.webrtc-experiment.com/ConcatenateBlobs.js"></script>
Expand Down Expand Up @@ -180,7 +185,9 @@ <h1><a href="https://github.com/muaz-khan/WebRTC-Scalable-Broadcast">WebRTC Scal

socket.on('broadcast-stopped', function(broadcastId) {
// alert('Broadcast has been stopped.');
location.reload();
// location.reload();
console.error('broadcast-stopped', broadcastId);
alert('This broadcast has been stopped.');
});

// this event is emitted when a broadcast is absent.
Expand All @@ -207,9 +214,12 @@ <h1><a href="https://github.com/muaz-khan/WebRTC-Scalable-Broadcast">WebRTC Scal
var videoPreview = document.getElementById('video-preview');

connection.onstream = function(event) {
if(connection.isInitiator && event.type !== 'local') {
return;
}

if(event.mediaElement) {
event.mediaElement.pause();
event.mediaElement.src = null;
delete event.mediaElement;
}

Expand Down Expand Up @@ -238,8 +248,15 @@ <h1><a href="https://github.com/muaz-khan/WebRTC-Scalable-Broadcast">WebRTC Scal
socket.emit('can-relay-broadcast');

connection.getAllParticipants().forEach(function(p) {
if(p !== event.userid) {
connection.disconnectWith(p);
if(p + '' != event.userid + '') {
var peer = connection.peers[p].peer;
peer.getLocalStreams().forEach(function(localStream) {
peer.removeStream(localStream);
});
peer.addStream(event.stream);
connection.dontAttachStream = true;
connection.renegotiate(p);
connection.dontAttachStream = false;
}
});
}
Expand Down
18 changes: 0 additions & 18 deletions dev/RTCMultiConnection.js
Expand Up @@ -790,14 +790,6 @@ function RTCMultiConnection(roomid, forceOptions) {

connection.direction = 'many-to-many';

Array.prototype.getStreamById = function(streamid) {
var stream;
this.forEach(function(_stream) {
if (_stream.streamid == streamid) stream = _stream;
});
return stream;
};

connection.removeStream = function(streamid) {
var stream;
connection.attachStreams.forEach(function(localStream) {
Expand Down Expand Up @@ -1280,16 +1272,6 @@ function RTCMultiConnection(roomid, forceOptions) {
};
}

connection.getAllVideos = function(remoteUserId) {
var videos = [];
Array.prototype.slice.call(document.querySelectorAll('video')).forEach(function(video) {
if (video.getAttribute('data-userid') === remoteUserId) {
videos.push(video);
}
});
return videos;
}

connection.connectSocket = function(callback) {
connectSocket(callback);
};
Expand Down
16 changes: 16 additions & 0 deletions dev/ios-hacks.js
@@ -0,0 +1,16 @@
// ios-hacks.js

document.addEventListener('deviceready', function() {
if (typeof cordova === 'undefined' || typeof cordova.plugins === 'undefined' || typeof cordova.plugins.iosrtc === 'undefined') return;
if (!window.device || window.device.platform !== 'iOS') return;

var iosrtc = cordova.plugins.iosrtc;
RTCPeerConnection = iosrtc.RTCPeerConnection;
RTCSessionDescription = iosrtc.RTCSessionDescription;
RTCIceCandidate = iosrtc.RTCIceCandidate;
MediaStream = iosrtc.MediaStream;
MediaStreamTrack = iosrtc.MediaStreamTrack;

iosrtc.debug.enable('iosrtc*');
iosrtc.registerGlobals();
}, false);
2 changes: 1 addition & 1 deletion dist/rmc3.fbr.min.js

Large diffs are not rendered by default.

20 changes: 1 addition & 19 deletions dist/rmc3.js
@@ -1,4 +1,4 @@
// Last time updated: 2016-02-05 3:31:15 PM UTC
// Last time updated: 2016-02-11 6:44:44 AM UTC

// ______________________________
// RTCMultiConnection-v3.0 (Beta)
Expand Down Expand Up @@ -799,14 +799,6 @@

connection.direction = 'many-to-many';

Array.prototype.getStreamById = function(streamid) {
var stream;
this.forEach(function(_stream) {
if (_stream.streamid == streamid) stream = _stream;
});
return stream;
};

connection.removeStream = function(streamid) {
var stream;
connection.attachStreams.forEach(function(localStream) {
Expand Down Expand Up @@ -1289,16 +1281,6 @@
};
}

connection.getAllVideos = function(remoteUserId) {
var videos = [];
Array.prototype.slice.call(document.querySelectorAll('video')).forEach(function(video) {
if (video.getAttribute('data-userid') === remoteUserId) {
videos.push(video);
}
});
return videos;
}

connection.connectSocket = function(callback) {
connectSocket(callback);
};
Expand Down
10 changes: 5 additions & 5 deletions dist/rmc3.min.js

Large diffs are not rendered by default.

0 comments on commit 45064ee

Please sign in to comment.