Meeting.js » A WebRTC Library for Media Streaming
Copyright © 2013 Muaz Khan<@muazkh> » @WebRTC Experiments » Google+ » What's New?
Wanna try yourself?
You! |
Remote Peers |
- Mesh networking model is implemented to open multiple peer connections i.e. interconnected peer connections
- Maximum peer connections limit in mesh-networking is 256 (on chrome)
Feedback
How to use Meeting.js?
<script src="https://www.webrtc-experiment.com/meeting/meeting.js"></script>
var meeting = new Meeting('meeting-unique-id'); // on getting local or remote streams meeting.onaddstream = function(e) { // e.type == 'local' ---- it is local media stream // e.type == 'remote' --- it is remote media stream document.body.appendChild(e.video); }; // custom signaling channel // you can use each and every signaling channel // any websocket, socket.io, or XHR implementation // any SIP server // anything! etc. meeting.openSignalingChannel = function(callback) { return io.connect().on('message', callback); }; // check pre-created meeting rooms // it is useful to auto-join // or search pre-created sessions meeting.check(); document.getElementById('setup-new-meeting').onclick = function() { meeting.setup('meeting room name'); }; // if someone leaves; just remove his video meeting.onuserleft = function(userid) { var video = document.getElementById(userid); if(video) video.parentNode.removeChild(video); }; // to leave a meeting room meeting.leave();
How it works?
Huge bandwidth and CPU-usage out of multi-peers and number of RTP-ports
To understand it better; assume that 10 users are sharing video in a group. 40 RTP-ports i.e. streams will be created for each user. All streams are expected to be flowing concurrently; which causes blur video experience and audio lose/noise (echo) issues.
For each user:
- 10 RTP ports are opened to send video upward i.e. for outgoing video streams
- 10 RTP ports are opened to send audio upward i.e. for outgoing audio streams
- 10 RTP ports are opened to receive video i.e. for incoming video streams
- 10 RTP ports are opened to receive audio i.e. for incoming audio streams
Maximum bandwidth used by each video RTP port (media-track) is about 1MB; which can be controlled using "b=AS" session description parameter values. In two-way video-only session; 2MB bandwidth is used by each peer; otherwise; a low-quality blurred video will be delivered.
// removing existing bandwidth lines sdp = sdp.replace( /b=AS([^\r\n]+\r\n)/g , ''); // setting "outgoing" audio RTP port's bandwidth to "50kbit/s" sdp = sdp.replace( /a=mid:audio\r\n/g , 'a=mid:audio\r\nb=AS:50\r\n'); // setting "outgoing" video RTP port's bandwidth to "256kbit/s" sdp = sdp.replace( /a=mid:video\r\n/g , 'a=mid:video\r\nb=AS:256\r\n');
Possible issues:
- Blurry video experience
- Unclear voice and audio lost
- Bandwidth issues / slow streaming / CPU overwhelming
Solution? Obviously a media server!