Исправление таймаутов и потери соединения в 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

Выполненные исправления

  1. ✅ Изменен freeswitch.ip с school.cdto.life на 10.218.14.37
  2. mediasoup.webrtc.announcedIp установлен в 89.179.242.240
  3. mediasoup.plainRtp.listenIp настроен правильно
  4. 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" без ошибок.

Следующие шаги

  1. ✅ Конфигурация исправлена
  2. ✅ bbb-webrtc-sfu перезапущен
  3. ⏳ Требуется тестирование

Протестируйте:
- Создайте новую конференцию
- Подключитесь с микрофоном
- Проверьте, что таймауты исчезли
- Проверьте, что звук работает
- Проверьте, что соединение стабильно

Дополнительная диагностика

Если проблема сохраняется:

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 соединение устанавливается правильно.