Android下DLNA开发简介

Android下DLNA开发简介
    前端时间在博客上有写过一篇关于DLNA开发Cling开源库的使用,虽然写的不是很好但是也有几个对DLNA开发有兴趣的同仁有询问我关于这方面的知识。趁着现在有空决定将Cling开源库的使用作为详细的一个文章类别来聊一聊。
    在详细介绍Cling开源库的使用之前,我们还是先来介绍下DLNA的相关知识和一些比较有用的相关资料,正所谓磨刀不误砍柴工吗!
     1.DLNADIGITAL LIVING NETWORK ALLIANCE,数字家庭网络联盟)
     DLNA不是创造技术,是一种组合的解决方案:利用现今比较成熟的各种相关技术,组合形成一个致力于构建家庭媒体共享的解决方案。

     1)DLNA中几种主要的家庭网络设备类型:
     DMS(数字媒体服务器)
     DMP(数字媒体播放器)
     DMC(数字媒体控制器)
     DMR(数字媒体渲染器)

     2)DLNA几个重要功能组件
     网络互联(有线,无线)
     网络协议(IPV4/IPV6)
     媒体传输(HTTP)
     设备的发现、控制和媒体管理(UPNP):定义各个设备对媒体操作的功能,下面是其框架图



    2.UPNP(Univer sal Plug and Play,通用即插即用)

      用于各种设备之间的互联,具有良好的通用性,不需要专门的设备驱动层,并且可以在任何的系统上实现

    1)UPNP基本组件

     服务、设备和控制点是UPnP网络的基本组件。其组件图如下:

     Android下DLNA开发简介_第1张图片

     服务(Service)

     在UPNP网络中,最新的控制控制单元就是服务,服务描述的设备在不同的情况下的活动和设备的状态。例如,时钟服务可以表述为时间变化(状态变化),当前的时间(时间状态)以及设置时间和读取时间两个活动,通过这两个活动,你就可以控制服务

     设备(Device)

      UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;一台电视有提供收讯的服务,这些都属于设备。
     控制点(ControlPoint)
     在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制其它设备。
 
     3.UPNP设备协议栈
     UPnP定义了设备之间、设备和控制点、控制点之间通讯的协议。完整的UPnP由设备寻址、设备发现、设备描述、设备控制、事件通知和基于Html的描述界面几部分构成。UPnP设备协议栈如下图所示:
     Android下DLNA开发简介_第2张图片

               

     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/

  



     

你可能感兴趣的:(Android下DLNA开发简介)