最初は、コントロール ポイントがプログラムしたいものだと思っていましたが、いくつかのライブラリのドキュメントにざっと目を通してみると、コントロール ポイントはサーバーがデバイス上で提供するメディア ファイルを再生したいようです。 、コントロール ポイントは外部ソフトウェアを使用して実行されます (ファイル自体を再生するメディア レンダラーとは異なります)。
UPnP AV と互換性を持たせるには、ソフトウェア アプリケーションまたはハードウェア デバイスに少なくとも 1 つの UPnP AV デバイス (MediaServer、ControlPoint、または MediaRenderer) とその必須サービスを含める必要があります。複数のデバイスを提供するアプリケーションがあるため、実際には論理的な分離が見られない場合があります。多くの場合、ビデオ プレーヤーは、サーバーを参照してそのコンテンツをダウンロードするための ControlPoint サービスのみを実装します (コンテンツは別のサーバー上にある場合もあります)。
サーバーに接続し、メディア リストにインデックスを付けて、任意のトラックにジャンプし、再生、停止、一時停止、次へ、前へ、および音量を制御できる機能が必要なだけです。ただし、ファイルはサーバー側で再生する必要があります。
UPnP は、デバイスによって実装される必要があるいくつかのサービスを定義します (たとえば、MediaServer は DirectoryService を提供する必要があります)。すべてのサービスには、必須のアクションとオプションのアクションがあります (たとえば、メソッドを介して DirectoryService を参照できますBrowse
)。目的を達成するには、サーバーに UPnP MediaServer (コンテンツの閲覧に必要) と UPnP MediaRenderer (再生の制御に必要) を実装する必要があります。UPnP ControlPoint は一種のリモコンとして機能します。サーバーを参照し、ファイルを再生するサーバーを選択するために使用されます。
ブラウズ リクエストは次のようになります (ObjectID 0 は常にツリーのルートを示します)。
<Browse xmlns:u =" urn:schemas-upnp-org:service:ContentDirectory:1 ">
<ObjectID>0</ObjectID>
<Filter></Filter>
<RequestedCount>0</RequestedCount>
<StartingIndex >0</StartingIndex>
<SortCriteria ></ SortCriteria>
<BrowseFlag> BrowseDirectChildren </BrowseFlag >
</u:Browse>
サーバーは、次のような応答で応答します。
<DIDL-Lite>
<item id="1" parentID ="0" restricted ="1">
<upnp:class>object.item.videoItem </upnp:class>
<dc:title>Video file</dc:title>
<upnp:artist>John Doe</upnp:artist>
<upnp:genre>Action</ upnp:genre>
<upnp:director>John Doe Jr.</upnp:director>
<res protocolInfo="http-get:*:video/mpeg:*" resolution ="352x288">
http://10.20.30.40:12345/ExportContent?id=1
</res>
</item>
</DIDL-Lite >
この場合、サーバーにはビデオ アイテムが 1 つしかありません (通常、サーバーには多くのアイテムを含む複数のフォルダーがあります)。このres
要素には、リソース自体に関する情報が含まれます (リソースの場所、使用するトランスポート プロトコル、MIME タイプなど)。あなたの場合、サーバーはアドレスとして「localhost」で応答することさえでき、ファイルのダウンロードを防ぎます。とにかく、サーバーの MediaRenderer 部分はそれにアクセスできるはずです。
出会ったすべてのライブラリを覚えているわけではありませんが、Cling、Fraunhofer FOKUS、CyberLink など、よく言及される名前が含まれていました。
個人的にはCyberLink for Javaをお勧めします。MediaServer を実装するために使用しましたが、ControlPoint または MediaRenderer を実装するのにも十分です。さらに、UPnP用開発者ツール (元は Intel UPnP ツール)やLinux 用 GUPnP ツールなどの UPnP 開発者ツールを入手する必要があります。GUPnP は、C 用の UPnP ライブラリも提供します。これらの開発者ツールを使用すると、UPnP コマンドを呼び出してデバッグすることができ、開発中に非常に便利になります。もう 1 つの有用なリソースは、UPnP コンソーシアムのUPnP デバイスの説明です。