LINUX.ORG.RU

(howto) переброс аудиопотока на сервер/обратно на лету

 


2

2

промучавшись вчера с этим несколько часов, решил запостить решение на ЛОР.

задача: есть домашний сервер, в одной сети с ноутбуком, на сервере - PulseAudio (слушает по TCP), к серверу подключена акустика; нужно перебрасывать аудиопоток с ноутбука на сервер/обратно по хоткею.
решение: нам понадобится PulseAudio (локальный сервер+клиент) на клиенте (ноутбук), PulseAudio Сервер (с плагином TCP) и нехитрый скрипт.
(на сервере) default.pa:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.0/16;10.8.12.0/24
(естественно, указываем свою подсеть)
(на клиенте) switch-sink.sh:
#!/bin/bash

# settings 
pulse_server=10.8.12.94

# connect to server
pacmd list-sinks | grep -q tunnel-sink.$pulse_server || pacmd load-module module-tunnel-sink server=$pulse_server

# get vars
default_sink=$(pacmd list-sinks | sed -n $(( `pacmd list-sinks | grep -n alsa_output| grep -v hdmi | cut -d: -f1`-1 ))p | grep -oE [0-9])
server_sink=$(pacmd list-sinks | sed -n $(( `pacmd list-sinks | grep -n tunnel-sink.$pulse_server|cut -d: -f1`-1 ))p | grep -oE [0-9])
current_sink=$(pacmd list-sinks|grep '*'|awk '{ print $3 }')

# debug
# echo "local [$default_sink] server($pulse_server) [$server_sink] current [$current_sink]"
                                                                                                                                                                   
# what's sink?                                                                                                                                                     
case $current_sink in
        $default_sink)
                # default sink. moving to server sink.
                pacmd set-default-sink $server_sink
                pacmd list-sink-inputs | grep index | while read line; do
                        pacmd move-sink-input $(echo $line | cut -f2 -d' ') $server_sink
                done 
                notify-send -i notification-audio-volume-medium "Playback Device" "Now on Server Sink ($pulse_server)";;
        $server_sink)
                # server sink. moving to server sink.
                pacmd set-default-sink $default_sink
                pacmd list-sink-inputs | grep index | while read line; do
                        pacmd move-sink-input $(echo $line | cut -f2 -d' ') $default_sink
                done 
                notify-send -i notification-audio-volume-medium "Playback Device" "Now on Default Sink (local device)";;
        *)
                echo "What to do? Current sink - [$current_sink] not local/server."
esac

никакие параметры скрипт не принимает. в скрипте используется также libnotify для наглядности переключения.

собственно, всё :3 // в вики лень пилить

★★★★★

Последнее исправление: snoopcat (всего исправлений: 1)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.