2017年3月22日水曜日

自宅NASの音楽ファイルを自宅外でストリーム再生する

自分は CD とかは基本的に mp3 にして NAS に入れてあり,自宅での普段の再生はそれを Linux ベースの音楽再生サーバを介して行っている.この覚え書きブログに何度も登場している,Voyage MPD や moOde audio,Volumio,Rune Audio がそれだ.

これらのシステムは静的なネットワーク内では非常に快適に動作する.職場のネットワークからも sshfs を使うことで,インターネット越しに自宅サーバを介して NAS をマウントして Voyage MPD を使って再生できている.

そうなると次にやりたくなるのが出先,あるいは移動中に,スマホの回線を介してこの音楽ファイルを再生するということになる.これに関しては,gnump3d というシステムを試したことがある.これは Windows では問題なく動くものの,Android 上では日本語のファイル名に対応できるクライアントがない.gnump3d 自体,すでに10年近く前に開発が止まっているようであり,クライアントも更新される期待は薄い.



ところで,自宅の NAS は Netgear の ReadyNAS 104 というのを使っている.これ自体,Linux ボックスなのだが,公式に導入できるアプリの中に,Squeeze server があった.現在は Logitech Media server というようだが,日本では超マイナーなネットオーディオシステムである.PC や Linux 上でサーバを走らせ,それをクライアントで受けて再生するのだが,後で述べるようにやや特殊な構造になっている.以前,クライアントの Squeezebox touch という再生デバイスを個人輸入して使ってみたこともあるが,Voyage や moOde が安定して実用レベルになったので,現在は死蔵状態になっている.Squeeze server 機能は,以前使っていた Buffalo の NAS にもあったし,Linux 上で動くサーバプログラムもフリーで入手できる.Raspberry pi や Beaglebone を使った再生システムもある.

日本ではマイナーでも,Squeezebox は現在でも Android 上のクライアントがあり,現役のネットワークオーディオシステムなので,これを使ってみることにした.

まず,ReadyNAS に Squeezebox server を入れて動くようにする.これは管理画面からアプリを選択してインストールするだけ.あとは,ReadyNAS の 9000 番ポートに web ブラウザでアクセスすれば,音源ファイルの置き場などを設定できる.このとき,セキュリティのためにユーザ名,パスワードを設定しておく.

さて,Squeezebox のシステムは以下のような構造になっている

(データファイル) - Squeezebox server +- プレイヤ
                                                       +- コントローラ

データストレージはともかく,単純なサーバとクライアントという構成ではなく,サーバ,プレイヤ,コントローラという三つがセットで動く.このような構造になっているので,プレイヤとコントローラは別マシンでもかまわず,たとえば独立の再生端末である Squeezebox Touch での再生を,コントローラを入れた PC から操作するということもできる.Squeezebox Touch は再生端末,すなわちプレイヤであると同時にコントローラでもあるので,ここから (自分だけでなく) 別のプレイヤをコントロールすることもできる.上述の,ReadyNAS 用の Squeezebox server には web インターフェースがあるが,これがコントローラとして使えるので,webベースでプレイヤをコントロールすることもできる.

今回,Android 端末ではプレイヤとして SB player を,コントローラとしては Squeeze Ctrl を使用した.いずれも Playストアで入手できる有償ソフトである.プレイヤは必須で,フリーのものが見つからなかったのでいくつか試してみた結果,比較的使いやすい感じがした SB player を選んだ.コントロールは web ブラウザからもできるのでなくても使えることは使えるのだが,やはり Android 上からは使いにくいので,同じ作者の Squeeze Ctrl を使った.SB PlayerとSqueeze Ctrl は同一のスマホ上にインストールするので,この間の通信は問題ない.問題は,音源ファイルを管理する Squeezebox server が,ネットの向こうにあることである.必要なのは,自宅のルータの向こうにある ReadyNAS 上で動いている Squeezebox server に,スマホの SB Player からアクセスできるようにすることである.それも安全に.

ということで,最初は VPN を使うとかを試していたのだが,どうも今使っている通信環境では VPN 自体をブロックしているらしく,うまくいかない.ということで,SSHトンネルを使うことにした.

接続は Connect Bot というアプリを利用.鍵認証でパスワードレスで自宅の Linux サーバに接続できるようにする.

1) Connect Bot で鍵を生成する
2) 生成した鍵を Linux サーバに移して,~/.ssh/authorized_keys に追記する
3) Linux サーバへの接続を確認

ポートフォワードを設定する.local の 3483 番ポートと 9000 番ポートを「Squeezebox Sever の動いている ReadyNAS」の 3483 番ポートおよび 9000 番ポートに転送するようにする.3483 番は SB Player がデータファイルにアクセスするのに使い,9000 番は Squeeze Ctrl がデータを管理・検索するのに使うようだ.

ちなみに,今回は Squeezebox Server 自体は ReadyNAS 上で動いているので,Linux サーバはネットワークを中継する働きしかしていないが,もちろん,このサーバ上で Squeeze Server を動かすこともできる.

次に SB Player の設定.接続先の名前は適当に付けてよく,接続先を localhost にする.
Connect Bot で SSH トンネルを開通させた状態で SB Player の [Connect] を押すと,接続される.

次に Squeeze Ctrl の設定.Preferences の Servers で Use Local Server を ON.

実際に使うときは,

1) Connect Botを起動し,Linuxサーバに接続する
2) SB Player を起動し,[Connect]ボタンを押す
3) Squeeze Control を起動して再生をコントロールする

終了は,すべて終了してしまえばよい.Connect Botで接続しっぱなしだと,バックグラウンドで通信が続くので入れっぱなしというわけにもいかない.
手順が多いのが難だが,自宅のファイルをどこでも再生できるのは便利ではある.

0 件のコメント:

コメントを投稿