前面幾篇文章主要從理論上介紹了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交流。