Не удается установить WebRTC-соединение между браузером и сервером с помощью Django и aiortc: WinError 10051
Я создал простую конференцию WebRTC
, где несколько пользователей в одной сети могут открыть веб-страницу и видеть друг друга/разговаривать друг с другом. Каждый пир отслеживает свой собственный пул RTCPeerConnections
, в то время как Django
обрабатывает авторизацию, а django-channels
обрабатывает сигнализацию через WebSockets
.
Мне также необходимо передавать аудиоданные на сервер для анализа. Я решил добавить сервер в качестве еще одного WebRTC
пэра. Для этого я использовал модуль aiortc
и создал класс RTCPeer
, который обрабатывает RTCPeerConnections
, и класс RTCRoom
, который порождает RTCPeers
и следит за ними. Оба связаны с сигнализацией: они могут отправлять сообщения через channel layer
; любые сообщения, полученные потребителем WebSockets, пересылаются на RTCRoom.receive
.
Когда я пытаюсь подключить клиента к серверу, я несколько раз сталкиваюсь с ошибкой 10051. Похоже, что ни одна из пар собранных ICECandidates
не может обеспечить соединение. Что здесь может быть не так?
INFO:aioice.ice:Connection(0) Check CandidatePair(('172.18.108.97', 58214) -> ('109.120.16.131', 63420)) State.FROZEN -> State.IN_PROGRESS
DEBUG:aioice.ice:Connection(0) protocol(1) > ('109.120.16.131', 63420) Message(message_method=Method.BINDING, message_class=Class.REQUEST, transaction_id=b'\xcc)\xfb\x9c\xba\xc4!\xc0\x85P\x8fs')
DEBUG:aioice.ice:Connection(0) protocol(1) error_received([WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети)
...
INFO:aioice.ice:Connection(0) Check CandidatePair(('172.18.108.97', 58214) -> ('192.168.1.149', 63420)) State.IN_PROGRESS -> State.FAILED
Полный журнал: https://drive.google.com/file/d/1v70SwZS2332sAoAfEbVHAJDRVJ0FVovg/view?usp=sharing
RTCRoom
и RTCPeer
(часть consumers.py
)
Как говорит ошибка, похоже, что-то не так с настройкой сети между пирами.
Я предлагаю вам просто проверить, есть ли связь через UDP между хостами.
Вот хороший пример того, как это сделать через netcat: https://serverfault.com/a/733921