Полное исправление проблем со звуком в BigBlueButton

Дата: 2026-01-09
Контейнер: BBB-CONT22-1
Проблемы: Нет звука, ошибка ICE 1010, таймауты, потеря соединения

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

1. Исправление конфигурации FreeSWITCH

Проблема: external_rtp_ip и external_sip_ip были закомментированы
Решение: Добавлены активные строки в /opt/freeswitch/etc/freeswitch/vars.xml:

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=89.179.242.240"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=89.179.242.240"/>

Проблема: В external.xml использовался $${local_ip_v4} вместо $${external_rtp_ip}
Решение: Изменены параметры в /opt/freeswitch/etc/freeswitch/sip_profiles/external.xml:

<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
<param name="ext-sip-ip" value="$${external_sip_ip}"/>

2. Исправление конфигурации mediasoup

Проблема: mediasoup.webrtc.announcedIp использовал доменное имя
Решение: Изменен на IP адрес в /etc/bigbluebutton/bbb-webrtc-sfu/production.yml:

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 89.179.242.240  # ✅ IP вместо доменного имени

Проблема: mediasoup.plainRtp.listenIp не был настроен
Решение: Добавлена конфигурация:

  plainRtp:
    listenIp:
      ip: 10.218.14.37
      announcedIp: 89.179.242.240

3. Исправление конфигурации freeswitch.ip

Проблема: freeswitch.ip использовал доменное имя, вызывая таймауты
Решение: Изменен на IP адрес:

freeswitch:
  ip: 10.218.14.37  # ✅ IP вместо school.cdto.life
  sip_ip: 10.218.14.37
  esl_password: 0d2fdc71733c127c

4. Настройка TURN сервера

Проблема: TURN сервер не был настроен в bbb-webrtc-sfu, вызывая ошибки ICE 1010
Решение: Добавлена конфигурация TURN:

turn:
  enabled: true
  urls:
    - turn:school.cdto.life:3478?transport=udp
    - turn:school.cdto.life:3478?transport=tcp
  secret: 8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa
  username: bbb

Итоговая конфигурация

/etc/bigbluebutton/bbb-webrtc-sfu/production.yml

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 89.179.242.240
  plainRtp:
    listenIp:
      ip: 10.218.14.37
      announcedIp: 89.179.242.240
freeswitch:
  ip: 10.218.14.37
  sip_ip: 10.218.14.37
  esl_password: 0d2fdc71733c127c
turn:
  enabled: true
  urls:
    - turn:school.cdto.life:3478?transport=udp
    - turn:school.cdto.life:3478?transport=tcp
  secret: 8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa
  username: bbb

/opt/freeswitch/etc/freeswitch/vars.xml

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=89.179.242.240"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=89.179.242.240"/>

/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml

<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
<param name="ext-sip-ip" value="$${external_sip_ip}"/>

Созданные скрипты

  1. /home/cdto/DENKART/scripts/fix-bbb-audio.sh
  2. Исправляет конфигурацию FreeSWITCH (external_rtp_ip, external_sip_ip)

  3. /home/cdto/DENKART/scripts/fix-bbb-audio-mediasoup.sh

  4. Настраивает mediasoup.plainRtp.listenIp

  5. /home/cdto/DENKART/scripts/fix-bbb-conf-issues.sh

  6. Исправляет проблемы конфигурации nginx и sip.nginx

Проверка исправлений

1. Проверка конфигурации

# Проверка production.yml
lxc exec BBB-CONT22-1 -- cat /etc/bigbluebutton/bbb-webrtc-sfu/production.yml

# Проверка vars.xml
lxc exec BBB-CONT22-1 -- grep "external_rtp_ip\|external_sip_ip" /opt/freeswitch/etc/freeswitch/vars.xml | grep -v "^#" | grep -v "^[[:space:]]*<!--"

# Проверка external.xml
lxc exec BBB-CONT22-1 -- grep "ext-rtp-ip\|ext-sip-ip" /opt/freeswitch/etc/freeswitch/sip_profiles/external.xml | grep -v "^[[:space:]]*<!--"

2. Проверка сервисов

# Статус сервисов
lxc exec BBB-CONT22-1 -- systemctl status bbb-webrtc-sfu freeswitch coturn

# Проверка портов
lxc exec BBB-CONT22-1 -- ss -tuln | grep -E "5060|5066|8021|3478|24577"

3. Проверка логов

# Логи bbb-webrtc-sfu
lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu -f

# Логи FreeSWITCH
lxc exec BBB-CONT22-1 -- journalctl -u freeswitch -f

# Логи TURN
lxc exec BBB-CONT22-1 -- tail -f /var/log/turnserver/turnserver.log

Ожидаемый результат

После всех исправлений:
- ✅ FreeSWITCH отправляет правильный внешний IP в SDP
- ✅ mediasoup использует правильные IP адреса для ICE candidates
- ✅ bbb-webrtc-sfu может подключиться к FreeSWITCH без таймаутов
- ✅ TURN сервер доступен для клиентов
- ✅ Клиенты могут использовать TURN для обхода NAT
- ✅ Ошибка ICE 1010 должна исчезнуть
- ✅ Звук должен работать

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

  1. ✅ Все исправления применены
  2. ⏳ Требуется тестирование

Протестируйте:
- Создайте новую конференцию
- Подключитесь с микрофоном
- Проверьте, что ошибка ICE 1010 исчезла
- Проверьте, что звук работает
- Проверьте в браузере (about:webrtc), что используется TURN
- Проверьте, что соединение стабильно

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

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

1. Проверка портов на роутере

Убедитесь, что на роутере проброшены:
- 3478 (UDP/TCP) - TURN сервер
- 16384-32768 (UDP) - WebRTC/RTP трафик
- 24577-32768 (UDP) - mediasoup WebRTC

2. Проверка в браузере

Откройте about:webrtc в Firefox или chrome://webrtc-internals в Chrome и проверьте:
- Есть ли TURN candidates
- Какой тип соединения используется
- Есть ли ошибки ICE

3. Проверка TURN сервера

# Тест TURN с внешнего сервера
turnutils_stunclient school.cdto.life:3478

# Проверка логов TURN
lxc exec BBB-CONT22-1 -- tail -f /var/log/turnserver/turnserver.log

Статус

  • ✅ Все конфигурации исправлены
  • ✅ Сервисы перезапущены
  • ✅ TURN сервер настроен
  • ⏳ Требуется тестирование

Примечание: Если после всех исправлений проблема сохраняется, возможно, требуется дополнительная настройка портов на роутере или проверка файрвола.