2.UPNP(Univer sal Plug and Play,通用即插即用)
用于各种设备之间的互联,具有良好的通用性,不需要专门的设备驱动层,并且可以在任何的系统上实现
1)UPNP基本组件
服务、设备和控制点是UPnP网络的基本组件。其组件图如下:
服务(Service)
在UPNP网络中,最新的控制控制单元就是服务,服务描述的设备在不同的情况下的活动和设备的状态。例如,时钟服务可以表述为时间变化(状态变化),当前的时间(时间状态)以及设置时间和读取时间两个活动,通过这两个活动,你就可以控制服务
设备(Device)
UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;一台电视有提供收讯的服务,这些都属于设备。![](https://i-blog.csdnimg.cn/blog_migrate/b3a1989233a444c52ffd4768979085af.png)
UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的基础。IP层用于数据的发送与接收。对于需要可靠传送的信息,使用TCP进行传送, 反之则使用UDP。UPnP对网络物理设备没有要求,可以使用以太网、无线网、IEEE1394、红外进行连接, 只要支持IP协议即可。同时UPnP还可以使用TCP/IP协议族中的其他协议, 如ARP、IGMP、DHCP、DNS等。
构建在TCP/IP协议之上的是HTTP协议及其变种,这一部分是UPnP协议的核心部分, 所有UPnP消息都被封装在HTTP协议及其变种之中。HTTP协议的变种是HTTPU和HTTPMU, 这些协议的格式沿袭了HTTP协议,只不过与HTTP协议不同的是它们通过UDP而不是TCP来发送消息,并且可以用于多播通信。
下面分别介绍几种协议:
1)SSDP协议
简单服务发现协议(Simple Service Discovery Protocol:SSDP),内建在HTTPU/HTTPMU 里,定义如何让网络上有的服务被发现的协议。包括控制点如何发现网络上有哪些服务,并取得这些服务的资讯,还有装置本身宣告他提供哪些服务。该协议运用在UPnP工作流程的设备发现部分。
2)SOAP协议
简单对象访问协议( Simple Object Access Protocol) 定义了可扩展标记语言(XML ) 和HTTP 的使用来执行远程调用,包括控制点如何发送命令消息给设备,及设备接收到命令消息后如何发送响应消息给控制点。该协议运用在UPnP工作流程的设备控制部分。
3)GENA协议
一般事件通知架构(Generic Event Notification Architecture:GENA)定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅讯息并如何接收通知讯息用的。该协议运用在UPnP工作流程的事件订阅部分。
4.DLNA开发
目前来说在android中用到的UPNP框架基本为cyberlink框架和cling框架。开心视频和快手看片用的是基于cling框架的dlna开发,而腾讯视频和搜狐视频用的就是基于cyberlink的dlna开发。所以我们也采用了cyberlink这个框架。cyberlink框架效率稍微低而且有几个致命的Bug,但是比较稳定
UPNP协议的几个重要服务:
AVTransport:传输服务,提供媒体文件传输,播放控制等功能。
ContentDirectory:内容目录,用于提供媒体文件浏览,检索,获取媒体文件信息等功能。
ConnectionManager:连接管理,用于提供连接方面的管理,例如获取源/目的双方支持的MIME格式信息。
RendringControl:渲染控制,用于播放时的一些渲染控制,如调节音量,调节亮度等。厂商也可自定义服务
cyberlink框架的构建,http://www.cybergarage.org/ 但是官网提供的Android框架非常不完善,只能实现基本的DMP功能,对于完整框架的使用请使 用CyberLink4Android(https://github.com/CharonChui/CyberLink4Android),该框架针对CyberLink4Java与Android部分进行了整合。
下面的几个博客是很好的关于DLNA开发的,其中比较有名的是一个在CSDN上蓝斯的,很不错大家可以去搜搜他,他主要用到的是Platinum和CyberGarage这两个开源库做开发的。
1、有Platinum的DMS应用层实现教程,jni库没有源码,可以自己编译:
http://blog.csdn.net/lancees/article/details/9865411
2、有比较好的UPNP介绍和DLNA的思路开发
http://blog.csdn.net/bao_jinyu/article/category/1149905
3、开发人员必须知道在github上选择好东西
https://github.com/
4、基于Cling开发的DLNA应用
http://www.it165.net/pro/html/201303/4968.html
5、基于CyberGarage库的dlna开发,海思的DLNA应用是用的此sdk
http://luochao0913.blog.163.com/blog/static/6409386120133104208719/