Esta é a minha solução de trabalho preferida. Ele é baseado em: pulsertp-multiroom - link
Estou usando isso para enviar áudio para vários receptores (salas diferentes). Existem duas linhas, descritas abaixo, que também fazem do remetente um receptor e resolvem essa questão. Eles são:
- module-rtp-send com o único endereço IP do remetente
- module-rtp-recv com o único endereço IP do remetente
A vantagem dessa abordagem é que todos os receptores (incluindo o do emissor) permanecem sincronizados. Esse não foi o caso quando combinamos sincronizações como na minha outra resposta.
Após a edição para inserir os endereços IP corretos, eu corro este script no remetente quando estiver pronto para iniciar o unicast 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
Em cada receptor:
pactl load-module module-rtp-recv sap_address=192.168.0.X
Use o endereço IP real do destinatário, por exemplo, 192.168.0.2
Finalmente, no remetente, faça também um receptor:
pactl load-module module-rtp-recv sap_address=192.168.0.1
Você pode tornar a configuração dos receptores permanentes editando o /etc/pulse/default.pa
Para interromper a transmissão de RTP para os destinatários, execute este script no remetente:
#!/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
Para iniciar e parar a reprodução de música, não são necessárias alterações nos receptores. Sua configuração pode se tornar permanente. Eu não tive a necessidade de fazer qualquer alteração de configuração permanente no remetente com a minha versão modificada do script de início acima.