DLNA 初识

824 阅读15分钟

投屏的作用

投屏一般是将一个设备的画面或者声音映射至另外一个设备,最常见的便是手机投智能电视。如果让你从7寸和55寸的屏幕里面挑一个看电影,你肯定选择55寸带来的视觉享受。

常见投屏方案

1.DLAN

DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)。
DLNA委员会已经于201715日正式解散,原因是旧的标准已经无法满足新设备的发展趋势,DLNA标准将来也不会再更新。但是DLNA协议的使用依然比较广泛,短时间内不会退出历史舞台,在某些情况下依然是最好的解决方案之一。
DLNA不是技术,而是一种方案,一种大家可以遵守的规范,其各种技术和协议都是目前所应用很广泛的技术和协议(SSDP、SOAP等)。

2.AirPlay

AirPlay于DLNA类似,例如两种都是基于组播实现的设备发现,只不过DLNA基于SSDP(简单服务发现协议),而AirPlay基于mDNS(multicast DNS),甚至苹果曾经也是DLNA委员会的成员。相对DLNA,AirPlay提供了一套完善的官方标准实现,开发者只需要按照文档调用API即可,当然如果需要在第三方设备上实现AirPlay功能,需要自己实现一套与AirPlay兼容的功能,网上就有通过分析抓包实现的第三方AirPlay兼容库,包括发送端和接收端

3.Miracast

以Wi-Fi Direct(和UPnP都是局域网P2P)为基础的无线显示标准,出现时间晚(2012),使用范围相对较小。支持此标准的设备可通过无线方式分享视频画面。与DLNA有较大差异的在于DLNA设备服务端(DMS,Digital Media Server)基于文件的方式提供服务,文件解码由接收端完成(DMR,Digital Media Render),因此DMR需要支持较多格式以保证兼容性;而Miracast则是由服务端完成解码并重新编码为H.264传输到接收端,接收端只需要对H.264解码即可

基于以上对比来看,DLNA使用广泛,在主流的电视、智能机顶盒中都有支持,而且终端工作量小,是不错的方案。

DLNA 详解

DLNA 由DMS DMR DMP DMP 四个产品组成

  • DMS

     Digital Media Server 数位媒体服务器: 提供了媒体档案的获取、录制、储存以及作为源头的装置。我的理解,简而言之约等于一个文件服务器 
    
  • DMR (车机主要实现的功能)

      Digital Media Renderer 数字媒体喧染器: 主要的功能是用来播放由DMC从DMS中所指定的数字媒体,例如:数字电视、智能机顶盒、电脑上实现了DLNA协议的视频播放器。
    
  • DMP

      Digital Media Player 数位媒体播放器: 可寻找并播放或输出任何由DMS所提供的媒体档案的装置。DMR与DMP的区别在于DMR只有接受媒体和播放功能,而没查找有浏览媒体的功能。比如显示器、音箱等。
    
  • DMC

      Digital Media Controller 数字媒体控制器,查找DMS的内容并建立DMS与DMR之间的连接并控制媒体的播放。
    

DLNA 的架构图

image.png

架构图分层解析

1.网络互连。其规定了所接入网络的类型和协议。主要包括: 有线网络:802.3.i/u

无线网络802.11/a/b/g/n/ac

2.网络协议 其规定了所使用的网络协议。其规定必须支持IPv4。但是,考虑到地址空间等IPv4的缺点,将在不久的将来支持IPv6。当然,考虑已经存在的IPv4的诸多应用和设备。在未来的很长一段时间内同时支持IPv4和IPv6并保证IPv4和IPv6的互连的双重协议栈将会受到青睐

3.设备的发现,控制和媒体的管理。这个功能组件是最重要的一个层次。使用的是UPnP协议,来达到设备的发现和管理,同时也通过厂商定义的AV和Printer标准达到对媒体的管理。

4.媒体传输。其规定了所有DLNA设备都必须支持使用HTTP协议进行媒体的传输。这将使得未来很长一段时间如何提高HTTP协议上高速安全的进行大数据量的传输成为一个课题。单纯就安全而言,TLS(安全传输层协议)也许是个不错的选择。另外,在IPv6的协议中IPSEC已经成为了一个必选项。这也在一定程度上解决了安全问题。不过好像使用软件做加解密的工作始终都不是个正确的选择。因为,在真正的应用中,很少有客户不对你的速度指手画脚。当然,同时你也可以使用RTP(实时传送协议)的其他专用的媒体流传输协议。但是,前提是你已经支持了HTTP协议下的传输。

5.媒体格式。这是最后的一个组件了。其规定了进行数字媒体和内容的共享和使用的时候的媒体格式。 其必须支持的是JPEG, LPCM(线性脉冲编码调制), MPEG2

UPnP

1.简介

UPnP是通用即插即用(Universal Plug and Play)的缩写,主要用于设备的智能互联互通,使用UPnP协议不需要设备驱动程序,它可以运行在目前几乎所有的操作系统平台上,使得在办公室、家庭和其他公共场所方便地构建设备互联互通成为可能。UPNP为NAT(网络地址转换)穿透带来了一个解决方案:互联网网关设备协议(IGD)。NAT穿透允许UPnP数据包在没有用户交互的情况下,无障碍的通过路由器或者防火墙(假如那个路由器或者防火墙支持NAT)。 其基本协议主要有 SSDP SOAP GENA等

2.UPnP结构规范

UPnP最大的愿景是希望任何设备一旦连接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相通信,更能直接使用或者控制它,一切都不需要人工设置,完全的即插即用。

2.1 UPnP的基本组件

服务、设备和控制点是UPnP网络的基本组件,它们之间的关系图如下图所示

image.png

  • 设备(Device):

UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以称之为设备。一台UPnP设备可以是多个服务的载体或多个子设备的嵌套。

  • 服务(Service):

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

  • 控制点(Control Point):

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

2.2 UPnP常用术语

  • UUID:

    UUID含义是通用唯一识别码(Universally Unique Identifier),其目的是让分布式系统中的所有元素都有唯一的标识,其格式为xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),分别表示当前的日期、时间、始终序列、全局唯一的IEEE机器标识,如果有网卡,则从网络的MAC地址获取,没有网卡则以其他方式获得。

  • UDN:

    单一设备名字(Unique Device Name),基于UUID,表示一个设备,在不同的时间,对于同一台设备此值应该是唯一的。

  • URI:

    Web上可用的每种资源,包括HTML文档、图像、视频片段、程序等,由一个通用资源标志符(Universal Resource Identifier,简称”URI”)进行定位。URI一般有三部分组成:访问资源的命名机制、存在资源的主机名、资源自身的名称,由路径表示。考虑下面的URI,它表示了当前的HTML 4.0规范; www.webmonkey.com.cn/html/html40…

  • URL:

    URL是URI命名机制的一个子集,URL是Uniform Resource Location的缩写,译为“统一资源定位符”。形象点说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

  • URN:

    URN是URL的一种更新形式,统一资源名称(Uniform Resource Name)。唯一标识一个实体的标识符,但是不能给出实体的位置。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是URN更强大更容易管理,因为它可以引用多个URL。

2.3 UPnP协议栈

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

image.png

UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的基础。IP层用于数据的发送与接收。对于需要可靠传送的信息,使用TCP进行传送,反之则使用UDP。UPnP对网络的底层没有要求,可以是以太网、WIFI、IEEE1394等等,只需支持IP协议即可。

构建在TCP/IP协议之上的是HTTP协议及其变种,这一部分是UPnP的核心,所有UPnP消息都被封装在HTTP协议及其变种中。HTTP协议的变种是HTTPU和HTTPMU,这些协议的格式沿袭了HTTP协议,只不过与HTTP不同的是他们通过UDP而非TCP来承载的,并且可用于组播进行通信。

  • SSDP协议 简单服务发现协议(Simple Service Discovery Protocol:SSDP),是内建在HTTPU/HTTPMU里,定义如何让网络上有的服务被发现的协议。具体包括控制点如何发现网络上有哪些服务,以及这些服务的资讯,还有控制点本身宣告他提供哪些服务。该协议运用在UPnP工作流程的设备发现部分。
  • SOAP协议 简单对象访问协议(Simple Object Access Protocol:SOAP)定义如何使用XML与HTTP来执行远程过程调用(Remote Procedure Call)。包括控制点如何发送命令消息给设备,设备收到命令消息后如何发送响应消息给控制点。该协议运用在UPnP工作流程的设备控制部分。
  • GENA协议(代码实现该协议的应用很少) 通用事件通知架构(Generic Event Notification Architecture:GENA)定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅信息并如何接收这些信息,该协议运用在UPnP工作流程的事件订阅部分。

3. UPnP 工作流程

image.png

  • 首先控制点和设备都先获取IP地址后才能进行下一步的工作;
  • 控制点首先要寻找整个网络上的UPnP设备,同时网络上的设备也要宣告自身的存在;
  • 控制点要取得设备的描述,包括这些设备提供什么样的服务;
  • 控制点发出动作信息给设备;
  • 控制点监听设备的状态,当状态改变时作出相应的处理动作;

3.1 寻址(Addressing)

UPnP网络的基础是TCP/IP,这就决定了每一个UPnP组件必须有IP地址。一台UPnP设备寻址的一般过程是:首先向DHCP服务器发送DHCP Discover的消息,如果在指定的时间内,设备没有收到DHCP Offer回应消息,设备必须使用AUTO-IP完成IP地址的获取。当然也可以使用静态配置的IP地址。实际实现就是 获取自身IP地址。

3.2 发现(Discovery)

连接到网络上的设备确定了IP地址之后,就会进入发现操作阶段。设备发现是UPnP实现的第一步。设备发现是由简单发现协议SSDP来完成的。当一台设备加入到网络中,发现过程允许设备向网络上的控制节点告知它提供的服务,当一个控制点加入到网络中,设备发现过程允许控制点寻找网络上感兴趣的设备。在这两种情况下,基本的交换信息就是发现消息。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标志符、等等。下图是发现流程的框架图

image.png

3.3 描述(Description)

UPnP的第二步是设备描述。在控制点发现一台设备后,控制点对该设备可能仅仅知道设备或者服务的UPnP类型,设备的UUID和设备描述的URL地址,还需要知道更多的信息。控制点可以从发现消息中得到设备描述的URL,通过URL取回设备描述的信息。设备描述的一般过程下图如图所示:

image.png

  • 设备描述: UPnP对某一设备的描述以XML形式来表示,设备描述包括制造商信息、模块名称和编号、序列号等等。对于一个物理设备可以包含多个逻辑设备,多个逻辑设备既可以是一个根设备其中嵌入多个设备,也可以是多个根设备的方式存在。设备描述由设备制造商提供,采用XML描述,遵循UPnP框架协议。
  • 服务描述: 服务的描述包含一系列内容,具体有服务运行时刻的状态,运行时间等等。服务描述也由设备制造商提供,采用XML描述,遵循UPnP框架协议。

3.4 控制(Control)

在接收设备和服务描述之后,控制点可以向这些服务发出动作,同时控制点也可以轮询服务的当前状态。控制点将动作发送到设备服务,在动作完成或者失败后,服务返回相应的结果或者错误信息。其基本过程如下图所示:

image.png

为了控制一台设备,控制点向设备服务发出一动作,这一般是由控制点向服务的控制URL地址发送一个适当的控制消息。而服务则会对此动作出响应,返回相关的结果或错误。

3.5 事件(Even ting)

如上文的描述部分所述,一个即插即用服务描述包括服务响应的动作列表和运行时描述服务状态的变量列表。如果一个或多个状态被事件触发,服务将会在这些状态发生变化时发布更新,控制点可以订阅以获得此信息。在事件机制中,发布者指事件的来源(通常为设备服务),订阅者指事件目的地(通常为控制点)。 要订阅事件,订阅者可发送一条请求订阅消息。它将以这个订阅到持续时间作为响应。要保持订阅,订阅者必须在订阅过期之前进行续订。当订阅者不再需要发布者发送的事件时,订阅者应当取消其订阅。 发布者通过发送事件消息提醒订阅者状态改变。在订阅者第一次订阅时,需要发送一个专门的初始化事件消息。该事件消息包含所有事件的名称和值,并且允许订阅者初始化其服务状态。为了支持多个控制点,在动作生效后所有订阅者均会收到通知。由此,将向所有订阅者发送全部事件消息。事件消息使用HTTP协议传送,事件详细定义在通用事件通知结构(GENA)协议中。

3.6 展示(Presentation)

在控制点发现设备和取得设备描述之后,展示也就开始了。如果设备拥有进行展示的URL,那么控制点就可以通过此URL取得一个页面,在浏览器中加载该页面,并根据页面功能,支持用户控制设备或浏览设备状态。每一项完成的程度取决于展示页面和设备的具体功能。 设备展示包含在设备描述的Presentation URL字段。设备展示可以完全由设备制造商提供,它采用HTML页的形式,使用HTTP进行发布。下图是展示的流程示意图:

image.png