Видеочат (webRTC) с Chrome to Chrome не работает

Я пытаюсь построить простой видеочат между двумя сверстниками. Это структура:

  • Сервер сигналов: в виртуальной машине (VirtualBox Centos 6) на том же компьютере.
  • Клиент A: ноутбук, Vista. Я использую мобильный телефон Samsung и USB-модем для доступа к (внешнему) Интернету.
  • Клиент B: ноутбук, windows 10. Я использую планшет Samsung и USB-модем для доступа к (внешнему) Интернету.
  • Когда я использую два клиента Firefox (https / wss, самозаверяющий сертификат), все в порядке.

Я использую Mozilla "45.0.1" и Chrome "49.0.2623.112 m"

Я использую код из https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling для сигнального сервера и клиентов с некоторыми изменениями

  • Когда я использую один клиент Chrome в локальной сети (localhost или локальный IP, https / wss) и другой клиент Chrome (https / wss) с «внешним» Интернетом (USB-модем), все в порядке.
  • Когда я использую два клиента Chrome с «внешним» Интернетом, у меня нет соединения ICE. Это сообщения, которые я получаю в консоли
  • [13:58:58 PM] Получатель вызова принял наш вызов

  • webrtc.js: 36 [13:58:58 PM] *** Состояние сигнализации WebRTC изменено на: стабильное
  • webrtc.js: 36 [13:58:58 PM] *** Состояние подключения ICE изменено на проверку
  • webrtc.js: 36 [13:58:58 PM] *** Стрим добавлен
  • webrtc.js: 36 [13:58:58 PM] *******************
  • webrtc.js: 36 [13:58:58 PM] Получено сообщение:
  • webrtc.js: 91 Объект
  • webrtc.js: 36 [13:58:58 PM] Добавление полученного кандидата ICE: {"кандидата": "кандидата: 0 1 UDP 2122187007 ---. ---. - .--- 63215 тип хоста", " sdpMid ":" audio "," sdpMLineIndex ": 0}
  • webrtc.js: 36 [13:58:58 PM] Получено сообщение:
  • webrtc.js: 91 Объект
  • webrtc.js: 36 [13:58:58 PM] Добавление полученного кандидата ICE: {"кандидата": "кандидата: 4 1 UDP 2122252543 ----: -: ----: ----: --- : ----: ----: ---- 63216 typ host "," sdpMid ":" audio "," sdpMLineIndex ": 0}
  • webrtc.js: 36 [13:58:58 PM] Получено сообщение:
  • webrtc.js: 91 Объект
  • webrtc.js: 36 [13:58:58 PM] Добавление полученного кандидата ICE: {"кандидата": "кандидата: 1 1 UDP 1685987327 --. -. - .--- 53499 typ srflx raddr ---- -. ---. - .--- rport 63215 "," sdpMid ":" audio "," sdpMLineIndex ": 0} 3webrtc.js: 484
  • ******* кандидат успешно передан агенту ICE
  • webrtc.js: 36 [13:59:14 PM] *** Состояние подключения ICE изменено на сбой
  • webrtc.js: 36 [13:59:14 PM] Завершение вызова
  • webrtc.js: 36 [13:59:14 PM] -> Закрытие однорангового соединения
  • Клиент: ... demos / demo_audio_video_simple.html

Я использую публичный сервер STUN / TURN:

var STUN = {
    urls: 'stun:stun.l.google.com:19302',
};
var TURN = {
    urls: 'turn:64.233.184.127:19305',
    credential: ***
    username: ***
};

Я не думаю, что это проблема с кодом (клиентским или сигнальным сервером), поскольку он работает с Firefox на Firefox и с «локальным Chrome» на «внешний» Chrome.

ИЗМЕНИТЬ:

Сегодня я использовал код, который нашел на easyRTC.

  • Сервер: ... пример_сервера / server.js
  • Firefox-Firefox -> ОК,

У меня были такие же результаты:

  • локальный Chrome - внешний Chrome -> ОК
  • внешний Chrome - внешний Chrome -> Ошибка
  • Я нашел проблему. Проблема заключалась в том, что публичный сервер TURN, который я использовал, меняет имя пользователя / пароль каждые x минут. Я этого не заметил, поэтому использовал то же имя пользователя и пароль. Когда я сменил имя пользователя / пароль, все работало нормально для Firefox, Chrome, Opera и их комбинаций.

Я внес небольшие изменения в сервер для https и порта (6503): (примечание: я создал переадресацию порта 6502-> 6503)

// Load required modules
var http    = require("https");              // http server core module
var express = require("express");           // web framework external module
var io      = require("socket.io");         // web socket external module
var easyrtc = require("../");           // EasyRTC external module
var fs = require('fs')

// Setup and configure Express http server. Expect a subfolder called "static" to be the web root.
var httpApp = express();
httpApp.use(express.static(__dirname + "/static/"));

// Start Express http server on port 6503
//var webServer = http.createServer(httpApp).listen(6503);

var options = {
    key: fs.readFileSync('key.key'),
    cert: fs.readFileSync('cert.crt')
};

// Our HTTP server does nothing but service WebSocket
// connections, so every request just returns 404. Real Web
// requests are handled by the main server on the box. If you
// want to, you can return real HTML here and serve Web content.
var webServer = http.createServer(options, httpApp).listen(6503);

Сообщения сервера:


Итак, я доказал, что проблема не в коде. Есть у кого-нибудь идеи?


Веб-сервер: Apache. это в локальной сети. ПК (windows 7) имеет публичный ip.


person user1621010    schedule 11.04.2016    source источник


Ответы (1)


отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Комната [по умолчанию] Выполняется func 'connectionRoomObj.emitRoomDataDelta' отладка - EasyRTC: [easyrtc.audioVideoSimpleRTC: [easyrtc.audioVideoSimpleRunner '] [9dl9HdL-соединение по умолчанию] [9dl9HdL-соединение по умолчанию] [9dl9HdL-tpwC_dl9HdL-соединение по умолчанию] [9dl9HdL-tpwC_dll отладка - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Запуск функции 'onEmitEasyrtcCmd' с msgType [roomData] отладка - EasyRTC: [EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__g предложение отладки] [LHX9gZKB__g ] [9dl9HdL-TPqwCMTeo_gX] Запуск функции 'onEmitEasyrtcCmd' с отладкой msgType [предложение] - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Easyc.RTCAuddL-TPqwCMTeo_gX] получено сообщение Easyc. Запуск функции 'onEmitEasyrtcMsg' с отладкой msgType [easyrtc_streamReceived] - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Команда EasyRTC получена с помощью msgType [ответ] отладка - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Запуск функции 'onEmitEasyrtcCmd' с помощью msgType [ответ] отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9_wideoSimple] [получен отладчик EasyRtc.audioVideoSimple] [9dlug_wgMec] [кандидат] TPR_WGM] [9dlug_wgMe] msdl-кандидат : [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Запуск функции 'onEmitEasyrtcCmd' с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMText] [получено сообщение EasyCyTecTec_game с командой easyTugTec]: команда easyTugTec] [9dl9HdL-TPqwCMTeo_gX] Получена команда WebRTC setUserCfg. Эта функция еще не завершена. отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Команда EasyRTC, полученная с помощью msgType [кандидат] отладка - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUortcgWM] [EasyRTC] [easyrtc.audioVideoSimple] [EasyRTC] [кандидат easydasyrt 'отладить_gW .audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Команда EasyRTC получена с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Запуск func 'onEmitdimpee' [EasyGTDYC_DB] [debug] [debug] [deb]] [debug] [deb] [] TPqwCMTeo_gX] Команда EasyRTC получена с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Выполнение func 'onEmitEasyrtcCmd' с msgTypec.Команда TPM_DBUGT_EasyRTC [кандидат] отладчик] - EasyRTC_DBUGT: [кандидат]. Отладка msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Запуск функции 'onEmitEasyrtcCmd' с отладкой msgType [кандидат] - EasyRTC: [easyrtc. audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] EasyRTC команда получила с MsgType [кандидата] отладки - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск FUNC 'onEmitEasyrtcCmd' с MsgType [кандидата] отладки - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] EasyRTC команда получена с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Команда EasyRTC получена с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimpe получена с помощью команды easyrtc.audioVideoSimple] [LHX9gZKB__gYTC] [LHX9gZKB__gYTC] [LHX9gZKB__g : [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск func 'onEmitEasyrtcCmd' с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_greview] [EasyRTc. easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск функции 'onEmitEasyrtcCmd' с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__ gYlPeUo_gW] Команда EasyRTC получена с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Команда EasyRTC получена с отладкой msgType [кандидат] - получена команда EasyRTC с отладкой msgType [кандидат] - EasyRTC: [easyrtple_audio] msgType_кандидат [LEGO__G__] отладка - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUo_gW] Команда EasyRTC, полученная с msgType [кандидат] отладка - EasyRTC: [easyrtc.audioVideoSimple] [LHX9gZKB__gYlPeUTC, полученная команда easyRTC с msgType] [EasyRTC] [кандидат] [кандидат]. LHX9gZKB__gYlPeUo_gW] Команда EasyRTC получена с помощью msgType [кандидат] отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск функции 'onEmitEasyrtcCmdc. msgType [кандидат] отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск func 'onEmitEasyrtcCmd' с Отладка msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск func 'onEmitEasyrtcCmd' с отладкой msgType [кандидат] - EasyRTC: [easyrtc.audioVideoSimple] [9dlq9 кандидат] отладка - EasyRTC: [easyrtc.audioVideoSimple] [9dl9HdL-TPqwCMTeo_gX] Запуск фу

person user1621010    schedule 14.04.2016