Я пока не сумел побороть сигнальный сервер при написании многопользовательского чата, поэтому стал искать уже готовые фреймворки. Самым легким из всех мне показался EasyRTC.
Согласно инструкции всё устанавливается очень просто, как на Windows, так и на Linux:
1. Скачиваем и устанавливаем Node.js.
2. С Github’а скачиваем easyRTC, заходим в скачанную папку.
3. Набираем в консоли npm install (напомню в директории скачанной папки easyRTC) установятся необходимые пакеты для Node.js
4.Там же в консоли стартуем сервер: node server.js.
Всё!!! Теперь по умолчанию на пору 8080 вашего сервера запущены примеры использования easyRTC.
Для написания собственного чата, необходимо подключить socket.io.js и easyrtc.js на вашей странице, при использовании nginx можно «проксировать» следующим образом:
В фале конфигурации:
upstream backendEasyRTC { server 127.0.0.1:9080; } В секции server: location /socket.io { #proxy_pass http:// 127.0.0.1:9080; proxy_pass http://backendEasyRTC; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; }
Socket.io.js и easyrtc.js ( который находится в папке api) закинуть в статику соответственно.
Далее необходимо настроить easyRTC:
В файле easyrtc.js изменить easyRTC.webSocket на:
easyRTC.webSocket = io.connect('http://Ваш сервер');
и в файле конфигурации config.js (находится там же где и server.js) поменять стандартный порт на ваш, в моем случае 9080:
config.httpPort = 9080;
На своей странице подключите необходимые файлы
<script src="/socket.io/socket.io.js"></script> <script type="text/javascript" src="/static/js/easyrtc.js"></script>
Прописываем теги видео:
Для удаленных пользователей
<video autoplay="autoplay" id="remoteVideo1" ></video> <video autoplay="autoplay" id="remoteVideo2" ></video>
И для отображения себя
<video autoplay="autoplay" id="localVideo" muted="muted" volume="0" ></video>
Запускаем easyRTC при старте страницы:
var maxCALLERS = 3; //Количество человек в комнате window.onload - function(){ easyRTC.setLoggedInListener(callEverybodyElse); // Срабатывает при появлении нового потока webrtc easyRTC.initManaged("myroom", "localVideo", ["remoteVideo1", "remoteVideo2], loginSuccess); // myroom - имя комнаты где будут пользователи // localVideo - ваше видео // ["remoteVideo1", "remoteVideo2] - куда выводить потоки удалённых пользователей. // loginSuccess - в ней можно узнать ваш id потока } function loginSuccess(easyRTCId){ console.log('My id '+ easyRTCId); //Пригодится для дальнейшей идентификации пользователя } function callEverybodyElse(otherPeople) { easyRTC.setLoggedInListener(null); var list = []; var connectCount = 0; for(var i in otherPeople ) { list.push(i); } //По умолчанию новый поток является последним в массиве function establishConnection(position) { function callSuccess() { connectCount++; if( connectCount < maxCALLERS && position > 0) { establishConnection(position-1); } } function callFailure() { easyRTC.showError("CALL-REJECTED", "Rejected by other party"); if( connectCount < maxCALLERS && position > 0) { establishConnection(position-1); } } easyRTC.call(list[position], callSuccess, callFailure); } if( list.length > 0) { establishConnection(list.length-1); } }
Дополнительно можно указать порт подключения:
easyRTC.setSocketUrl(":9088");
Битрейт видео:
easyRTC.setVideoBandwidth(40);
Разрешение видео:
easyRTC.setVideoDims(320,180); -- разрешение видео
Это минимальное, что необходимо для многопользовательского чата.
Дополнительно в файлах config.js easyrtc.js, а также на Github и Google Groups.
Спасибо если дочитали до конца.
Сайт: http://www.easyrtc.com/
Github: https://github.com/priologic/easyrtc
Google Groups: https://groups.google.com/d/forum/easyrtc
Автор: KTOTAM