今時のファイルサーバーならメディアサーバーとして使用できるようになっていないとだめでしょう、と言うことで。
メディアサーバーと言えば今時はDLNAなのでDLNAをセットアップしたわけです。
今回の話題はDLNA本体ではありません。それにまつわるプレイヤー編と言うところでしょうか。
DLNAサーバーは相変わらずMediaTombにやってもらっています。MySQLを使った状態にする方がたぶん安定すると思います。
ルーターをまたいだDLNAには問題あり
この問題は他のサイトでも書かれていることですが、DLNAによるLAN内でのメディア配信を考えてネットワークを構築するわけですが・・・。
ルーターをまたぐとDLNAサーバーを見つけることが出来なくなってしまいます。つまり、同じルーター内のDLNAサーバーしか発見できないわけです。
これはDLNAサーバーの発見手順に問題があります。DLNAサーバーを発見するときには以下のような手順をとります。
- UDPによるブロードキャストパケットを発行してUPnPを使ってDLNAサーバーが稼働しているIPアドレスを検索
- DLNA(UPnP)サーバーがブロードキャストパケットに応答して自身のDLNAに関する情報を送信元に返答
- 以降はDLNAサーバーに直接必要なプロトコルを用いて通信
問題なのは「ブロードキャストパケットは家庭用ルーターなどでは同一サブネット内にしか配信されない」というポイントにあります。
つまり、ルーターをまたぐなど別のサブネットにDLNAサーバーが置かれるとUPnPクライアントはDLNAサーバーを発見できない、と言うことになります。
iOSやAndroidのDLNAクライアントはその辺が分かっているらしい
スマートフォン系の場合は無線LANの接続場所によってネットワークが切り替わることや、VPNなどで接続したネットワーク先で使用することなどを踏まえて、直接DLNAサーバーを指定できる物があります。
このblogで紹介した物としてはiOS系であればPlugPlayer(ただし有料)、Android系であればUPnPlayがあります。
これらを使うことで異なるサブネットに存在するDLNAサーバーに対して直接の接続を行いDLNAの規格を使った処理が可能になっています。
VPNによる接続でブロードキャストパケットが届かない場合も同様ですね。このあたりはうれしいのですが・・・。
ちなみにポートさえあいていればグローバルIPであってもDLNAでの通信が出来るはずです。そんな危険なこと(元々LAN内部で使用するための規格なので)を考える人はいないと思いますが。
Windowsのクライアントにこの機能を持った物が見つからない
というか、DLNAのメディア検索がいろいろな意味でやりづらいな、と思うのは気のせいでしょうか。それとも検索不足なのでしょうか・・・。
Win7以降標準となっているWindowsMediaPlayer12の場合はUPnPによる検索をほぼ勝手に行いますのでどうしようもないですし、有料のクライアントをこのために試すのもどうかと思いますし、
vlcの場合も組み合わせて動くらしいプログラムはうまく直接指定が出来ないですし・・・。
Windows側から似たようなことをするためには?
あくまで目的としては
- ファイルが項目別のような形になって見ることが出来る
- ファイルをダウンロードすることなくストリーミングによって再生が出来る
- 出来る限り汎用のプレーヤーで見ることが出来る
ですので、それらを兼ね備えた方法で。
ApacheなどのHTTPサーバーに対してIndexesによるディレクトリ一覧公開+ローカルIPのみAllowにすることによってメディアディレクトリを公開すればよい
・・・単純にhttp経由でストリーミングすればよい、と考えました。
リスト化処理についてはサーバー内部でのディレクトリ階層による分類+ブラウザによる一覧取得を使うという考えに。
確かにこれだと汎用的なのですが・・・。DLNAに比べるとちょっと汎用性に劣るような気がしないでもない、と思ったり。
DLNAが出来る前まではこの方法が(メディアのリスト公開には)一般的だっただけにちょっと微妙な感じです。
DLNAとHTTPによるLAN内メディアサーバーがとりあえず成立
まあ、LAN内部だけですのでこれで良しとしても問題ないでしょう。
個人的にはWindows版のDLNAクライアントに関してはもう少し機能がある物が出てきても良いのでは?と思います。
Windows版でVPN先の、とか異なるサブネットの、とかという状況がほとんど無いのは理解しますが、こういう例外もあるので。
終いには規格を調べて直接アクセス+リスト作成+プレーヤにデータを渡すような物を作ろうかと思いましたが・・・。