09.04.13
WebRTC. Пиринговый стриминг, не выходя из браузера! 09.04.13

Привет, %USERNAME%! Спустя пару недель с последней записки у меня таки проснулась совесть и я решил написать о своей текущей работе в области программирования. А расскажу я о перспективной технологии Web RealTime Communication, позволяющей браузерам обмениваться медиа-контентом по сетям p2p.

Интересующихся прошу под кат.

WebRTC.org встречает нас минималистичным оформлением, но морем информации. Я не буду рассказывать тебе об истории создания протокола и сопутствующего ему «обвеса», не буду говорить о том, как она крута и так далее, и тому подобное.

logo-webrtc

Я хочу рассказать о куда более интересной вещи: как это все заставить работать.

Итак, приступим!

Let’s the Magic begins!!

Как уже ясно из названия, использовать эту штуку мы будем для общения в реальном времени. Общения через веб- камеры. Да, без флеша. Да, без плагинов. Да, по пиринговым сетям. Удивлен? Вооот, и я тоже был удивлен, когда в ходе выполнения исследовательской работы наткнулся на это чудо.

Как мы видим, поддерживается технология и все нужные кодеки только в, как же это очевидно, Google Chrome. Ну, и в Mozilla Aurora, где оно работает ну совсем нестабильно. Это значит, что в близжайшие полгода клиентам придется пользоваться ради этой разработки хромом. На самом деле, не такая уж и потеря.

Но что- то я ушел от темы. Как я уже сказал выше, наткнулся на WebRTC я в ходе выполнения исследовательской работы по теме: «Создание веб- видеочата с использованием современных клиентских и серверных технологий». Первоначально предполагалось использовать флеш, но… Запара с медиасервером для RTMP выправила меня на путь истинный.

Отступая от темы, сейчас уже готов базовый функционал видеочата ViPeer: видеостриминг, текстовый чат, авторизация через соц. сети, личный кабинет( этого и предыдущего нет в stable- ветке) и организация многопользовательских конференций( за что жиды из Microsoft берут деньги в Skype). Посмотреть можно по адресу vipeer.ru.

Меньше слов, больше дела

И опять я заговорился. Для исследовательской работы изначально планировалось использование node.js, а потому библиотеки для WebRTC разыскивались именно для него. И они таки нашлись. Конечно же, на гитхабе.

Либа состоит из сервер- сайда( Node.js) WebRTC.io и клиент- сайда WebRTC.io-client. Последнее включается в script src. Эти две библиотеки позволяют за короткий срок получить вполне себе работоспособный видеочат с разделением клиентов по отдельным конференциям со встроенным текстовым чатом. По- большому счету, это делается за пару минут с помощью, опять же уже готового, webrtc.io-demo. Именно demo стал основой для ViPeer. По мере освоения мною nodejs, он был тотально переделан и оброс множеством полезных функций, вроде отображения списка пользователей в онлайне, авторизации etc.

Поскольку я не работал с чистым API WebRTC, а использовал библиотеку WebRTC.io, то и плясать буду от нее. И тебе рекомендую сделать так же: разобраться в либах всегда успеешь, а вот забить себе голову кучей полезностей получится не сразу, даже если оочень стараться.

Итак. Качаем все нужное на свой сервер и «взлетаем!» ©

Для начала, разберемся с сервером. Тот, что представлен в демо совсем не подходит для конфигурации моего VPS, а потому был переделан до такого:

Сие отличается от demo только наличием дополнительной строки nickname, ее значение, я думаю, очевидно.

Ии…. Все! Это весь сервер-сайд! Теперь мы можем запустить его из командной строки линупсов( или окошек) строкой node server.js. И любоваться на пустующую консоль..

Теперь займемся клиент- сайдом.

Что такое клиент? Клиент, в самом простом понимании- страничка, заходя куда мы получим алерт об использовании камеры и стримы от других пользователей. На ViPeer есть еще и красивая формочка на Twitter Bootstrap с предложением ввести никнейм и название конференции.

И vipeer.js, обслуживающий алерты, авторизацию, быстрый вход( при переходе по ссылке вида vipeer.ru/#conf_name поле «имя конференции» уже будет содержать значение хэша):

Хоть фактически  авторизации еще нет, но нужный функционал уже реализован функцией auth_saveData. Просто от делать нефиг :))

В случае, если ты введешь все верно, то скрипт редиректит тебя на vipeer.ru/vchat.html

Он, что очевидно, тоже сверстан на Twitter bootstrap

И самое вкусное: vipeer-chat.js. То, без чего все вышесказанное- пустой звук. Этот код, собственно, реализует функционал WebRTC, используя API библиотеки WebRTC.io-client

Во многом, код стабильной ветки похож на demo chat.js. Ненуачо? Я подумал и решил, что зачем менять и переписывать и без того хорошую штуку? Вот и я о том же.

Шутка ли, но это все. Да, это все, что нужно, что бы десятки пользователей могли одновременно общаться друг с другом по видеосвязи с щикарным качеством передачи, приличной скоростью и совсем не напрягая сервер, где стоит node.js. Кайф, да и только!

Я понимаю, что записка получилась скомканной и вообще не очень, но я обязательно исправлюсь.

Спасибо за внимание, %USERNAME%, чистого кода тебе и адекватных заказчиков!