2

我一直在 VB.NET 项目中使用英特尔的 UPNP 库,尽管缺乏文档使得它很难(从字面上猜测我必须在每一行代码中使用什么属性/方法)我已经能够按照我的意愿弯曲它,我有一个在 Windows 上使用 UPNP 的功能非常强大的应用程序。

我的问题是,我现在希望能够将文件从设备主机传输到控制点。搜索谷歌的答案表明英特尔的 UPNP 使用嵌入式 Web 服务器来处理与 UPNP 相关的所有内容,我可以使用 AddVirtualDirectory 方法将自定义目录添加到我的设备中。但随后,幸运就结束了。没有文档,没有示例,什么都没有。

所以我的问题是:有人知道如何使用它吗?我发现该方法需要 2 个委托函数,声明为 VirtualDirectoryHandler,但我不知道我应该如何处理这些。

谢谢你的帮助。

莱斯特

4

1 回答 1

2

因此,为了明确要求:控制点需要从设备中提取(下载)图像。设备不需要访问(推送)控制点。没有其他设备会尝试访问已存储在控制点上的图像。因此只有设备需要实现 ContentDirectory,控制点不需要。

我建议您从UPnP 规范包的MediaServer文件夹中阅读UPnP-av-ContentDirectory文档(任何版本)。查找 CreateObject、DeleteObject、ImportResource、ExportResource。如果我上面的假设是正确的,你实际上不需要它们,但是为了理解 UPnP 中文件传输的含义。我承认对英特尔 UPnP 一无所知,因此根据一般 UPnP 知识和随机全文搜索进行猜测。

要启用对象下载,设备需要提供可浏览的媒体存储。基本上,您需要在设备上实现 GET 请求处理程序。UPnP 只不过是一个网络服务器的特殊网络,带有一些多播和额外的标头。这就是“英特尔的 UPNP 使用嵌入式 Web 服务器”的原因。任何 UPnP 设备都是网络服务器MediaServerDevice.WebServer_OnHeaderReceiveSink英特尔 UPnP 已经在和中包含 VirtualDirectoryHandler 的实现WebServer_OnPacketReceiveSink。很有可能,您可以MediaServerDevice.cs开箱即用地使用它来实现 ContentDirectory。查看整个 SDK 的用法VirtualDirectoryHandler以了解如何使用它。

控制点下载器将需要执行AVTransport.Browse命令来查找要下载的图像的资源 URL。英特尔MediaBrowser.cs看起来很有希望。我建议您也阅读上述文档的开头,以深入了解 UPnP ContentDirectory 的导航结构。如有疑问,请从英特尔的工具套件运行 DeviceSpy 并手动查询您的设备。从 ObjectID“0”开始。没有什么比查看原始 XML DIDL 响应更能帮助您理解 ContentDirectory 了。

一旦您的控制点知道资源 URL,您只需通过 HTTP GET 下载它。不需要花哨的 ImportObject,因为控制点也是目标存储。最后一部分在技术上根本与 UPnP 无关。

于 2012-09-11T09:28:18.483 回答