Raspberry Pi の音声出力を RTP(Real-time Transport Protocol)で同一ネットワーク上のデバイスに転送する。今回は X11 Forwarding を使って Raspberry Pi 上で実行している Chromium の音声を iPhone で再生できるようにしてみた。
pulseaudio
が起動していなければ起動しておく。pactl load-module module-rtp-send port=12345
でリニア PCM で送信することもできるけど、無線環境が良くないとブツブツ切れてしまうので、この後にエンコーダを経由させる。
pulseaudio --start
◆FFmpeg を使用する場合
入力フォーマットを -f pulse
で指定し、入力デバイスは -i ''
や -i 0
で指定する。出力フォーマットを -f rtp_mpegts
で指定しておかないとクライアント側で SDP ファイルを要求されるかもしれない。
ffmpeg -f pulse -i '' -c:a libmp3lame -f rtp_mpegts rtp://224.0.0.56:12345
◆VLC を使用する場合
入力デバイスに pulse://0
を指定する。
cvlc pulse://0 --sout='#transcode{acodec=mp3}:rtp{mux=ts,dst=224.0.0.56,port=12345}'
iPhone で RTP ストリームを開く。ここでは VLC を使う。
メニューの "Network" -> "Network Stream" 開く。
rtp://{アドレス}:{ポート}
を入力したら "Open Network Stream" を開く。
Raspberry Pi 上のサウンドが iPhone で再生される。
VLC はバックグラウンドで動作してくれるので画面ロックしてもサウンドはそのまま再生される。
Chromium にかかわらず、Raspberry Pi 上で Pulse Audio を使っているものであればすべて iPhone 側で再生することができるので、VLC なんかを実行させておいてジュークボックス代わりに使うこともできる。
iPhone 側は Bluetooth アダプタのような感じになる。一番いいのは Pulse Audio の module-rtp-send
で直接受信することなんだけど、端末のスペック不足なんだか、うちの無線LAN環境がしょぼいのかイマイチ帯域が安定しない…。
VNC だと普通音が鳴らないけどこの方法だとお音声ありでゲームもできるかなぁ。