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