Meeting.js » A WebRTC Library for Media Streaming
HOME © Muaz Khan . @WebRTCWeb . Github . Latest issues . 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)
How to use Meeting.js?
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script> <script src="https://www.webrtc-experiment.com/CodecsHandler.js"></script> <script src="https://www.webrtc-experiment.com/IceServersHandler.js"></script> <script src="https://www.webrtc-experiment.com/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('meeting room name');
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!
Suggestions
- RTCMultiConnection.js can be used for HD screen sharing; HD audio/video streaming; fastest file sharing; and writing entire skype-like app in the browser!