Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 892

X11 Forwarding で音声を再生する

$
0
0

ArchLinux をインストールして NASとして使っている Raspberry Pi。SSHX11 Forwarding を使って VLCや ffplay(avplay)で音楽再生したいなぁ、と。あと、Chromiumで実行している艦これの音声を拾ったりとか。

ここでは Pulse オーディオを使用する。Pulse サーバとクライアントの設定にはいくつかの方法があるが、今回は pulseaudio同士で接続する方法と RTP による送受信を試した。

RTP で再生

1.「Pulse サーバで RTP 送信を行う」

module-rtp-sendをロードする。

pactl load-module module-rtp-send

特に何も指定しない場合、224.0.0.56で発信される。

2.「クライアントで受信を行う」

pulseaudioを使用する場合は module-rtp-recvモジュールをロードするだけでよい。これだけで SSHクライアントマシンがスピーカー扱いのようになる。

pactl load-module module-rtp-recv

音声をキャプチャしたりする場合は、VLCや ffplay(avplay)などの RTP に対応しているものがあればよい。(module-rtp-sendでポートを指定しなかった場合は netstatなどで調べておく必要があるかもしれない)

ffplay rtp://224.0.0.56:46434
vlc rtp://224.0.0.45:46434

X11 Forwarding を使って Raspberry Pi で Chromiumを起動して、クライアント側の ffplay で音楽をキャプチャしてみた。

f:id:mattintosh4:20160102004102p:plain

設定ファイルを使用する場合(module-rtp-send)

/etc/pulse/default.pa~/.config/pulse/default.paにコピーし、module-rtp-sendを有効にしておけば実行中はどのデバイスからもアクセスすることができる。

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

あとは受け側で module-rtp-recvをロードするだけで勝手に再生される。

pactl load-module module-rtp-recv

TCPで再生

1.「Pulse サーバで TCPモジュールをロードする」

SSHクライアント側でモジュールをロードする。ここで言う「SSHクライアント」とは「Pulse サーバ」である。今回は認証を行わないことにするが、auth-ip-acl=127.0.0.1などとすることで許可するクライアントを指定することもできる。

Pulse サーバの起動とモジュールのロードは pulseaudioコマンドか pactlコマンドで行うことができる。

pactl load-module module-native-protocol-tcp auth-anonymous=true

または

pulseaudio --start--load="module-native-protocol-tcp auth-anonymous=true"

auth-anonymous=trueauth-anonymous=1とも書けるみたい。

2.「PULSE_SERVER 環境変数で Pulse サーバへ接続する」

SSHでサーバへ接続した後、アプリケーションを起動する。その際、PULSE_SERVER環境変数で Pulse サーバの IP アドレスを指定する。ここでは「SSHクライアント = Pulse サーバ」ということになるので SSH_CLIENT環境変数から IP アドレスを抜き出して使う。

PULSE_SERVER=`echo $SSH_CLIENT| awk '{ print $1 }'` vlc *.m4a

awkを使わずにシェルで置換展開が使える場合はそちらの方が楽である。

PULSE_SERVER=${SSH_CLIENT%% *} vlc *.m4a

設定ファイルを使用する場合(module-native-protocol-tcp

Pulse サーバ(SSHクライアント)

pulse の設定ファイルをコピーする。

cp /etc/pulse/default.pa ~/.config/pulse

コピーした ~/.config/pulse/default.paを編集して module-native-protocol-tcpをロードするようにしておく。

#load-module module-native-protocol-tcp
load-module module-native-protocol-tcp auth-anonymous=true

pulseaudioを再起動する。

pulseaudio --kill
pulseaudio --start

Pulse クライアント(SSHサーバ)

Pulse クライアント用の設定ファイルをコピーする。

cp /etc/pulse/client.conf ~/.config/pulse

コピーした ~/.config/pulse/client.confdefault-serverに Pulse サーバ(SSHクライアント)の IP を指定する。

; default-server =
default-server = 192.168.1.2

pulseaudioを再起動する。

pulseaudio --kill
pulseaudio --start

SSHクライントから接続し、アプリケーションを実行すれば Pulse サーバ側で音が鳴る。Pulse サーバの IP アドレスは ~/.config/pulse/client.confに書いてあるので PULSE_SERVER環境変数の設定は不要。



Viewing all articles
Browse latest Browse all 892

Trending Articles