Привет. Мы полностью переписали мобильную версию Хабра. Теперь все работает быстрее и выглядит современнее.

Многопользовательский видео чат

vf1 6 марта 2013 в 22:20 32,5k
Недавно столкнулся с несколькими интересными проектами: jssip, node-webkit. Весьма кстати родилась свежая оригинальная тост идея. Так как для ее реализации достаточно лишь соединить готовые компоненты, оперативно написал небольшое кросс-платформенное приложение, исходники открыл. Вот что получилось:



Скачать можно здесь. В статье раскрою некоторые детали.

В проекте использовались следующие библиотеки и инструменты:
  1. JsSIP – библиотека с хорошим дизайном от быстро реагирующих на багрепорты разработчиков.
  2. qooxdoo – а-ля десктоп GUI библиотека, хорошо организована работа с «окнами», идеально подходит программистам «старой» школы — никакой html разметки, все виджиты создаются из javascript.
  3. node-webkit – дает возможность сделать stand-alone приложения для всех платформ, которое кроме прочих плюсов, в отличии от браузера, не будет донимать пользователя бесконечными просьбами разрешить использовать камеру.


Набор почти решает задачу за исключением одного — конференция должна быть многопользовательская.

Так как jssip обеспечивает только peer-to-peer соединение, пришлось соединить каждого пользователя с каждым в двух направлениях. Получается немного не эффективно, число исходящих соединение на один меньше, чем число участников. Если бы использовался умный RTP сервер, он бы взял работу по распределению видео потоков на себя. И тогда соответственно понадобился бы только один исходящий видео поток к серверу, и можно контролировать и управлять конференцией. Но у этой схемы тоже есть свои недостатки, сервер не резиновый и она намного сложнее.


Нужно каким-то образом поддерживать согласованными списки участников, кроме того иметь возможность пригласить нового пользователя или попроситься в чат. Для этих целей я сделал небольшой протокол, буквально три сервисных сообщения. Они передаются в json формате в теле SIP сообщения MESSAGE. Выглядит примерно так:
{
  'version': '0.9.0',
  'action': 'update',
  'conferenceId': 'dj3al712',
  'participants': [ 'user1@sipserver.local', 'user2@sipserver.local', ... 'userN@sipserver.local' ]
}
Нужно будет попробовать использовать собственное сообщение, стандарт это позволяет.

Желающие покопаться в исходниках найдут их на github. Для сборки qooxdoo приложения нужно выполнить generate.py build, требуется python 2.7.
Проголосовать:
+36
Сохранить: