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

Дата: 2026-01-09
Контейнер: BBB-CONT22-1
Проблема: Видео работает, но нет звука

Обнаруженная проблема

При работе BigBlueButton видео передается нормально, но звук отсутствует.

Причина

В конфигурации FreeSWITCH (/opt/freeswitch/etc/freeswitch/vars.xml) параметры external_rtp_ip и external_sip_ip были закомментированы. Эти параметры критически важны для работы аудио через NAT, так как они указывают внешний IP-адрес, который должен использоваться в SDP (Session Description Protocol) для RTP трафика.

Решение

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

Добавлены активные строки в /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"/>

Важно: Эти параметры должны указывать на внешний IP-адрес сервера (89.179.242.240), а не на внутренний IP контейнера (10.218.14.37).

2. Автоматическое исправление

Создан скрипт для автоматического исправления:

Скрипт: /home/cdto/DENKART/scripts/fix-bbb-audio.sh

Использование:

# Использование с контейнером по умолчанию (BBB-CONT22-1) и IP по умолчанию
./scripts/fix-bbb-audio.sh

# Или с указанием контейнера и внешнего IP
./scripts/fix-bbb-audio.sh BBB-CONT22-1 89.179.242.240

Что делает скрипт:
1. Создает резервные копии конфигурации FreeSWITCH
2. Проверяет текущую конфигурацию
3. Добавляет/обновляет external_rtp_ip и external_sip_ip в vars.xml
4. Проверяет конфигурацию sip_profiles/external.xml
5. Перезапускает FreeSWITCH

3. Ручное исправление

Если предпочитаете исправить вручную:

lxc exec BBB-CONT22-1 -- bash

# Создать резервную копию
cp /opt/freeswitch/etc/freeswitch/vars.xml /opt/freeswitch/etc/freeswitch/vars.xml.backup

# Добавить строки после комментария "for external_rtp_ip and external_sip_ip"
sed -i '/for external_rtp_ip and external_sip_ip/a\
  <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/vars.xml

# Проверить изменения
grep "external_rtp_ip\|external_sip_ip" /opt/freeswitch/etc/freeswitch/vars.xml | grep -v "^#" | grep -v "^[[:space:]]*<!--"

# Перезапустить FreeSWITCH
systemctl restart freeswitch

Дополнительные проверки

Проверка проброса UDP портов

Для работы аудио необходимо, чтобы UDP порты 16384-32768 были проброшены из контейнера на хост. Проверьте:

# Проверка проброса портов через LXD proxy
lxc config device list BBB-CONT22-1

# Проверка правил iptables на хосте
sudo iptables -t nat -L -n | grep -E "16384|32768"

Примечание: LXD не поддерживает прямой проброс UDP диапазонов через proxy device. Может потребоваться настройка через iptables или использование host network mode.

Проверка конфигурации sip_profiles/external.xml

Убедитесь, что в /opt/freeswitch/etc/freeswitch/sip_profiles/external.xml используются правильные параметры:

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

Эти параметры должны использовать переменную ${local_ip_v4}, которая будет заменена на значение из vars.xml.

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

После применения исправлений:

  1. Проверьте конфигурацию:
    bash lxc exec BBB-CONT22-1 -- grep "external_rtp_ip\|external_sip_ip" /opt/freeswitch/etc/freeswitch/vars.xml | grep -v "^#" | grep -v "^[[:space:]]*<!--"

  2. Проверьте статус FreeSWITCH:
    bash lxc exec BBB-CONT22-1 -- systemctl status freeswitch

  3. Протестируйте звук в BigBlueButton:

  4. Создайте тестовую конференцию
  5. Подключитесь с микрофоном
  6. Проверьте, что звук передается

Резервные копии

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

/tmp/bbb-audio-fix-backup-YYYYMMDD-HHMMSS/

Содержимое:
- vars.xml.backup - резервная копия vars.xml
- external.xml.backup - резервная копия external.xml

Восстановление из резервной копии

Если что-то пошло не так:

lxc exec BBB-CONT22-1 -- bash
# Восстановить vars.xml
cp /tmp/bbb-audio-fix-backup-*/vars.xml.backup /opt/freeswitch/etc/freeswitch/vars.xml

# Перезапустить FreeSWITCH
systemctl restart freeswitch

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

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

  1. Проверьте логи FreeSWITCH:
    bash lxc exec BBB-CONT22-1 -- journalctl -u freeswitch -f

  2. Проверьте порты RTP:
    bash lxc exec BBB-CONT22-1 -- ss -tuln | grep -E "16384|5060|5066"

  3. Проверьте файрвол:
    bash sudo ufw status sudo iptables -L -n | grep -E "16384|32768"

  4. Проверьте сетевую конфигурацию:
    bash lxc exec BBB-CONT22-1 -- ip addr show lxc exec BBB-CONT22-1 -- ip route show

Статус

  • ✅ Скрипт создан и готов к использованию
  • ✅ Конфигурация vars.xml исправлена
  • ✅ FreeSWITCH перезапущен
  • ⏳ Требуется тестирование звука

Следующие шаги:
1. Протестировать звук в BigBlueButton
2. Проверить проброс UDP портов (если проблема сохраняется)
3. Проверить логи FreeSWITCH при тестировании звука

-->