DLNAサーバーとクライアント

普段は専らDAAP*1自宅サーバーからストリーミング中なんだけど、諸事情でdaapでは共有できないアルバム集ができつつあるのでdlnaと並行して配信できないか検討。

サーバー

Ubuntudlnaサーバーを導入するとすると、主な候補は以下の通り。

  • gMediaserver
  • uShare
  • mediatomb

gmediaserverはaptレポジトリに入ってるので、

$ sudo apt-get install gmediaserver

で導入可能。設定ファイルは /etc/default/gmediaserver にあるので、適宜設定してやって

$ sudo /etc/init.d/gmediaserver start

でデーモンとして稼働できる。

んだが、投げてるパケットを見てやると、何かServer側シグネチャの記述がおかしい。

HTTP/1.0 200 OK
CONTENT-LENGTH: 575
CONTENT-TYPE: text/xml; charset="utf-8"
DATE: Sat, 17 May 2008 00:00:00 GMT
EXT:
SERVER: Linux/2.6.15-26-amd64-server, UPnP/1.0, Intel SDK for UPnP devices /1.2

一応、gmediaserverはgnuの一プロジェクトとして進んでいるはずなんだけどな。

で、いろいろいじくってみても1000曲程度で音を上げてしまい、レスポンスもよろしくないので交換。結局、mediatombのバージョンがまだ0.1なので、バージョンが1.0系列となって安定していると思われるuShareで行くことに。

uShareにはlibdlna, libupnpが必須なのと、libdlnaにはlibavformat(ffmpeg)が必須なので、ffmpeg-devあたりも先にインストール。自分は既にソースからコンパイルしたものがあったので、それを流用。あとはlibupnp→libdlna→uShareの順にコンパイルすれば問題ない。

クライアント

現状、まともに使えるフリーのDLNAクライアントソフトウェアは、ぶっちゃけ無いと言っても過言じゃない。あえて挙げれば、

程度。ただ、前者はdlna部分はRDLNAで、再生はVNCで、という感じなので、ランダム再生とか連続再生には対応できない。後者は後者で、gStreamerを無理矢理windowsに移植したような感じで、ハードウェア負荷が尋常じゃないのでまともに使えない。

ないなら作るべ、ということで、ライブラリが公開されててかつ手っ取り早くできるということで、PerlNet::UPnPを選択。フロントエンドは古き良きHTAでいいかなと思ってたら、

  • Perlの処理部分がかなり重い
  • HTAでDOM操作するとelement数が1000を超えたあたりから急激に重くなる

ということで実使用不可。

perlは詳しくないからあれだけど、Net::UPnPがせめてアドレスとディレクトリ(ControlPoint)を指定すれば再接続できるような設計ならいいんだけど、いちいちサーバーへの接続ハンドラを確保してから情報を読みに行くという仕様なので、どうしても軽量化が難しい。

なにかいいクライアントはないのかね*2

というか、いじってて思ったがdlna全般結構不安定な印象がある。まぁ数千ものコンテンツを管理するというのはなかなか無いのかもしれないが、仕様非公開なDAAPが難なくこなしている量でさえ音を上げるのはちょっとどうかなと思う。まだまだ勃興途中の技術だとは思うが、今後の動向が少し気になる。

*1:mt-daapd+iTunes

*2:WMP11はXP版のみDLNAクライアント機能が付いていない。Vista版ならあるんだが…。