ルギア君の戯言

雑多な記事。

Linux にある音楽を Windows にコピーすることなく WAN 越しかつセキュアに Windows で聞く

長いタイトルや(笑)


別に聞く側が Windows で無くてもええんけど、わかりやすくするため、Linux → Windows とする。

必要な物

  • Linux
    • PulseAudio (サーバーが動いている必要はない)
    • PulseAudio 対応プレーヤー (paplay, MPlayer, xine, Audacious, ...)
    • sshd (OpenSSH)
    • 22 番ポートが外部からアクセスできるようになっていること
  • Windows 側
    • TeraTerm with SSH
    • PulseAudio
    • (X アプリを使う時は) Xming, Cygwin-X などの X サーバー
  • その他
    • 両者とも localhost のポート 4000 番が使える状態 (ウイルス対策ソフトに注意)
      • 使えなければ別のポートでも OK。

手順

1. Windows から Linux にログインできることを確認し、終ったら一度切断する
2. TeraTerm の SSH 転送の設定で Linux (リモート) の 4000 番ポートを Windows (ローカル) の 4000 番ポートへ転送するように設定する。
3. Windows 側の PulseAudio の設定ファイル default.pa の内容は次のようにする (cf. リモートサーバのサウンド出力を手元のPCで再生する)

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 port=4000
load-module module-waveout

(接続許可は localhost のみでよい。ポートは 4000 とする。)
4. Linux にログインし、環境変数 PULSE_SERVER を localhost:4000 にセットする。

export PULSE_SERVER=localhost:4000

5. プレイヤーを起動して鳴れば成功。

mplayer -ao pulse hoge.ogg

思ったこと

48000Hz × 16ビット × 2 チャンネルの PCM を送る場合、大目に見て 2Mbps *1の高速転送を必要とする。
TCP 通信なので、パケット消失などが起こると突っかかる。


ただ、実験に使った家⇔大学間の通信 (MPlayer 使用/実測値 1.5Mbps/SSH の暗号化は 1024 ビット RSA 使用) では時々ラグるが安定していれば聞くのには耐えられ、実用に足りる。X アプリと同時だと厳しいかも。


ALSA を使う場合も転送できる (alsa-plugins-pulseaudio を Linux にインストールしておく) が、一度 ALSA を経由することになるためラグの頻度が上がる。timidity を使うことはもはや実用的では無い。

*1:44100 Hz でも 1.8Mbps 以上必要