Recently I encountered several interesting projects: jssip , node-webkit . By the way, a fresh original toast was born. Since for its implementation it is enough just to connect ready-made components, I quickly wrote a small cross-platform application, opened the source code. Here's what happened:
Download here . The article will reveal some details. The project used the following libraries and tools:
JsSIP is a well-designed library from developers who quickly respond to bug reports.
qooxdoo - a la desktop GUI library, well organized work with "windows", ideal for programmers of the "old" school - no html markup, all widgets are created from javascript.
node-webkit - allows you to make stand-alone applications for all platforms, which, among other benefits, unlike the browser, will not bother the user with endless requests to allow the use of the camera.
')
The set almost solves the problem except for one thing - the conference should be multi-user.
Since jssip only provides a peer-to-peer connection, we had to connect each user with each in two directions. It turns out a little ineffectively, the number of outgoing connections is one less than the number of participants. If a smart RTP server were used, he would take the job of distributing video streams to himself. And then, respectively, you would need only one outgoing video stream to the server, and you can monitor and manage the conference. But this scheme also has its drawbacks, the server is not rubber and it is much more complicated.
It is necessary to somehow maintain consistent lists of participants, in addition to be able to invite a new user or ask to chat. For these purposes, I made a small protocol, literally three service messages. They are transmitted in json format in the body of the SIP MESSAGE message. It looks like this:
You will need to try to use your own message, the standard allows it.
Those who want to dig into the source will find them on github . To build qooxdoo applications you need to run generate.py build , python 2.7 is required.