Здесь вы можете задать любые вопросы по MyChat, по работе программы, её настройке, лицензированию и т.д.
Аватара пользователя
SergeyG
Здравствуйте!
Пытаюсь протестировать видеосвязь между внутренними и внешними пользователями. В автоматическом режиме все работает прекрасно, но для связи используется TURN-сервер (локальный), что приводит к задержкам.
Внутренние пользователи сидят за NAT, как и сервер MyChat, и STUN-сервер выдает только внутренние IP кандидатов.
В явном виде не нашел как указать внешний STUN (например, Google), чтобы он использовался по умолчанию. Есть ли такая возможность?
Аватара пользователя
Алексей Пикуров
Здравствуйте. Сервер, настройки, web-сервисы, ручная настройка STUN/TURN. После перенастройки перезапустите сервер.
Аватара пользователя
SergeyG
Спасибо за ответ!
Поковырял ручные настройки turnserver.
К сожалению, изменение его настроек не приводит к изменению TURN и STUN серверов клиента.
Код: Выделить всё
"iplist":["MC_DomainName","EXTERNAL_IP"],"microphone":"","microphone_name":"","port":2016,"receive_display":false,"room":438715,"send_display":false,"sound":"","sound_name":"","title":"t5","titleaudio":"Аудиозвонок","transparent":true,"transportTCP":true,"transportUDP":true,"turnport":8888,"uins":"15","username":"xZqabysUio","video":true,"videooff":"Выключить видео","videoon":"Включить видео"},"iceServers":[{"credential":"ZXwZyVqLnv","urls":["turn:MC_DomainName:8888?transport=udp","turn:MC_DomainName:8888?transport=tcp","stun:MC_DomainName:8888"],"username":"xZqabysUio"},{"credential":"ZXwZyVqLnv","urls":["turn:EXTERNAL_IP:8888?transport=udp","turn:EXTERNAL_IP:8888?transport=tcp","stun:EXTERNAL_IP:8888"],"username":"xZqabysUio"}]}

Их он берет из файла options.json, насколько я понял, и обновляет при каждом старте плагина.
Здесь можно каким-нибудь образом обойти?
Аватара пользователя
Алексей Пикуров
Вы перезапустили сервер после изменения настроек?
Аватара пользователя
SergeyG
Да, конечно.
STUN и TURN серверы по имени домена присутствуют вообще в любом случае и ручные настройки не влияют. Ну либо я что-то не так делаю (
Аватара пользователя
Андрей Раков
Когда снимаете галку автоматической работы, появляется конфиг, в нем есть все настройки с комментариями.

Option.json это внутренняя структура чата, она формируется на основе конфига, который вы настраиваете.
Аватара пользователя
SergeyG
Хм...
Допустим, я хочу поменять только порт turnserver (listening-port).
1. Убираю галочку "Использовать автоматическую настройку STUN/TURN"
2. Меняю порт на 9999
3. Сохраняю конфиг, жму перезапустить сервер. Выключаю сервер, запускаю снова, смотрю конфиг - он изменен.
4. Перезапускаю клиент MyChat/
5. Пытаюсь вызвать абонента, получаю ошибку: [22:49:28] [ERROR] Ошибка #0267: нет соединения с TURN сервером по TCP порту 8888 и адресам Домен,Внешний_IP_сервера.

Прошу прощения, просто не понимаю, что делаю не так.
Аватара пользователя
SergeyG
Upd:
А вот если я перехожу обратно в автоматические настройки, ставлю порт 9999 - MyChatServer сообщает, что данный порт занят другим приложением.
Меняю на порт 10000, и коннект проходит, причем в логах порт подключения к STUN/TURN и в файле options.json он тоже изменился.
Аватара пользователя
Алексей Пикуров
Попробуйте сделать так:

1. Сделайте настройки TURN.
2. Сохраните их.
3. Выключите MyChat Server.
4. Проверьте, если в памяти есть turnserver.exe, то выбросьте его оттуда.
5. Запустите MyChat Server.
6. Подключитесь MyChat Client и сделайте звонок.
Аватара пользователя
Андрей Раков
MyChat рассчитан на работу со своим STUN/TURN сервером

Можно "обмануть" MyChat, но это уже не гарантирует работу:
Код: Выделить всё
listening-port=19302

realm=stun.l.google.com
realm=stun1.l.google.com
realm=stun2.l.google.com
realm=stun3.l.google.com
realm=stun4.l.google.com


Если STUN сервера работают на одинаковом порту - все ок, разные - нельзя.
Аватара пользователя
SergeyG
После выключения сервера MyChat сервиса turnserver нет, но я даже перезагрузил сервер.
К сожалению, все также ручное изменение настроек STUN/TURN не работает.
Аватара пользователя
SergeyG
Андрей, я пробовал так сделать, эти настройки не распространяются на клиентов.
Клиент все также пытается подключиться к локальному серверу MyChat.
Аватара пользователя
SergeyG
Удалил все закоменченное.
Вложения
Снимок.JPG
Снимок.JPG (29.32 КБ) Просмотров: 431
Аватара пользователя
SergeyG
Ой, а тут вообще весело.
Файл .json отсюда:C:\Users\abramchuk\AppData\Local\MyChat Client\webkit

Код: Выделить всё
{"send_display":false,"sound_name":"","receive_display":false,"SelfUIN":2,"username":"E0MLt7gpt9","titleaudio":"\u0410\u0443\u0434\u0438\u043e\u0437\u0432\u043e\u043d\u043e\u043a","QPrivAllowRecordMediaCalls":true,"videoon":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e","fullscreen":false,"microphone":"","audiooff":"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0432\u0443\u043a","microphone_name":"","audioon":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0432\u0443\u043a","transparent":true,"MediaStorage":"C:\\Users\\abramchuk\\AppData\\Local\\MyChat Client\\logs\\records\\","transportUDP":true,"transportTCP":true,"camera":"","iceTransportPolicy":"all","videooff":"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e","turnport":10000,"RecordMediaCalls":false,"video":true,"CallerUIN":15,"hungup":"\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0437\u0432\u043e\u043d\u043e\u043a","iplist":"mc.vlpku.ru,188.254.55.19","QPrivAllowDisableCameraDuringCalls":true,"title":"t5","QPrivAllowMuteSoundDuringCalls":true,"sound":"","uins":"15","room":502030,"port":2016,"QPrivAllowHangUpCalls":true,"ReceiverUIN":2,"credential":"LezoiFivpU","camera_name":"","RecordFileName":"15-2-2021-10-14-22-55-39.webm"}


И ошибка, которую выдает клиент:
[23:56:38] [ERROR] Ошибка #0267: нет соединения с TURN сервером по TCP порту 8888 и адресам mc.vlpku.ru,stun.l.google.com,stun1.l.google.com,stun2.l.google.com,stun3.l.google.com,stun4.l.google.com
Аватара пользователя
Алексей Пикуров
Получилось повторить такое поведение. Попробуем разобраться.
Аватара пользователя
SergeyG
Понял, спасибо.
А есть ли, навскидку, какой-либо вариант поправить в конфигах где-нибудь руками настройки, чтобы начальству показать p2p коннект между 2мя клиентами?
Аватара пользователя
Алексей Пикуров
Коннект с сервером будет всегда, так или иначе. Я не очень понимаю, что вы хотите. Нужно проснифить трафик — берите Wireshark и показывайте его начальству.
Аватара пользователя
SergeyG
Нет, мне нужен именно p2p между 2-мя клиентами. На данный момент p2p корректно работает в сети предприятия, но со внешними клиентами только через TURN.
Насколько я понимаю, если клиенты через корректно работающий STUN-сервер найдут правильных ICE-кандидатов, то смогут соединиться без TURN-сервера.
Планируется порядка 100 одновременных звонков и не хочется для этого поднимать кучу TURN-серверов.
Если я ошибаюсь, поправьте, пожалуйста.
Аватара пользователя
Алексей Пикуров
Используйте автоматические настройки и не морочьте себе голову, всё будет работать.
Аватара пользователя
Алексей Пикуров
Вам не нужна никакая куча TURN-серверов.
если клиенты через корректно работающий STUN-сервер найдут правильных ICE-кандидатов, то смогут соединиться без TURN-сервера.

А если не найдут? Вы же не можете это гарантировать, пройдёт трафик или нет. Voice звонок генерирует настолько мало трафика, что это вообще не должно быть проблемой. Пройдёт звонок напрямую— окей. Не пройдёт — сроутится через TURN, и всё продолжит работать.
Аватара пользователя
SergeyG
Вчера тестировали.
При максимальном количестве подключений для FREE сервера MyChat (9 коннектов), была достаточно серьезная нагрузка по сети на сервер. Есть опасение, что при большем количестве он будет слишком тормозить.
Самый лучший вариант - если можно было бы в настройках turnserver указать опцию "no-stan" и отдельно прописать внешний STUN. И все это передалось клиенту.

Звонки все будут с видео. Поэтому там траффика побольше :(
На данный момент из-за того, что внутренних клиентов встроенный STUN не может обработать корректно (даже при наличии HairpinNAT) - все коннекты идут через TURN.
Тестирование STUN от гугла показало почти всегда нужных кандидатов с обоих сторон.
Аватара пользователя
Алексей Пикуров
Окей, принято. Ожидайте обновление, думаю, за завтра допилим момент с портом, отвечу в этой же теме.
Аватара пользователя
Алексей Пикуров
Вроде всё получилось, надо будет обновить сервер, однако STUN сервер stun.l.google.com работает на 3478 порту, а не на 19302.

Ссылку на свежую сборку сервера отправил вам в личку.
Аватара пользователя
SergeyG
Здравствуйте!
Прошу прощения за столь долгую задержку с ответом.
Сервер обновил, сейчас все отрабатывает идеально. Любые изменения конфига происходят корректно.
Также, теперь всегда работает p2p при видеозвонке в любых вариациях клиентов (NAT-NAT, белый IP-NAT и т.д.).
Уважаемые разработчики, огромное спасибо за проделанную Вами работу!
Аватара пользователя
Алексей Пикуров
Пожалуйста, пользуйтесь на здоровье :)
Аватара пользователя
SergeyG
Здравствуйте!
Немного подниму тему - если соединяться с мобильного клиента, то звонок не проходит к сожалению. Так как нет логов в Android, не могу точно установить причину. Это может быть связано с необходимостью обновления приложения в PlayMarket?
Аватара пользователя
Георгий Лысенко
Здравствуйте.
В мобильном приложении есть логи медиа-звонков. Вот где их посмотреть.
Аватара пользователя
Георгий Лысенко
У нас скоро будет апдейт, в нем добавлена поддержка stun-протокола в Android-клиент.
Аватара пользователя
SergeyG
Меня Ваша техническая поддержка восхищает!
Огромное спасибо за ссылку с логированием на Android.
Проблему решил, была в конфиге.
Ну и, конечно, в том, что нет поддержки stun.
Но минимальную часть мобильных клиентов пока можно отправить через turn.
Еще раз спасибо!