本連載の「第86回 UbuntuをWindows 7のサーバとして使う(2)DLNAサーバ編   」「 第109回 HDDレコーダを使いこなす(1)DLNAクライアント   」「 第111回 UbuntuからHDDレコーダを使いこなす(2)動画ファイルのダウンロード   」では、DLNAやUPnPに関するレシピをお届けしました。   
今回はGUPnP というソフトウェアを使い、このDLNAやUPnPをもう少し掘り下げて説明してみます。 
UPnP?DLNA?  
DLNAに関して調べていると必ず、UPnPという言葉も目にするはずです。この2つの区別がいまひとつわからずに混乱している方も多いのではないでしょうか? そこで、まずはこの2つが何なのか、まとめておきましょう。  
UPnP もDLNA も、互いに独立した業界団体です。ローカルネットワークを介したハードウェアの相互運用性の向上がその目的です。簡単に言ってしまうと「ネットワークにつなぐとすぐに使える=特定の用途を簡単に提供できる製品を作る」ということです。これを達成するためにガイドラインを策定し[1] 、そのガイドラインの認証テストを行なっています。    
UPnPのガイドラインにはマルチメディア向けガイドラインのほかに、調光装置向け、インターネットゲートウェイ向け、プリンター向け、スキャナー向け、固定電話向けなど、多くのガイドラインを含んでいます。中には、日差しを避けるブラインド向けのガイドラインもあります。そしてそれらガイドラインが共通して用いるネットワーキング機能を、UPnP Device Architectureとして定めています。        
対してDLNAは、映像・音声・画像などマルチメディアを扱う製品のみに特化したガイドラインを出しています。UPnPのマルチメディア関連ガイドライン(AV architecture)に上乗せする形で、扱うことのできるファイルフォーマットやDRM(Digital Rights Management)への対応などを独自に定めています。UPnPなしにはDLNAは成り立たないと言えます。        
[1] UPnPのガイドラインはISO/IEC 29341シリーズで標準化されています。ISOから購入することも可能ですが、UPnPのインターネットサイトから入手する ことも可能です。しかし、DLNAのガイドラインに関しては加盟料を支払いアライアンスに加わらなければ参照することができません。  
GUPnPで見る、自宅のUPnPノード  
GUPnPは開発者のためのツールですが、ユーザーはこれを用いることで、自分のネットワークにあるUPnPノードを見つけたり、装置やソフトウェアがうまく使えないといったトラブルシュートに利用することができます。   
導入するにはUbuntuソフトウェアセンターで「gupnp-tools」をインストールしてください。このパッケージは以下のソフトウェアを提供します。  
gupnp-universal-cp 
UPnPのありとあらゆる機能のControl Pointとなるソフトウェア 
gupnp-av-cp 
UPnPのAVガイドラインにしたがって作られたノードの一覧を表示し、簡単な操作をする  
gupnp-network-light 
UPnPの調光ガイドラインの仮想ノードを設ける 
gupnp-upload 
MediaServer機能を持ったUPnPノードにファイル転送を試す 
gssdp-discover 
ネットワーク内に存在するUPnPノードからのSSDPメッセージを表示する 
 
まずは、自宅のネットワークに存在しているUPnPノードを一覧してみましょう。UnityのDashで「gupnp-universal-cp」を検索し、「 GUPnP Universal Control Poiint」を起動してください。    
図1  GUPnP Universal Control Pointの画面ウィンドウ左に、ネットワーク内にあるUPnPの各ノードが提供する機能が表示されます。ここでは、MiniDLNA、MediaTomb、Windowsオペレーティングシステムが提供するMediaServer機能と、Windows Media PlayerによるMediaRenderer機能が認識されています。筆者はUPnP/DLNA対応の家電を持っていないためこれだけしか表示されませんが、普通の家庭であればテレビやレコーダーなどが現れると思います。       
UPnPノードの種類 
UPnPのノードには2種類あり、ひとつが「Control Point」 、もうひとつが「Root Device」です。     
Control Pointはその名の通り、他のノードを制御するノードです。 
Root Deviceは、ファイルサーバー機能やプリンター機能といったUPnPのサービスを提供するノードです。ひとつのIPアドレスに対応しており、ひとつのノードが複数のサービスを提供している場合もあります。先ほどの「GUPnP Universal Control Poiint」では、同一のWIndowsマシンが提供する2つのサービスが別々に見えていました。     
ノードを相互認識する仕組み 
UPnPの基本部分は、ノードが相互を認識するところにあります。簡単に説明してみます。 
UPnP対応ハードウェアやソフトウェアはネットワークに接続されると、ネットワーク上でパケットをやりとりするためにIPアドレスを取得します。これはUPnPでは「Addressing」と呼んでいます。具体的な方法はDHCP、あるいは固定IPアドレス、あるいはlink-localを解決する実装(BonjourやAvahiの機能の一部)など、UPnPの外の技術に頼っています。        
次にUDPを使い、自分の存在と提供するサービスの概略を通知するメッセージをマルチキャストします。すでにネットワークに接続されているソフトウェアやハードウェアはこのメッセージを受け取り、自分と関係のあるものであれば応答します。この段階はUPnPでは「Discovery」と呼び、一連の手続きはSSDP(Simple Service Discovery Protocol)と名付けられており、メッセージの内容はHTTPに順じています。        
ここまでを終えると、関係のあるノード同士がお互いのIPアドレスを把握しますので、以降はTCPを使ったHTTPによってXMLをやり取りすることで相互運用をします。この際やり取りされるXMLの内容を大別すると、以下の3つとなります。なお、( )内はUPnPでの用語です。    
Control Pointの要求に応じて、Deviceはそのメーカー情報や、提供するサービスの詳細を送信する(Description)    
Control Pointは操作情報を送信し、Deviceはそれに応答する(Control)   
Deviceは自分が持つControl Pointの登録リストに対し、自分の状態変化を通知する(Eventing)   
 
このようにしてUPnPは、既存のインターネット技術を組み合わせて相互運用を実現しています。 
MediaServerとMediaRenderer 
UPnPの定めている様々なガイドラインの中でも広く使われているのが、AV Architectureに定められているMediaServerとMediaRendererです。簡単に機能を説明すると、映像・音声・画像ファイルに対して、MediaServerはそれらを出力する役割を、MediaRendererはそれらを受け取って再生する役割を果たします。この2者とControl Pointをセットにしてより詳細を定めたガイドラインがDLNAとなります。家電製品のうちDLNA対応をうたうものはこれら3者のいずれか、もしくは複数の機能を備えたものとなります。       
MediaServer機能のオープンソースの実装例として代表的なものはMediaTomb とMiniDLNA でしょう。Ubuntuではどちらもパッケージで提供しているため、興味のあるかたはインストールしてみてください。なお、MediaRenderer機能のオープンソースの実装は、筆者は残念ながら知りません。   
これらオープンソースの実装は、DRM付きコンテンツへは対応していません。これは、DRMは権利関係の課題を解決する必要がありオープンソースソフトウェアとは相容れないという事情があるからです。  
GUPnPでは、「 GUPnP AV Control Point」( gupnp-av-cp)というソフトウェアで、MediaServerの提供するファイル一覧や、MediaRendererの簡単な遠隔操作をする機能も提供しています。   
図2  GUPnP AV Control Pointの画面WindowsとMedia Playerの場合 
Microsoft社のWindowsはVista以降、このUPnPのMediaServer機能をオペレーティングシステムのいち機能として提供しています。Windowsの操作画面では「メディアストリーミング」と名付けている設定項目となります。   
メディアストリーミングを使うには、現在参加しているネットワークに対して「ホームグループ」を作成します。「 コントロールパネル」の項目「ネットワークの状態とタスクの表示」から、「 ホームグループと共有に関するオプションの選択」とたどると、以下のウィンドウが表示されます。        
図3  ホームグループの作成ウィンドウホームグループを作成したら、先ほどの「GUPnP Universal Control Point」のウィンドウを確認してみましょう。おそらく、Windowsマシンが出現したかと思います。これだけでUPnPノード間、あるいは同一のホームグループに属するWindows機同士でファイルを交換できるようになります。     
図4  「 LAPTOP: windows」というのが今回ホームグループに参加させたWindowsマシン ファイルを再生するMediaRendererの機能は、Windows Media Playerのバージョン11以降が提供します。設定するには操作画面の「ストリーム(R)」という部分をクリックし、リモート制御を許可するように設定を変更してください。    
図5  Windows Media Playerでリモート制御を許可する設定を変更すると、「 GUPnP AV Control Point」に表示されて操作可能となります。「 GUPnP AV Control Point」にはバグがありって再生のアクションをうまく送ることができないようですが、再生を停止させたりボリュームを遠隔操作することは可能なので試してみてください。   
動画プレイヤー(Totem)やRhythmboxの場合   
Ubuntuに標準でインストールされているTotemや、12.04から再びデフォルトのメディアプレイヤーとなるRhythmboxですが、以前はプラグインをインストールすることでUPnPのノードと連携して動作することができました。しかし現在は、UPnP対応プラグインが古いためにできなくなりました[2] 。UPnPのMediaServerを見つけることはできなくなりましたが、URIを指定することでストリーミングすることは可能です。現在これらプラグインはGNOMEプロジェクトのGrilo を使って作りなおされている最中ですが、Ubuntuの次期リリースである12.04には間に合わないかもしれません。       
Bansheeの場合 
Ubuntu 11.10まではデフォルトのメディアプレイヤーであるBansheeには、UPnP対応のプラグインは提供されていないようです。  
VLCメディアプレイヤーの場合 
VLCメディアプレイヤーは様々な映像・音声コーデックに対応したプレイヤーで、愛用している方も多いと思います。VLCはデフォルトで、MediaServerからファイルを受け取って再生することができます。遠隔コントロールはできないため、MediaRenderer機能を備えているわけではありません。    
「表示」メニューで「プレイリスト」を開き、「 ローカルネットワーク」から「ユニバーサルプラグ&プレイ」を選択すると、現在ネットワーク上にあるMediaServerのファイルが一覧表示され、選択することで再生することができます。        
図6  VLCの画面。MediaTombが提供するディレクトリが見えているTotemやRhythmboxが使えなくなった現在、おそらく唯一の選択肢になるかと思います。