Android车载应用开发——DLNA开发浅析

407 阅读13分钟

DNLA的建立

DLNA 成立于2003 年6 月24 日, 其前身是DHWG (Digital Home Working Group 数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC ,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。DLNA的口号是Enjoy your music, photos and videos, anywhere anytime。该组织的官方网站是http://www.dlna.org . 页面主色调green,black,white,silver和gray,后面要讲到的UPnP的主业也是同样的调调,这两个关系挺大的,后面讲。

DLNA的设备

在讲DLNA的架构之前先讲一下DLNA规定的设备分类,这些设备就是DLNA标准执行的物理和逻辑对象。

这是一个DLNA 设备的类图。

1.Home NetWork Device(HND)。这类设备指家庭设备,具有比较大的尺寸及较全面的功能,主要与移动设备区别开来,下属5类设备:

  • (1)Digital Media Server(DMS)。数字媒体服务器,提供媒体获取、记录、存储和输出功能。同时,内容保护功能是对DMS的强制要求。
  • DMS总是包含DMP的功能,并且肯能包含其他智能功能,包括设备/用户服务的管理;丰富的用户界面;媒体管理/收集和分发功能。DMS的例子有PC、数字机顶盒(附带联网,存储功能)和摄像机等等。
  • (2)DMP。数字媒体播放器。能从DMS/M-DMS上查找并获取媒体内容并播放和渲染显示。比如智能电视、家庭影院等
  • (3)DMC。数字媒体控制器,查找DMS的内容并建立DMS与DMR之间的连接并控制媒体的播放。如遥控器。
  • (4)DMR。数字媒体渲染设备。通过其他设备配置后,可以播放从DMS上的内容。与DMP的区别在于DMR只有接受媒体和播放功能,而没查找有浏览媒体的功能。比如显示器、音箱等。
  • (5)DMPr。数字媒体打印机,提供打印服务。网络打印机,一体化打印机就属于DMPr。

2.Mobile Handheld Devices(MHD)手持设备。相比家庭设备,手持设备的功能相对简化一些,支持的媒体格式也会不同。

  • (1)M-DMS。与DMS类似,如移动电话,随身音乐播放器等。
  • (2)M-DMP。与DMP类似。比如智能移动电视。
  • (3)M-DMD。移动多媒体下载设备。如随身音乐播放器,车载音乐播放器和智能电子相框等
  • (4)M-DMU。移动多媒体下载设备。如摄像设备和手机等。
  • (5)M-DMC。与DMC类似。P如DA,智能遥控器。 手持设备没有定义M-DMR,因为手持设备会讲究便利性,会附加查找控制功能,要不然就只是普通的移动电视或收音机了。

3.Networked Infrastructure Devices (NID) 联网支持设备。

  • (1)Mobile Network Connectivity Function (M-NCF)。移动网络连接功能设备。提供各种设备接入移动网络的物理介质。 DLNA的希望是全部实现无线化。
  • (2)Interoperability Unit (MIU)媒体交互设备。提供媒体格式的转换以支持各种设备需要。

DLNA的架构

DLNA架构是个互联系统,因此在逻辑上它也类似OSI(Open System Interconnection,开放系统互连)七层网络模型。

DLNA架构分为如下图7个层次:

DLNA ARCHITECTURE

  • (1) NetWorking Connectivity 网络互联方式:包括物理连接的标准,有有线的,比如符合IEEE802.3标准的Ethernet,;有无线
  • 的 ,比如符合IEEE802.11a/g标准的WiFi,能做到54Mbps,蓝牙(802.15)等,技术都很成熟。现在OFDM和MIMO(802.11n)已经能做到300Mbps了,早就超过比较普及的100Mbps的Ethernet了,只不过产品还没有普及,以后肯定会用到。
  • (2) NetWorking Stack 网络协议栈:DLNA的互联传输基本上是在IPV4协议簇的基础上的。用TCP或者UDP来传都可以。这一层相当于OSI网络层。
  • (3)Device Discovery&Control 设备发现和控制。

(4)Media Management媒体管理。媒体管理包括媒体的识别、管理、分发和记录(保存),UPnP AV Architecture:1 and UPnP Printer Architecture:1这两个属于UPnP的文档会说明如何进行媒体管理。我将在 扩展阅读II:UPnP AV Architecture 一文中稍微详细介绍UPnP AV设备和CP之间的交互模型及媒体的控制。

UPnP AV Architecture 定义了UPnP AV设备间媒体传送以及和CP间的交互。UPnP AV也定义了两种UPnP AV设备:UPnP AV MediaServer(MS)和UPnP AV MediaRender(MR),以及他们具有的4种服务:

  • 1)Content Directory Service(CDS):能将可访问的媒体内容列出。
  • 2)Connection Manager Service(CMS):决定媒体内容可以通过何种方式由UPnP AV Media Server传送至UPnP AV MediaRender。
  • 3)AVTransport Service:控制媒体内容,比如播放、停止、暂停、查找等。
  • 4)Rendering Control Service:控制以何种方式播放内容,比如音量、静音、亮度等。

UPnP Printer Architecture:1 定义了打印设备和CP的交互模型,这将不再细说。

  • (5) Media Transport 媒体传输:这一层用HTTP(HyperText Transfer Protocol)超文本传输协议。就是平时我们上网用的媒体传输协议。HTTP用TCP可靠传输,也有混合UDP方式的HTTP。现在HTTP的最新版本是HTTP1.1。可选协议是RTP。

exsample:我们输入一个网址,回车,给server发一个request,用TCP我们就可以等server给我们消息,说明server收到我们的消息了,否则我们就重发;接着server给我们TCP包,我们收一个就给server回信说我们收到了,要是server收不到回信,他就认为包丢掉了,会再传一个同样的包过来。不停地回信就是会比较慢。

那如果我们用UDP会怎样?就是说我们不给server回信说我们收到编号是x的包了,server也就不给我们重发丢掉的包了,这样我们就丢包了。

但是我们传stream的时候,比如视频流,不用存,看完就完了,这种时候就可以用UDP来传。加上局域网里面QoS本来就很高,丢包都是不太可能的。所以UDP肯定会用。局域网多播的时候也用UDP,这个在后面讲。

媒体的传输方案如下:

  • 1)从DMS/M-DMS至DMP/M-DMP,即使不立即播放。
  • 2)从一个DMS到另一个DMS,这时接收方DMS播放接收媒体内容,表现为一个DMP;也可以不立即播放,可能只是存储或者处理。

媒体传输 模式有三种:

1)流传输。当DMR/DMP需要实时渲染接收媒体,媒体具时序性。

2)交互传输。不包含时序的媒体,如图片传输。

3)后台传输。非实时的媒体传输,比如上传下载等。

  • (6)Media Formats媒体格式。格式Formats在这里等同于编码格式Codec,平时我们说的编码格式比如Mpeg-2,AVC,x264就是视频编码格式;PCM,mp3(MPEG-2 Layer 3),aac,flac就是音频编码格式。而avi,rmvb,mkv这些是媒体封装格式,包含视频音频可能还有字幕流。比如一个常见的后缀为mkv的文件,它的视频Codec是x264,音频是aac,它的视音频编码属于Mpeg-4 Codec Family。

我们知道不同设备对编码格式的支持能力不同,Media Formats这一部分规定了设备应该具有的格式支持能力。下面的表是DLNA支持的所有编码格式:

DLNA-proved format

VideoAudioImages
MPEG-1MPEG-2H.263MPEG-4 Part 2MPEG-4 Part 10WMV9VC-1LPCMMPEG-1/2 L2MPEG-1/2 L3MPEG-4 AAC LCMPEG-4 AAC LTPMPEG-4 HE AACMPEH-4 BSACAC-3ATRAC3plusWMAWMA ProfessionalAMRAMR-WB+G.726JPEGPNGGIFTIFF

针对家庭设备和手持设备,DLNA有不同的格式规定:

  • (7)Remote UI 远程用户接口。说白了就是遥控器。比如说有个TV,我们说不管是用遥控器还是直接在TV上按按钮,效果是一样的。不过两者按钮的排列布局是不一样的。好了,现在到DLNA了,我想用手机当遥控器可不可以?当然可以,只要获得TV上按钮的功能,传到手机上来,模拟一个遥控器就好了。DLNA现在想用浏览器的方式,TV给你一个XML,手机上就出现遥控器界面了,有点像webQQ,webOS那种,这样在手机上就不需要客户端了,TV功能更新了,手机直接跟TV要新的XML,很方便。

在详细介绍Cling开源库的使用之前,我们还是先来介绍下DLNA的相关知识和一些比较有用的相关资料,正所谓磨刀不误砍柴工吗!

1.DLNA(DIGITAL 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网络的基本组件。其组件图如下:

服务(Service)

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

设备(Device)

UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;一台电视有提供收讯的服务,这些都属于设备。

控制点(ControlPoint)

在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制其它设备。

3.UPNP设备协议栈

UPnP定义了设备之间、设备和控制点、控制点之间通讯的协议。完整的UPnP由设备寻址、设备发现、设备描述、设备控制、事件通知和基于Html的描述界面几部分构成。UPnP设备协议栈如下图所示:

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:渲染控制,用于播放时的一些渲染控制,如调节音量,调节亮度等。厂商也可自定义服务

以上是有关车载技术中的DLNA开发,简单的浅析。有关更多的Android车载应用技术,大家问题可以> 前往

传送直达↓↓↓ :link.juejin.cn/?target=htt…

且学且珍惜!

文末

DLNA只是一种分享。举个简单的例子,比如在家里,你手机里有一部电影,但是手机没电了,或者你想通过电视浏览手机里的图片。此时,您的电视和电脑等所有智能设备都可以在手机中即时共享电影。这条路叫DLNA。它最大的特点是不需要传输,不需要云存储,可以多台设备共享。嗯,是不是很有趣?下面给大家演示一下如何使用手机、平板等安卓系统与网络机顶盒进行交互,将照片、音乐、视频节目推送到电视上!(如果其他机顶盒有DLNA功能,原理是一样的。)