Будет рассмотрена возможность потоковой передачи звука по сети с типами передачи данных Unicast и Multicast. Настройка будет производиться на примере Raspberry Pi 3 Model B и ОС Debian Stretch.
Документация
FAQ:
- Звук проигрывается через «Sink», а записывается через «Source».
- Определить Sink;
$ pacmd list-sinks | grep -e 'name:' -e 'index'
- Определить Source;
$ pacmd list-sources | grep -e device.string -e 'name:'
- Просмотреть физические каналы ввода вывода на звуковой карте;
Используется в параметре hw:0,0 (где 0,0 это soundcard/device);
$ sudo cat /proc/asound/cards или aplay -l
- Просмотр логов;
$ sudo cat /var/log/syslog* | grep -i pulse
- Не удается запустить демон;
$ sudo rm -rf /tmp/pulse* ~/.pulse* ~/.config/pulse
- DEBUG in console;
$ pulseaudio -v
- PACMD;
$ pacmd list-***
- Управление демоном pulseaudio;
Управлять можно, когда демон работает в пользовательском режиме. В системном, через $ service pulseaudio *command's
$ pulseaudio --kill (pulseaudio -k) | pulseaudio --start (pulseaudio -D)
- Управление громкостью Sink;
От 0 до 65535
$ pactl set-sink-volume 0 100
$ pactl set-sink-volume 0 65535
$ pactl set-sink-mute 0 toggle
Packages:
Обновляем список репозиториев / пакеты:
# apt-get update && apt-get upgrade
Воспроизведение звука:
# apt-get install sudo alsa-utils alsa-tools moc
Управление аудио: (xxx-xxx-zeroconf - нужен на клиенте и сервере)
Пакет "pulseaudio-module-zeroconf" - автоматически размещает данные о наличии аудиосервера в локальной сети через службу Avahi.
# apt-get install pulseaudio pulseaudio-module-zeroconf
Для Desktop Envirement:
Управление из интерфейса.
# apt-get install pavucontrol pasystray (paprefs - графическое управление сервером)
BackUP:
# cp -r /etc/pulse/ /etc/pulse-backup
- Восстановить
# cp /etc/pulse-backup/default.pa /etc/pulse/default.pa
- Если не страртует $ pulseaudio --start, но стартует без модуля module-rtp-recv,
то это cвязано с отсутствием маршрута в сеть. Например такого # route add default gw 192.168.0.6
Настройка:
Задаем имя хоста:
# hostnamectl set-hostname sbc-srv0
- Проверяем,
# cat /etc/hostname
Hosts:
# nano /etc/hosts
192.168.5.253 sbc-srv0
Создаем пользователя:
C включенным шелом и одноименной группой.
# useradd localuser -b /home/ -m -U -s /bin/bash
- Отключить Shell
# usermod -s /bin/false localuser
# passwd localuser
Добавляем пользователя "localuser" в группу "sudo":
# usermod -a -G sudo localuser - Добавить пользователя localuser в группу sudo.
# gpasswd -d localuser sudo - Удалить пользователя localuser из группы sudo.
# id localuser - Проверить в какие группы входит пользователь localuser.
Pulseaudio Groups:
Добавить пользователя localuser в группу audio и pulse-access.
# usermod -a -G audio localuser
# usermod -a -G pulse-access localuser
ALSA -> PulseAudio:
Если приложение не умеет работать с PulseAudio напрямую, то его можно перенаправить самастоятельно.
$ sudo nano /etc/asound.conf
pcm.!default { type pulse }
ctl.!default { type pulse }
SYSTEMD:
Подробности pulseaudio --help или man pulseaudio.
- Создаем файл логов,
$ sudo touch /var/log/pulseaudio.log
- Настраиваем сервис,
$ sudo nano /etc/systemd/system/pulseaudio.service
[Unit]
Description=PulseAudio Daemon
[Service]
Type=forking
RemainAfterExit=yes
ExecStart=/usr/bin/pulseaudio --realtime --no-cpu-limit --system --disallow-module-loading --disallow-exit --daemon \
--log-target=file:/var/log/pulseaudio.log
[Install]
WantedBy=multi-user.target
- Включаем демон и делаем автозагрузку:
$ sudo systemctl daemon-reload
$ sudo systemctl enable pulseaudio
$ sudo systemctl start pulseaudio
$ sudo service pulseaudio status
UNICAST:
Настройка сервера:
Сервер работает в системном режиме, поэтому system.pa | default.pa - пользовательский;
$ sudo nano /etc/pulse/system.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.5.0/27
load-module module-zeroconf-publish
Настройка клиента:
$ sudo nano /etc/pulse/default.pa
load-module module-zeroconf-discover
- Установить дефолтный синк:
$ pacmd list-sinks | grep -e 'name:' -e 'index'
$ pacmd set-default-sink *name или его *index
- на постоянно,
$ sudo nano /etc/pulse/system.pa
set-default-sink tunnel.srv0.local.alsa_output.platform-soc_audio.analog-stereo
- Пробросить тунель к серверу: можно как sink, так и source;
$ pactl load-module module-tunnel-sink-new server=192.168.5.30 sink_name=Remote channels=2 rate=44100
MULTICAST:
Отправляющая сторона:
### Load the RTP sender module (also configured via paprefs, see above)
load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
load-module module-rtp-send source=rtp.monitor
set-default-source rtp.monitor
Принимающая сторона:
load-module module-rtp-recv
Отправка более одного параллельного потока RTP через локальную сеть, назначив разные IP-адреса многоадресной рассылки каждому из них. link
rate=8000 format=ulaw channels=1 | byte - codec - *
Для multicast групп выделен специальный блок IP адресов, от 224.0.0.0 до 239.255.255.255.
# stream 1
pactl load-module module-null-sink sink_name=rtp1 format=s16be channels=1 rate=44100 sink_properties="device.description='rtp1'"
pactl load-module module module-rtp-send source=rtp1.monitor loop=0 destination=224.0.0.56
# stream 2
pactl load-module module-null-sink sink_name=rtp2 format=s16be channels=1 rate=44100 sink_properties="device.description='rtp2'"
pactl load-module module module-rtp-send source=rtp2.monitor loop=0 destination=224.0.0.57
- А затем прослушать на приемнике соответствующий IP
pactl load-module module-rtp-recv sap_address=224.0.0.56 # resp. 224.0.0.57
Ссылки по теме: