Creating a simple video conferencing application
In this tutorial we will start exploring how to use the rtc-quickconnect module to create a simple video conferencing application.
Prior to completing this example it's recommended that you complete
the Creating a simple chat application tutorial
as it will cover some of the fundamentals of how rtc-quickconnect
works.
Here is an example that captures local video and allows one or more peers to connect via video conferencing:
var quickconnect = require('rtc-quickconnect');
var media = require('rtc-media');
var crel = require('crel');
// create containers for our local and remote video
var local = crel('div', { class: 'local' });
var remote = crel('div', { class: 'remote' });
var media;
var peerMedia = {};
// capture local media
var localMedia = media();
// once media is captured, connect
localMedia.once('capture', function(stream) {
quickconnect('http://rtc.io/switchboard/', { room: 'conftest' })
// broadcast our captured media to other participants in the room
.addStream(stream)
// when a peer is connected (and active) pass it to us for use
.on('call:started', function(id, pc, data) {
console.log('peer connected: ', id);
// render the remote streams
pc.getRemoteStreams().forEach(renderRemote(id));
})
// when a peer leaves, remove teh media
.on('call:ended', function(id) {
// remove media for the target peer from the dom
(peerMedia[id] || []).splice(0).forEach(function(el) {
el.parentNode.removeChild(el);
});
})
});
// render the local media
localMedia.render(local);
// render a remote video
function renderRemote(id) {
// create the peer media list
peerMedia[id] = peerMedia[id] || [];
return function(stream) {
peerMedia[id] = peerMedia[id].concat(media(stream).render(remote));
}
}
/* extra code to handle dynamic html and css creation */
// add some basic styling
document.head.appendChild(crel('style', [
'.local { position: absolute; right: 10px; }',
'.local video { max-width: 200px; }'
].join('\n')));
// add the local and remote elements
document.body.appendChild(local);
document.body.appendChild(remote);