Исправление проблемы со звуком в 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.
Проверка исправлений
После применения исправлений:
-
Проверьте конфигурацию:
bash lxc exec BBB-CONT22-1 -- grep "external_rtp_ip\|external_sip_ip" /opt/freeswitch/etc/freeswitch/vars.xml | grep -v "^#" | grep -v "^[[:space:]]*<!--" -
Проверьте статус FreeSWITCH:
bash lxc exec BBB-CONT22-1 -- systemctl status freeswitch -
Протестируйте звук в BigBlueButton:
- Создайте тестовую конференцию
- Подключитесь с микрофоном
- Проверьте, что звук передается
Резервные копии
Скрипт создает резервные копии в:
/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
Дополнительная диагностика
Если проблема сохраняется после исправления:
-
Проверьте логи FreeSWITCH:
bash lxc exec BBB-CONT22-1 -- journalctl -u freeswitch -f -
Проверьте порты RTP:
bash lxc exec BBB-CONT22-1 -- ss -tuln | grep -E "16384|5060|5066" -
Проверьте файрвол:
bash sudo ufw status sudo iptables -L -n | grep -E "16384|32768" -
Проверьте сетевую конфигурацию:
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 при тестировании звука
-->