WebRTC Meeting i.e. Video-Conferencing / Demo
- Mesh networking model is implemented to open 1:1 multiple peer connections i.e. interconnected peer connections
- Maximum peer connections limit in mesh-networking is 256 (on chrome)
1:1 multiple is explained here: WebRTC RTP Usage
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script src="https://cdn.webrtc-experiment.com/CodecsHandler.js"></script>
<script src="https://cdn.webrtc-experiment.com/IceServersHandler.js"></script>
<script src="https://cdn.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);
};
// 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');
};
You can use check
method like this:
document.getElementById('join-meeting').onclick = function() {
meeting.check('meeting room name');
};
meeting.userid = 'username';
You can use each and every signaling channel:
- SIP-over-WebSockets
- WebSocket over Node.js/PHP/etc.
- Socket.io over Node.js/etc.
- XMPP/etc.
- XHR-POST-ing
meeting.openSignalingChannel = function(callback) {
return io.connect().on('message', callback);
};
If you want to write socket.io over node.js
; here is the server code:
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
socket.broadcast.emit('message', data);
});
});
That's it! Isn't it easiest method ever!
Want to use Firebase
for signaling?
// "chat" is your firebase id
meeting.firebase = 'chat';
More details here: https://github.com/muaz-khan/WebRTC-Experiment/blob/master/Signaling.md
meeting.onmeeting = function(room) {
var li = document.createElement('li');
li.setAttribute('user-id', room.userid);
li.setAttribute('room-id', room.roomid);
li.onclick = function() {
var room = {
userid: this.getAttribute('user-id'),
roomid: this.getAttribute('room-id')
};
meeting.meet(room);
};
};
onmeeting
is called for each new meeting; and meet
method allows you manually join a meeting room.
meeting.leave();
Participants' presence can be detected using onuserleft
:
// if someone leaves; just remove his video
meeting.onuserleft = function(userid) {
var video = document.getElementById(userid);
if(video) video.parentNode.removeChild(video);
};
It is called both for local
and remote
media streams. It returns:
video
: i.e.HTMLVideoElement
objectstream
: i.e.MediaStream
objectuserid
: i.e. id of the user stream coming fromtype
: i.e. type of the stream e.g.local
orremote
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);
};
This WebRTC Meeting experiment works fine on following web-browsers:
Browser | Support |
---|---|
Firefox | All Releases |
Google Chrome | All Releases |
Android | Chrome/Firefox/Opera/Cordova/etc. |
Safari | version 11+ for both MacOSX and iOS10+ |
Edge | version 16+ |
WebRTC Meeting is released under MIT licence . Copyright (c) Muaz Khan.