4

UPnPメディアサーバーと対話できるある種のリモートコントロールを作成する必要があります。

UPnP AVスタックには、メディアサーバー、メディアレンダラー、コントロールポイントの3つのアプリケーションがあることを読みました。最初は、コントロールポイントをプログラムしたいと思っていましたが、いくつかのライブラリのドキュメントをざっと読んだ後でも、コントロールポイントは、サーバーが提供するメディアファイルをデバイス上で再生したいと思っているようです。 、コントロールポイントは、外部ソフトウェアを使用して実行されます(メディアレンダラーとは異なり、ファイル自体を再生します)。

私はこれを正しく理解しましたか、それとも完全に間違っていますか?

さらに、使いやすいライブラリが見つかりませんでした。これはおそらく私のスキルの低さによるものですが、多くの図書館の文書化はかなり悪く、不完全であると感じています。

出会ったすべてのライブラリを覚えているわけではありませんが、Cling、Fraunhofer FOKUS、Cyber​​Linkなどのよく言及される名前が含まれていました。私はいくつかのドキュメントを含む彼らのウェブサイト上のほとんどのものを読みましたが、私が望むようにそれらをどのように使用できるかを実際に見つけることができませんでした。

サーバーに接続し、メディアリストにインデックスを付けて、どのトラックにもジャンプできるようにし、音量を再生、停止、一時停止、次、前へ、制御できるようにするものが必要です。ただし、ファイルはサーバーサイドで再生する必要があります。

JavaやC#でこのような素晴らしいことを知っていますか?よろしくお願いします。:)

4

1 に答える 1

1

最初は、コントロール ポイントがプログラムしたいものだと思っていましたが、いくつかのライブラリのドキュメントにざっと目を通してみると、コントロール ポイントはサーバーがデバイス上で提供するメディア ファイルを再生したいようです。 、コントロール ポイントは外部ソフトウェアを使用して実行されます (ファイル自体を再生するメディア レンダラーとは異なります)。

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、Cyber​​Link など、よく言及される名前が含まれていました。

個人的にはCyber​​Link for Javaをお勧めします。MediaServer を実装するために使用しましたが、ControlPoint または MediaRenderer を実装するのにも十分です。さらに、UPnP用開発者ツール (元は Intel UPnP ツール)Linux 用 GUPnP ツールなどの UPnP 開発者ツールを入手する必要があります。GUPnP は、C 用の UPnP ライブラリも提供します。これらの開発者ツールを使用すると、UPnP コマンドを呼び出してデバッグすることができ、開発中に非常に便利になります。もう 1 つの有用なリソースは、UPnP コンソーシアムのUPnP デバイスの説明です。

于 2011-06-09T11:02:51.417 に答える