4

我需要创建某种可以与 UPnP 媒体服务器交互的远程控制。

我已经读到 UPnP AV 堆栈有类似三个应用程序:媒体服务器、媒体渲染器、控制点。起初,我认为控制点是我想要编程的,但是,在浏览了几个库的文档之后,在我看来,控制点仍然想在设备上播放服务器提供的媒体文件,控制点使用外部软件运行(与播放文件本身的媒体渲染器不同)。

我是否正确理解了这一点,或者我完全错了?

此外,我找不到任何看起来很容易使用的库。这可能是由于我的技能较差,但我也觉得许多库的文档相当糟糕和不完整。

我不记得我遇到的所有库,但它们包括经常提到的名称,例如 Cling、Fraunhofer FOKUS 和 Cyber​​Link。我阅读了他们网站上的大部分内容,包括一些文档,但无法真正了解如何以我想要的方式使用它们。

我只需要一些可以让我连接到服务器、索引媒体列表的东西,这样我就可以跳到任何轨道,并且唯一让我能够播放、停止、暂停、下一个、上一个和控制音量的可能性。然而,这些文件应该在服务器端播放

你知道 Java 或 C# 有什么这么棒的吗?提前非常感谢。:)

4

1 回答 1

1

起初,我认为控制点是我想要编程的,但是,在浏览了几个库的文档之后,在我看来,控制点仍然想在设备上播放服务器提供的媒体文件,控制点使用外部软件运行(与播放文件本身的媒体渲染器不同)。

为了与 UPnP AV 兼容,软件应用程序或硬件设备必须包含至少一个 UPnP AV 设备(MediaServer、ControlPoint 或 MediaRenderer)及其强制服务。有应用程序提供多个设备,因此在实践中可能找不到逻辑分离。通常,视频播放器仅实现用于浏览服务器和下载其内容的 ControlPoint 服务(内容甚至可以位于另一台服务器上)。

我只需要一些可以让我连接到服务器、索引媒体列表的东西,这样我就可以跳到任何轨道,并且唯一让我可以播​​放、停止、暂停、下一个、上一个和控制音量的可能性。然而,这些文件应该在服务器端播放。

UPnP 定义了几个必须由设备实现的服务(例如,媒体服务器必须提供目录服务)。每个服务都有强制和可选的操作(例如,可以通过该Browse方法浏览 DirectoryService)。为了实现您想要的,您的服务器必须实现一个 UPnP MediaServer(需要用于浏览其内容)和一个 UPnP MediaRenderer(需要用于控制播放)。UPnP 控制点充当一种遥控器。用于浏览服务器,选择播放文件的服务器。

浏览请求如下所示(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 >

在这种情况下,服务器只有一个视频项目(通常,服务器会有几个文件夹包含许多项目)。该res元素包含有关资源本身的信息(它所在的位置、必须使用的传输协议、mime 类型……)。在您的情况下,服务器甚至可以使用“localhost”作为地址来回答,从而阻止下载文件。服务器的 MediaRenderer 部分无论如何都应该能够访问它。

我不记得我遇到的所有库,但它们包括经常提到的名称,例如 Cling、Fraunhofer FOKUS 和 Cyber​​Link。

就个人而言,我会推荐Cyber​​Link for Java。我用它来实现 MediaServer,但是它也提供了足够的实现 ControlPoint 或 MediaRenderer。此外,您应该获得一个 UPnP 开发人员工具,例如用于 UPnP 的开发人员工具(最初是英特尔 UPnP 工具)用于 Linux 的 GUPnP 工具。GUPnP 还为 C 提供了一个 UPnP 库。这些开发人员工具允许您调用和调试 UPnP 命令,并且在开发过程中非常方便。另一个有用的资源是来自 UPnP 联盟的UPnP 设备描述。

于 2011-06-09T11:02:51.417 回答