前面几篇文章主要从理论上介绍了DLNA和UPnP协议的相关概念和知识点,本文主要介绍一下PlatinumKit库,该库实现了UPnP协议栈,代码写得很是漂亮,但文档很少,因此但愿个人介绍和引导可以帮助初学者更快速地掌握该库的应用。ide
1. PlatinumKit库的官方网站函数
http://www.plutinosoft.com/platinum/学习
2. PlatinumKit库的特色网站
(1)由C++编写spa
(2)支持Windows, Mac OSX, Linux, iPhone, Android命令行
(3)代码很是漂亮,属于自注释型,结合UPnP协议文档很容易看懂orm
(4)示例比较丰富,实现了多种UPnP的Device示例,包括:MediaRenderer,MediaServer,Media Control Point,Light Control 等等。blog
3. PlatinumKit库的主要接口继承
(1) PLT_UPnP接口
这是PlatinumKit库最重要的一个接口,该类用来维护一个或者多个UPnP的设备(Device)或者控制点(Control Point),主要接口以下:
NPT_Result AddDevice(PLT_DeviceHostReference& device); NPT_Result AddCtrlPoint(PLT_CtrlPointReference& ctrlpoint); NPT_Result RemoveDevice(PLT_DeviceHostReference& device); NPT_Result RemoveCtrlPoint(PLT_CtrlPointReference& ctrlpoint); NPT_Result Start(); NPT_Result Stop();
(2) PLT_DeviceHost
该类表明着UPnP的设备(Device),封装了UPnP的设备所包含的各类属性和动做,属性好比:设备描述、UUID等等,动做包括:广播设备信息和服务信息,反馈设备事件消息等等。
全部的自定义UPnP设备均须要继承PLT_DeviceHost类,并根据协议实现特定的方法。
(3) PLT_CtrlPoint
该类表明着UPnP的控制点(Control Point),封装了UPnP的控制点所包含的各类动做,例如搜索UPnP设备,执行设备提供的服务(Service),订阅设备事件消息等等。
该类经过PLT_CtrlPointListener类来提供的设备添加/删除/事件等消息:
class PLT_CtrlPointListener { public: virtual ~PLT_CtrlPointListener() {} virtual NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device) = 0; virtual NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device) = 0; virtual NPT_Result OnActionResponse(NPT_Result res, PLT_ActionReference& action, void* userdata) = 0; virtual NPT_Result OnEventNotify(PLT_Service* service, NPT_List<PLT_StateVariable*>* vars) = 0; };
另外,PLT_CtrlPoint类还提供了以下主要的接口:
查找设备:Search,Discover,
调用服务:FindActionDesc,CreateAction,InvokeAction
订阅事件:Subscribe
(4) PLT_Service
该类表明着UPnP的服务(Service),封装了UPnP的控制点所包含的各类属性和动做,属性好比服务名称、服务类型等等,动做主要包括修改/获取状态变量、查找Action等等。
经常使用的函数以下:
PLT_StateVariable* FindStateVariable(const char* name); PLT_ActionDesc* FindActionDesc(const char* name); NPT_Result SetStateVariable(const char* name, const char* value); NPT_Result GetStateVariableValue(const char* name, NPT_String& value);
4. 示例代码
PlatinumKit库有着丰富的示例代码,能够参考学习如何实现一个简单的UPnP设备,如何利用Control Point控制设备和调用设备服务。
(1) UPnP AV Device 示例
PlatinumKit库实现了2个UPnP AV设备,MediaRenderer和MediaServer,这是一份学习DLNA/UPnP AV设备的很是不错的代码,推荐仔细阅读。该代码位于:
PlatinumKit/Platinum/Source/Devices/
(2) Control Point 示例
PlatinumKit库实现了一个基于命令行界面的媒体控制器,名叫:MicroMediaController,这是一份学习UPnP的Control Point组件的很是不错的代码,也推荐仔细阅读。该代码位于:
PlatinumKit/Platinum/Source/Apps/
(3) 其余UPnP设备示例
PlatinumKit库还实现了一些其余的UPnP设备,包括:简单设备、灯控设备等等,也能够参考学习,代码位于:
PlatinumKit/Platinum/Source/Apps/ PlatinumKit/Platinum/Source/Tests/
5. 小结
关于PlatinumKit库就介绍到这里了,但愿你们能够快速地使用该库实现本身的DLNA&UPnP应用,有任何疑问欢迎留言(本文地址:这里)或者来信lujun.hust@gmail.com交流。