Pulseaudio RTP Multicast - Как играть в Sound на отправителе?

-E делает эту работу за меня. Из man sudo -

-E, --preserve-env
Указывает политике безопасности, что пользователь желает предварительно обслуживать существующие переменные окружения. Политика безопасности политика безопасности может вернуть ошибку, если у пользователя нет разреше- разрешения на сохранение окружения.

2
25.09.2018, 06:53
2 ответа

Это мое предпочтительное рабочее решение. На базе :pulrtp -мультирум
https://github.com/mada3k/pulsertp-multiroom/blob/master/scripts/pulsertpm-start.sh

Я использую это для отправки звука на несколько приемников (в разные комнаты ). Есть две линии, отмеченные ниже, которые делают отправителя также получателем и решают этот вопрос. Они:

  • модуль -rtp -отправить с единственным IP-адресом отправителя
  • модуль -rtp -recv с единственным IP-адресом отправителя

Преимущество этого подхода заключается в том, что все получатели (, включая получателя на отправителе ), остаются синхронизированными. Этого не было при объединении синхронизаций, как в моем другом ответе.

После редактирования для ввода правильных IP-адресов я запускаю этот скрипт на отправителе, когда готов запустить одноадресную рассылку RTP:

#!/bin/bash
#
# PulseRTP-multiroom
#   Loads RTP sender modules to setup multiroom audio at request
#
#   Notes
#     * If you have issues, and have multiple network interfaces, add source_ip= with you prefered local IP
#     * mtu=1408 is good initial value. It makes room for 352 PCM frames in 16/44.1k.
#
pa_rtp_mtu=1408
pa_sink="rtpsink1"

echo "timedatectl status:"
timedatectl status --no-pager | grep 'NTP service: active'
if [[ $? -ne 0 ]]; then
    timedatectl set-ntp true
    sleep 2
    timedatectl status --no-pager | grep 'NTP service: active'
    if [[ $? -ne 0 ]]; then
        echo "WARNING: NTP service not active"
    else
        echo "timedatectl status OK"
    fi
fi

pacmd list-modules | grep module-native-protocol-unix
if [ $? -ne 0 ]; then
    pactl load-module module-native-protocol-unix
fi
pacmd list-modules | grep module-default-device-restore
if [ $? -ne 0 ]; then
    pactl load-module module-default-device-restore
fi
pacmd list-modules | grep module-rescue-streams
if [ $? -ne 0 ]; then
    pactl load-module module-rescue-streams
fi
pacmd list-modules | grep module-always-sink
if [ $? -ne 0 ]; then
    pactl load-module module-always-sink
fi
pacmd list-modules | grep module-intended-roles
if [ $? -ne 0 ]; then
    pactl load-module module-intended-roles
fi
pacmd list-modules | grep module-suspend-on-idle
if [ $? -ne 0 ]; then
    load-module module-suspend-on-idle
fi

#hardcoded addresses of each receiver:
pactl load-module module-rtp-send source=${pa_sink}.monitor mtu=${pa_rtp_mtu} destination_ip=192.168.0.1 #this is the sender's IP address (see below)
pactl load-module module-rtp-send source=${pa_sink}.monitor mtu=${pa_rtp_mtu} destination_ip=192.168.0.2
pactl load-module module-rtp-send source=${pa_sink}.monitor mtu=${pa_rtp_mtu} destination_ip=192.168.0.3
pactl load-module module-rtp-send source=${pa_sink}.monitor mtu=${pa_rtp_mtu} destination_ip=192.168.0.4
pactl load-module module-rtp-send source=${pa_sink}.monitor mtu=${pa_rtp_mtu} destination_ip=192.168.0.5

На каждом приемнике:

pactl load-module module-rtp-recv sap_address=192.168.0.X

Используйте фактический IP-адрес получателя, например, 192.168.0.2

Наконец, на отправителе сделайте его и получателем:

pactl load-module module-rtp-recv sap_address=192.168.0.1

Вы можете сделать конфигурацию приемников постоянной, отредактировав файл /etc/pulse/default.pa

Чтобы остановить трансляцию RTP получателям, запустите этот скрипт на отправителе:

#!/bin/bash
#
# PulseRTP-Multiroom
#   Unloads RTP sender modules to avoid unnecessary bandwidth hogging
#

pa_sink="rtpsink1"

IFS=$'\n'
for rtpn in `pactl list modules short|grep ${pa_sink}`; do
    PAM_ID=`echo $rtpn|awk '{print $1}'`
    pactl unload-module $PAM_ID
    echo " * unload-module id $PAM_ID done"
done

Для запуска и остановки воспроизведения музыки никаких изменений на приемниках не требуется.Их конфиг можно сделать постоянным. У меня не было необходимости вносить какие-либо постоянные изменения в конфигурацию отправителя с моей модифицированной версией сценария запуска выше.

3
27.01.2020, 22:08

Использовать модуль -комбайн -приемник.

На отправителе:

pacmd list-sinks

Используйте значения каждого приемника для объединения в списке ведомых устройств ниже:

pactl load-module module-combine-sink sink_name=rtp1combined slaves=abcd,wxyz

, где abcdи wxyz— имена двух объединенных приемников. В моем случае это будут slaves=rtpsink1,alsa _output.pci -0000 _02 _00.1.hdmi -стерео

ОБНОВЛЕНИЕ :Этот метод, по-видимому, имеет тот недостаток, что отправитель не синхронизирован с узлами.

2
27.01.2020, 22:08

Теги

Похожие вопросы