Исправление таймаутов и потери соединения в BigBlueButton
Дата: 2026-01-09
Контейнер: BBB-CONT22-1
Проблема: Потеря соединения, таймауты MEDIA_SERVER_REQUEST_TIMEOUT, звук не появляется
Обнаруженная проблема
Пользователи получают:
- Потерю соединения
- Таймауты при попытке подключения аудио
- Ошибка: "MEDIA_SERVER_REQUEST_TIMEOUT" (код 2003)
- Звук не появляется
Анализ логов
Из логов bbb-webrtc-sfu видно:
- ❌ MEDIA_SERVER_REQUEST_TIMEOUT - постоянные таймауты при запуске аудио сессий
- ❌ CRITICAL: job timed out - критический таймаут задач
- ❌ stopping transport before media established - RTP транспорты останавливаются до установления медиа
- ❌ websocket_closed - WebSocket соединения закрываются
- ❌ Connection closed - соединения закрываются до установления
Причина
В конфигурации /etc/bigbluebutton/bbb-webrtc-sfu/production.yml использовалось доменное имя school.cdto.life для freeswitch.ip:
freeswitch:
ip: school.cdto.life # ❌ Доменное имя
sip_ip: 10.218.14.37
Это вызывает проблемы:
1. Задержки при резолвинге доменного имени
2. Таймауты при попытке подключения к FreeSWITCH
3. Нестабильность соединения между bbb-webrtc-sfu и FreeSWITCH
Решение
Исправление конфигурации freeswitch.ip
Изменить freeswitch.ip с доменного имени на IP адрес в /etc/bigbluebutton/bbb-webrtc-sfu/production.yml:
Было:
freeswitch:
ip: school.cdto.life # ❌ Доменное имя
sip_ip: 10.218.14.37
esl_password: 0d2fdc71733c127c
Стало:
freeswitch:
ip: 10.218.14.37 # ✅ IP адрес
sip_ip: 10.218.14.37
esl_password: 0d2fdc71733c127c
Выполненные исправления
- ✅ Изменен
freeswitch.ipсschool.cdto.lifeна10.218.14.37 - ✅
mediasoup.webrtc.announcedIpустановлен в89.179.242.240 - ✅
mediasoup.plainRtp.listenIpнастроен правильно - ✅
bbb-webrtc-sfuперезапущен
Почему это важно
freeswitch.ip используется bbb-webrtc-sfu для:
1. Подключения к FreeSWITCH через ESL (Event Socket Library)
2. Установления RTP моста между FreeSWITCH и mediasoup
3. Управления аудио сессиями
Использование доменного имени может вызывать:
- Задержки при DNS резолвинге
- Таймауты при подключении
- Нестабильность соединения
Использование IP адреса напрямую гарантирует:
- Быстрое подключение без задержек DNS
- Стабильное соединение
- Отсутствие таймаутов
Дополнительные проверки
1. Проверка ESL соединения
Проверьте, что ESL соединение работает:
lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu -f | grep -i "esl\|freeswitch"
2. Проверка портов FreeSWITCH
Убедитесь, что FreeSWITCH слушает на нужных портах:
lxc exec BBB-CONT22-1 -- ss -tuln | grep -E "5060|5066|8021"
Должны быть:
- 5060 (SIP UDP/TCP)
- 5066 (SIP WebSocket)
- 8021 (ESL TCP)
3. Проверка соединения с FreeSWITCH
Проверьте, что bbb-webrtc-sfu может подключиться к FreeSWITCH:
lxc exec BBB-CONT22-1 -- telnet 10.218.14.37 8021
4. Проверка логов после исправления
После перезапуска проверьте логи:
lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu --since "1 minute ago" | grep -i "MCS connection\|freeswitch\|error"
Должно появиться: "MCS connection established" без ошибок.
Следующие шаги
- ✅ Конфигурация исправлена
- ✅ bbb-webrtc-sfu перезапущен
- ⏳ Требуется тестирование
Протестируйте:
- Создайте новую конференцию
- Подключитесь с микрофоном
- Проверьте, что таймауты исчезли
- Проверьте, что звук работает
- Проверьте, что соединение стабильно
Дополнительная диагностика
Если проблема сохраняется:
1. Проверка FreeSWITCH
lxc exec BBB-CONT22-1 -- systemctl status freeswitch
lxc exec BBB-CONT22-1 -- journalctl -u freeswitch -n 50
2. Проверка ESL пароля
Убедитесь, что ESL пароль правильный:
lxc exec BBB-CONT22-1 -- cat /opt/freeswitch/etc/freeswitch/autoload_configs/event_socket.conf.xml | grep password
Должен совпадать с esl_password в production.yml.
3. Проверка таймаутов
Если таймауты все еще происходят, возможно, нужно увеличить таймауты в конфигурации bbb-webrtc-sfu.
4. Проверка сетевого соединения
Убедитесь, что нет проблем с сетью между процессами:
lxc exec BBB-CONT22-1 -- ping -c 3 10.218.14.37
Статус
- ✅ Конфигурация исправлена
- ✅ bbb-webrtc-sfu перезапущен
- ⏳ Требуется тестирование
Примечание: Если проблема сохраняется после исправления, проверьте логи FreeSWITCH и убедитесь, что ESL соединение устанавливается правильно.