DLNA&UPnP開發筆記(4)— PlatinumKit庫介紹

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

相關文章
相關標籤/搜索