Meeting.js » A WebRTC Library for Media Streaming

HOME © Muaz Khan . @WebRTCWeb . Github . Latest issues . What's New?

Wanna try yourself?

You!

Remote Peers

  1. Mesh networking model is implemented to open multiple peer connections i.e. interconnected peer connections
  2. 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/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:

  1. 10 RTP ports are opened to send video upward i.e. for outgoing video streams
  2. 10 RTP ports are opened to send audio upward i.e. for outgoing audio streams
  3. 10 RTP ports are opened to receive video i.e. for incoming video streams
  4. 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:

  1. Blurry video experience
  2. Unclear voice and audio lost
  3. Bandwidth issues / slow streaming / CPU overwhelming

Solution? Obviously a media server!

Suggestions

  1. 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!

Feedback

Enter your email too; if you want "direct" reply!

Latest Updates