#android #localhost #webrtc #lan #libjingle
#Android #localhost #webrtc #локальная сеть #libjingle
Вопрос:
Я пытаюсь создать приложение для видеочата Android на основе WebRTC для развертывания в локальной сети. Настройка проста: 2 терминала Android и один сервер Linux в одной локальной сети (Ethernet). Сервер не отключается и не включается. Только кандидаты на хост и сервер сигнализации (HTTP WS).
-
Несколько лет назад я нашел приложение для Android на GitHub, основанное на libjingle-9127, вместе с соответствующим Node.js сервер. В моей настройке это сработало «из коробки».
-
Поскольку этой библиотеке 4 года, я попытался перейти на последнюю версию Google-webrtc Android SDK a Node.js порт appr.tc сервер. Передача сигналов работает хорошо, но сам видеочат не работает.
Пытаясь сравнить две версии, я понял, что список кандидатов, отправленных на сервер сигнализации, является:
- по одному кандидату на сетевой интерфейс с версией libjingle
- только 127.0.0.1 и :::1 с версией Google-webrtc
Похоже, это связано с механизмом WebRTC, называемым Trickle ICE, введенным между ними. И я не знаю, как настроить WebRTC для объявления кандидатов, соответствующих моим локальным сетевым интерфейсам.
Существует ли API WebRTC Android SDK, позволяющий мне это сделать?
Спасибо!
PS: список кандидатов, отправленных на сервер сигнализации.
С libjingle-9127
{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:2316705582 1 udp 2122260223 192.168.237.1 34869 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:2316705582 1 udp 2122260223 192.168.237.1 34869 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:2316705582 1 udp 2122260223 192.168.237.1 34869 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:3614478314 1 udp 2122194687 172.17.84.124 52163 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:3614478314 1 udp 2122194687 172.17.84.124 52163 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:1846788752 1 udp 2122129151 172.17.116.134 45915 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:1846788752 1 udp 2122129151 172.17.116.134 45915 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:13699457 1 udp 2122063615 10.11.239.176 51039 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:13699457 1 udp 2122063615 10.11.239.176 51039 typ host generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:3298157534 1 tcp 1518280447 192.168.237.1 36295 typ host tcptype passive generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:3298157534 1 tcp 1518280447 192.168.237.1 36295 typ host tcptype passive generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:2582868762 1 tcp 1518214911 172.17.84.124 44376 typ host tcptype passive generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":1,"id":"video","candidate":"candidate:2582868762 1 tcp 1518214911 172.17.84.124 44376 typ host tcptype passive generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
,{"type":"candidate","payload":{"label":0,"id":"audio","candidate":"candidate:546324064 1 tcp 1518149375 172.17.116.134 41308 typ host tcptype passive generation 0"},"from":"-Dl0-BWMLUwmKvvcAAAD"}]
С помощью Google-webrtc-1.0.26405
03-15 18:29:47.008 2318 2347 D RoomRTCClient: GAE->C #1 : {"type":"candidate","label":0,"id":"0","candidate":"candidate:1510613869 1 udp 2121932543 127.0.0.1 58474 typ host generation 0 ufrag rhKZ network-id 4"}
03-15 18:29:47.009 2318 2347 D RoomRTCClient: GAE->C #2 : {"type":"candidate","label":0,"id":"0","candidate":"candidate:559267639 1 udp 2122005759 ::1 46169 typ host generation 0 ufrag rhKZ network-id 5"}
Комментарии:
1. На самом деле, проблема, похоже, не связана с Trickle ICE . Когда я смотрю на трассировки WebRTC, кажется, что все привязки UDP терпят неудачу на сетевых интерфейсах, которые не являются lo . Я не понимаю почему, потому что я не менял конфигурацию сети между моими тестами с использованием Google-webrtc-1.0. и libjingle-9127 . Что это за таинственная ошибка 101? Смотрите трассировки ниже.
2.
03-20 17:07:54.622 17423 19629 I basic_port_allocator.cc: (line 766): Allocate ports on 6 networks 03-20 17:07:54.622 17423 19629 W physical_socket_server.cc: (line 200): Binding socket to network address 10. 11.239.187 failed; result: -3 03-20 17:07:54.622 17423 19629 E basic_packet_socket_factory.cc: (line 53): UDP bind failed with error 101 03-20 17:07:54.622 17423 19629 W physical_socket_server.cc: (line 200): Binding socket to network address 172.17.116.154 failed; result: -3 03-20 17:07:54.622 17423 19629 E basic_packet_socket_factory.cc: (line 53): UDP bind failed with er (...)