DLNA&UPnP开发笔记(4)— PlatinumKit库介绍

前面几篇文章主要从理论上介绍了DLNA和UPnP协议的相关概念和知识点,本文主要介绍一下PlatinumKit库,该库实现了UPnP协议栈,代码写得非常漂亮,但文档不多,所以希望我的介绍和引导能够帮助初学者更快速地掌握该库的应用。


1. PlatinumKit库的官方网站

http://www.plutinosoft.com/platinum/

2. PlatinumKit库的特点

(1)由C++编写

(2)支持Windows, Mac OSX, Linux, iPhone, Android

(3)代码非常漂亮,属于自注释型,结合UPnP协议文档很容易看懂

(4)示例比较丰富,实现了多种UPnP的Device示例,包括:MediaRenderer,MediaServer,Media Control Point,Light Control 等等。

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应用,有任何疑问欢迎留言(本文地址:这里)或者来信[email protected]交流。

DLNA&UPnP开发笔记(4)— PlatinumKit库介绍

时间: 2024-10-20 07:02:47

DLNA&UPnP开发笔记(4)— PlatinumKit库介绍的相关文章

DLNA&UPnP开发笔记(3)

由前两篇文章我们了解了DLNA和UPnP协议的基础概念,本文主要介绍一下开发DLNA&UPnP应用的SDK和代码资源. 1.  搭建测试环境 由第二篇文章中,UPnP AV典型应用架构中,我们知道,要实现一个完整的应用,需要三个主体,一个是MediaServer,一个是MediaRenderer,还有一个是Control Point,我们不一定要一次性都实现,我们可以实现一个,然后利用现有的DLNA应用来测试我们的功能是否完备. (1)MediaServer 推荐:BubbleUPnP,魔力视频

DLNA&UPnP开发笔记(1)

DLNA&UPnP协议为多媒体内容共享提供了标准的行业规范,随着移动互联网的火热发展,我相信它在智能家居领域一定会有着非常大的发展.我准备写几篇文章,分享一下最近在DLNA&UPnP协议开发方面的经验,DLNA&UPnP的文档特别多,在此我希望用自己的语言来引导大家快速理解DLNA&UPnP协议. (1)DLNA&UPnP协议是干什么的 简单来说,DLNA协议定义了一种通用的行业规范,目的是让电子设备之间可以方便地共享照片.视频.音乐等多媒体内容.(这篇文章讲得不错

DLNA&UPnP开发笔记(2)

由第一篇文章我们大致了解了DLNA的基本概念以及与UPnP的关系,本文主要介绍一下UPnP协议的基本组件和AV架构. 1.  UPnP协议组成 UPnP协议中,定义了两个主要的组件,一个是设备(Device),一个是控制点(Control Point).这就是为什么很多UPnP协议栈的SDK的接口代码一般都主要由Device和Control Point构成.设备是在网络中可见的对象,而控制点在网络中不可见. 一个UPnP的设备(Device)是不能直接访问和控制另一个UPnP的设备(Device

iOS陆哥开发笔记(七) (AVFoundation简单介绍)

在AVFoundation框架中AVAudioRecorder类专门处理录音操作,支持多种音频格式. 以下是经常使用的属性和方法: 属性 说明 @property(readonly, getter=isPlaying) BOOL playing 是否正在播放,仅仅读 @property(readonly) NSUInteger numberOfChannels 音频声道数,仅仅读 @property(readonly) NSTimeInterval duration 音频时长 @property

iOS DLNA Cyberlink,PlatinumKit库完成DLNA功能

经过一个多月的研究,终于将iOS DLNA搞定.记录一下. 关于DLNA开发,目前有两个框架.一个Cyberlink,一个platinumkit.Cyberlink的好处就是提供了一套OC的api供你调用,很简单方便.但是此框架有很多问题,且功能不全.platinumkit框架底层为c++,若要用此套框架,就得进行oc和c++的混编,之前我没做过oc和c++的混编,所以去看platinumkit的源码时,觉得头疼无比,浪费了很多时间,但是使用cyberlink框架又有很多功能无法解决,并且框架经

IOS DLNA PlatinumKit库的使用

前段时间进行了IOS DLNA的开发,使用的是PlatinumKit库.网上查了很多资料都未果,经过自己的摸索,遂将如何使用PlatinumKit进行DLNA的开发分享给大家. 1.PlatinumKit库的编译 打开PlatinumKit,在其targets中看到图中红色标记区域为PlatinumKit静态库,分别对应iPhone真机发布和simulator调试,根据不同情况需要加载不同的 .a 和 .framework文件. 编译红色区域的targets,在Xcode->Windows->

IOS开发笔记-百度地图(第三方库)

最近做了百度地图,在导入SDK后遇到了一些问题 编译错误: linker command failed with exit code 1 (use -v to see invocation) 想了很多办法,查了很多资料,最后终于解决. 可能原因: 1. 有重复的.m文件,或者未导入 解决办法:有重复的删除即可 在工作左边导航栏Target-->Build Phases-->compile Sources中,第三库库的所有.m文件都添加到里面 2.Valid Architectures 的值 在

标C编程笔记day07 常用标准库介绍、字符串输入处理、字符指针的使用

常用标准库: assert.h:断言,包含assert宏.可以进行自我检查 ctype.h:字符处理,字符的分类,大小转换 errno.h:错误信息处理 float.h:浮点数特性 limits.h:整数的大小,提供了描述整数类型的宏 lcale.h:本地化 math.h:数学函数 setjmp.h:跳转 signal.h:信号处理 stdarg.h:可变长参数处理 stddef.h:经常使用的类型的定义 stdio.h:输入输出 string.h:字符串处理 stdlib.h:其他函数,字符串

【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫

详细可参考 (1)书箱:<这就是搜索引擎><自己动手写网络爬虫><解密搜索引擎打桩实践> (2)[搜索引擎基础知识1]搜索引擎的技术架构 (3)[搜索引擎基础知识2]网络爬虫的介绍 (一)搜索引擎的开发一般可分为以下三大部分 1.数据采集层:一般使用爬虫获取互联网的数据,重要的开源项目有Heritrxi 2.数据分析处理层:将从互联网上获取到的数据进行提取归类.分词.语义分析得出索引得内容,等待用户查询使用,重要的开源项目有Lucene 3.视图层:也用户的交互界面,如