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

    Недавно столкнулся с несколькими интересными проектами: 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.
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 12
      +1
      Начало неплохое. Что будет, если все участники начнут одновременно говорить?)
        0
        Пи… Мы прерываем наше вещание :)
          +2
          Действительно, добавьте возможность назначать ведущего, который будет передавать право голоса — интерес к приложению сразу подрастёт!
            0
            Acoustic Echo Cancellation в WebRTC имеется, пробовал именно одновременно говорить — работает.
            0
            Если разовьёте — спрос будет.
            Аналог есть — но платен, зараза. www.iwowwe.com/product.html
            Пользовался чуть-чуть. Экран также делится на столько окошек, сколько человек в конференции, говорить могут все одновременно, все всё слышат. Если нужно — по кнопке можно отключить свою камеру и микрофон — меня никто не видит/не слышит, я вижу слышу всё
              0
              Неужели этим и реально кто-то пользуется?!

              Когда я ехал в электричке, один мужик настойчиво мне предлагал стать участником сетевого маркетинга для «пиара сего чуда». Он говорил заученными фразами с какой-то конференции и называл его «убийцей Skype».
                0
                Тоже встречал. Возможно сервис и хороший, но такая подача отталкивает.
                  0
                  Я настраивал доступ в одной из поселковых администраций сюда — www.videocontrolpanel.net/, судя по интернетам, это тоже самое. На этой площадке тестируется у них система видеоконференции района.
                  0
                  Ещё хорошо иметь возможность отключить кого-нибудь только со своей стороны (все его слышат, ты нет) — не хватает такой возможности в скайпе.
                    0
                    Есть свободные аналоги, но webrtc там пока только ожидается
                    0
                    Всё хотел найти предлог изучить node.js написав на нём что-то полезное. Теперь я знаю, что можно портировать на него. Спасибо!
                      0
                      Недавно обнаружил conversat.io многопользовательский видео чат с использованием WebRTC библиотеки. То ли еще будет…

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое