mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を 新しいブログ に移行しています(一部の国、ISP からは閲覧できません)

iPhone を Raspberry Pi のリモートスピーカーにする

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" 開く。

f:id:mattintosh4:20160102171417p:plain:h480

rtp://{アドレス}:{ポート} を入力したら "Open Network Stream" を開く。

f:id:mattintosh4:20160102171426p:plain:h480

Raspberry Pi 上のサウンドが iPhone で再生される。

f:id:mattintosh4:20160102171432p:plain:h480

VLC はバックグラウンドで動作してくれるので画面ロックしてもサウンドはそのまま再生される。

f:id:mattintosh4:20160102171437p:plain:h480


Chromium にかかわらず、Raspberry Pi 上で Pulse Audio を使っているものであればすべて iPhone 側で再生することができるので、VLC なんかを実行させておいてジュークボックス代わりに使うこともできる。

iPhone 側は Bluetooth アダプタのような感じになる。一番いいのは Pulse Audio の module-rtp-send で直接受信することなんだけど、端末のスペック不足なんだか、うちの無線LAN環境がしょぼいのかイマイチ帯域が安定しない…。

VNC だと普通音が鳴らないけどこの方法だとお音声ありでゲームもできるかなぁ。