DLNA投屏协议从理论到实践优化

一、5W2H剖析DLNA

1.1 什么是DLNA协议

DLNA 的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 旨在处理个人PC、消费电器、移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务(音频,视频,图片)的无限制的同享和添加成为或许。

1.2 为什么运用dlna

1.2.1 几种无线投屏协议比较:

Airplay、Miracast、DLNA比较:

首要DLNA、Airplay、Miracast区别:

Airplay

AirPlay是苹果开发的一种无线技能,能够经过WiFi将iPhone、iPad、iPodtouch等iOS设备上的包括图片、音频、视频经过无线的方法传输到支撑AirPlay设备。

AirPlay具有与DLNA所没有的镜像功用,这一功用叫AirPlay镜像,可将iPhone或iPad上的画面实时传输到电视上。

DLNA与苹果的AirPlay功用比较相似,都能够让手机中的媒体内容投放到电视屏幕里。不同的是手机上的DLNA并没有AirPlay的镜像功用。

Miracast

Miracast是由Wi-Fi联盟于2012年所拟定,以Wi-Fi直连为根底的无线显现标准。支撑此标准的设备可经过无线方法同享视频画面,例如手机可经过Miracast将影片或照片直接在电视或其他装置播映而无需受到衔接线缆长度的影响。

协议 优点 缺点
Airplay 支撑同一局域网多媒体传输、同享;支撑屏幕镜像 AirPlay只能在Apple设备之间运用;对网络质量和稳定性有必定要求
Miracast 支撑同一局域网多媒体传输、同享;支撑屏幕镜像 对网络质量和稳定性有必定要求;兼容性差异:不同设备和渠道对Miracast的完成或许存在差异
DLNA 支撑同一局域网多媒体传输、同享;投在线资源时网络没过高要求 无法投镜像

1.2.2 Android手机干流多媒体衔接方法比较

DLNA无线传输,Micro HDMI接口输出,USB接口经过MHL转化HDMI输出

DLNA投屏协议从理论到实践优化

能够看到DLNA衔接方法是最便利的,而且支撑绝大多数的手机(tech.sina.cn/mobile/pc/2…

1.3 什么时候

家庭文娱场景,如将手机、ipad、pc的多媒体资源(在线或本地)投在DMP设备播映(投影仪、大板、盒子等)

1.4 哪些运用集成了dlna

乐播、爱奇艺、腾讯视频、哔哩哔哩、芒果TV等各大干流视频媒体

1.5 怎样运用

1.将手机或其他需求投屏的设备衔接到和需求被投屏的设备(投影仪、盒子等)同一个局域网;

2.翻开视频终端(如腾讯视频等),翻开自己想要看的视频;

3.点击视频界面中TV按钮

DLNA投屏协议从理论到实践优化

二、技能细节探究

2.1 dlna架构、协议组成、流程剖析

2.11 DLNA 将其整个运用规定成 5 个功用组件,从下到上依次为:

  1. 网络互连:802.3 以太网,802.11WiFi,802.15 蓝牙
  2. 网络协议:IPV4
  3. 设备的发现操控和办理:UPnP
  4. 媒体传输:HTTP/RTP
  5. 媒体格局

DLNA投屏协议从理论到实践优化

2.12 DLNA协议组成 DLNA协议是一个由多个具体协议组成的标准,用于在不同设备之间同享和传输媒体内容。以下是DLNA协议中的一些具体协议:

  1. UPnP(Universal Plug and Play):UPnP是DLNA协议的根底,它供给了设备之间的主动发现、衔接和通讯功用。

  2. HTTP(Hypertext Transfer Protocol):HTTP用于在设备之间传输媒体内容和操控指令。

  3. SSDP(Simple Service Discovery Protocol):SSDP用于设备的主动发现和网络服务的播送告诉。

  4. SOAP(Simple Object Access Protocol):SOAP用于设备之间的操控和通讯,经过XML格局传递指令和参数。

  5. GENA(Generic Event Notification Architecture:GENA) 一般事情告诉架构 界说在操控点想要监听设备的某个服务状况变量的情况时,操控点怎样传送订阅音讯并怎样接纳告诉音讯用的。该协议运用在 UPnP 作业流程的事情订阅部分。

  6. XML(eXtensible Markup Language):XML用于描绘和传输媒体内容的元数据信息。

  7. RTSP(Real-Time Streaming Protocol):RTSP用于实时流媒体的传输和操控。

  8. MPEG(Moving Picture Experts Group):DLNA支撑MPEG格局的音频和视频编码,如MPEG-2、MPEG-4等。

  9. JPEG(Joint Photographic Experts Group):DLNA支撑JPEG格局的图像编码,用于传输和显现图片。

这些具体协议一起构成了DLNA标准,使得不同设备能够经过DLNA协议进行互联和媒体内容的同享和传输。经过这些协议,用户能够在DLNA兼容的设备上无缝地拜访和播映来自其他设备的媒体内容,如在智能电视上观看手机中的视频、在音频设备上播映音乐等。

2.13 upnp协议概览

DLNA投屏协议从理论到实践优化

UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的根底。IP层用于数据的发送与接纳。关于需求可靠传送的信息,运用TCP进行传送,反之则运用UDPUPnP对网络物理设备没有要求,能够运用以太网、无线网、IEEE1394、红外进行衔接,只需支撑IP协议即可。

构建在TCP/IP协议之上的是HTTP协议及其变种,这一部分是UPnP协议的核心部分,一切UPnP音讯都被封装在HTTP协议及其变种之中。HTTP协议的变种是HTTPUHTTPMU, 这些协议的格局沿袭了HTTP协议,只不过与HTTP协议不同的是它们经过UDP而不是TCP来发送音讯,而且能够用于多播通讯。

UPnP的作业进程

UPnP的作业进程分为6步:

(1)寻址(Addressing)。

  地址是整个UPnP体系作业的根底条件,每个设备都应当是DHCP(Dynamic Host Configuration Protocol 动态主机装备协议)的客户。当设备初次与网络树立衔接后,运用DHCP服务,使设备得到一个IP地址。这个IP地址能够是DHCP体系指定的,也能够是由设备选择的。当局域网内没有供给DHCP服务时,UPnP设备将依照Auto-IP的协议,从169.254/169.16地址范围获取一个局域网内仅有的IP地址。设备还能够运用friendly name,这就需求域名解析服务(DNS)来转化name和IP。这个进程用到的东西都是现存的,而且是很普及的,市面上买的路由器都会有。

(2)发现(Discovery)。

发现是UPnP作业第一步。当一个设备被添加到网络后,UPnP的发现协议答应该设备向网络上的Control Points(CPs)告诉(advise)自己具有的服务。相同,当一个CP被添加到网络后,UPnP发现协议答应该CP查找网络上可用的设备。这两种情况下的组播音讯一般是设备和服务的基本信息,如它的类型,仅有标识符,当前状况参数等等。要注意设备信息和服务信息都是要组播出去的。发现的进程能够用下面Figure 1-1来描绘。

DLNA投屏协议从理论到实践优化

下面具体叙述UPnP发现设备用到的协议:SSDP(Simple Service Discovery Protocol,简略服务发现协议),阐明设备是怎样向网络告诉或许吊销自己能够供给的服务;CP是怎样查找设备以及设备是怎样回应查找的。

SSDP格局套用HTTP1.1的部分音讯头字段,可是和HTTP不同,SSDP是选用UDP传输的,而且SSDP没有Message Body,便是说SSDP只有信头而没有信件内容的。

SSDP第一个要填充的字段是star – line,阐明这是个什么类型的音讯。

比方填”NOTIFY * HTTP/1.1/r/n”,就阐明这个SSDP音讯是个告诉音讯,一般设备加入网络或许离开网络都要NOTIFY,更新自己的服务后也要NOTIFY一下。其他设备看见这个音讯的star – line就知道有设备状况变了,自己就翻开这个音讯看一下有没有需求更新的。假如填”NOTIFY * HTTP/1.1/r/n”,就要填LOCATION字段,填一个description URL,CP能够经过这个地址来取得设备的具体信息。

填”M-SEARCH * HTTP/1.1/r/n”便是要查找了;respone别人的查找就填”HTTP/1.1 200 OK/r/n”。

SSDP第二个要填充的字段是目的地址HOST。比方填上”HOST: 239.255.255.250:1900″,便是组播(multicast)查找,这儿239.255.255.250是组播地址,便是说这条音讯会给网络里边该组地址的设备发,1900是SSDP协议的端口号。假如HOST地址是特定地址,那这便是单播(unicast)。Respone不填这个字段,他会在ST字段里边填respone address,便是发来查找信息的设备的地址,Respone音讯的话还会发送一个包括自己地址URL的字段,Respone的意思便是跟Searcher说:我好像是你要找的人,我的电话是XXX,具体情况请CALL我。Respone也是UDP单播。

1.notify主动告诉同一网络中的CP. ssdp:alive 一般需求包括以下类型的包: 关于根设备,存在三种发现音讯:

NT USN
根设备的UUID 根设备的UUID
设备类型:设备版别 根设备的UUID,设备类型:设备版别
upnp:rootdevice 根设备的UUID,设备类型和upnp:rootdevice

关于每个服务:

NT USN
服务类型:服务版别 相关设备的UUID,服务类型和服务版别

作为DMP首要包括的服务有三种:RenderingControl、AVTransport、ConnectionManager。

以下是对三个不同的URN值的解释和区别:

  1. urn:schemas-upnp-org:service:RenderingControl:1
    这个URN值表明设备供给了一个名为RenderingControl的服务,版别号为1。RenderingControl服务通常用于操控设备的音频或视频烘托参数,例如音量、亮度等。

  2. urn:schemas-upnp-org:service:AVTransport:1
    这个URN值表明设备供给了一个名为AVTransport的服务,版别号为1。AVTransport服务通常用于操控设备的媒体传输功用,例如播映、暂停、跳转等。

  3. urn:schemas-upnp-org:service:ConnectionManager:1
    这个URN值表明设备供给了一个名为ConnectionManager的服务,版别号为1。ConnectionManager服务通常用于办理设备之间的衔接和数据传输。

    2.发现恳求(Discovery request 或查询恳求)

SSDP客户端向此地址发送HTTP UDP 发现恳求,查询某种类型的服务。SSDP服务在此地址上监听服务发现恳求。当服务监听到的HTTP UDP 发现恳求和它自己供给的服务匹配时,它以单播方法发送HTTP UDP 呼应。

DLNA投屏协议从理论到实践优化

HOST:设置为协议保存多播地址和端口,有必要是:239.255.255.250:1900(IPv4)或FF0x::C(IPv6)

MAN:设置协议查询的类型,有必要是:ssdp:discover

MX:设置设备呼应最长等待时间,设备呼应在0和这个值之间随机选择呼应推迟的值。这样能够为操控点呼应平衡网络负载。

ST:设置服务查询的方针,它有必要是下面的类型:

ssdp:all查找一切设备和服务
upnp:rootdevice仅查找网络中的根设备
uuid:device-UUID查询UUID标识的设备
urn:schemas-upnp-org:device:device-Type:version查询device-Type字段指定的设备类型,设备类型和版别由UPNP组织界说。
urn:schemas-upnp-org:service:service-Type:version查询service-Type字段指定的服务类型,服务类型和版别由UPNP组织界说。

在设备接纳到查询恳求而且查询类型(ST字段值)与此设备匹配时,设备有必要向多播地址239.255.255.250:1900回应呼应音讯。典型:

DLNA投屏协议从理论到实践优化

(3)描绘(Description)

前面咱们说了CP想要一个device更具体的信息,就打给它的URL跟它要。回来来的东西一般是个XML(Extensible Markup Language,是种结构化的数据。和HTML比较像,有tag和data,具体不说了自己去查),描绘分为两部分:一个是device description,是device的物理描绘,便是说这个device是什么;还有一个是service descriptions,便是device的服务描绘了,便是device能干些什么。这些device和device service的描绘的格局也是有要求的,开发商也能够自界说,只需符合UPnP Forum的标准。

这儿略微解释一下设备描绘和服务描绘。

首要说设备,比方一个家庭影院,有显现屏,有功放音响,还有蓝光机。那么这个家庭影院home threatre,便是一个根设备(root device),它下属有Screen,Amplifier,BDplayer这些从设备。home threatre的描绘XML中会有一个device list,列出Screen,Amplifier,BDplayer这些设备的基本信息及这些设备描绘的URL,以及设备的presentationURL(这相似于web服务器,经过拜访presentationURL,本地会加载一个网页,在这个网页上能够操作设备及其它具有的服务);还会有一个sevice list,里边列出home threatre可调用的服务基本信息及服务描绘URL。

再来是服务,经过拜访服务描绘URL,能够取得服务描绘XML,里边会具体介绍服务的信息,包括干什么用的,归于哪个设备,有哪些action,需求哪些参数,怎样调用等等。

DLNA投屏协议从理论到实践优化

(4)操控(Control)

拿到devicedescription和service descriptions今后,那咱们怎样去遥控这些设备呢?

在设备描绘部分,device description还有关于怎样操控device的描绘,会给出一个Control URL,CP能够向这个URL发送不同的操控信息就能够操控device了,然后device也能够回来一个信息反馈。

这种CP和device之间交流音讯依照Simple Object Access Protocol (SOAP)的格局来写。SOAP经过HTTP来传,现在的版别是1.1,叫做SOAP 1.1 UPnP Profile。这个Profile把操控/反馈信息分红三种:UPnP Control Request,UPnP Control Response和UPnP Control Error Response,都比较好理解。SOAP协议是有信内容Body的,和SSDP不相同。音讯Body里边就能够写想调用的动作了,叫做Action invocation,或许还要传参数,比方想播映一个视频,要把视频的URL传过去;device收到后要respone,表明能不能履行调用,出错的话会回来一个错误代码

恳求播映操控:

DLNA投屏协议从理论到实践优化
是一个xml的字符串,包括操控指令以及对应的参数,其他操控指令如操控播映进展、暂停等指令相似。

(5)事情(Eventing)

在服务进行的整个时间内,只需变量值发生了变化或许模式的状况发生了改动,就产生了一个事情,该事情服务供给者(某设备的某个服务)会把该事情向整个网络进行多播(multicast)。而且,CP也能够事先向事情服务器订阅事情信息,就像RSS订阅相同,保证将该CP感兴趣的事情及时准确地单播传送过来(unicast)。

下面是一个Unicast eventing 的architecture图,CP是subscriber,服务器是publisher。

DLNA投屏协议从理论到实践优化

subscriber(通常是个CP)向publisher(通常是个service)发送订阅音讯(subscribe),更新订阅音讯(renewal),退订音讯(cancel)。publisher向subscriber推送订阅(event:SIDX)。

事情的订阅和推送这块用的通讯协议是GENA(General Event NotificationArchitecture) ,经过HTTP/TCP/IP传送。GENA的格局就不细说了,具体请参阅UPnP-arch-DeviceArchitecture-v1.1。下面列出订阅进程供参考:

1.订阅。subscriber发送订阅音讯首要包括事情URL(evenURL),服务ID号(service identifier),这两个能够在设备服务描绘信息中找到,以及寄送地址(delivery URL)。还会包括一个订阅期限(duration)。

2.成功订阅。publisher收到订阅信息,假如同意订阅的话就会为每个新subscriber生成一个仅有的subscriberidentifier并记载subscriber的duration和delivery URL。还会记载一个次序添加event key用来保证事情确实推送到subscriber那里。比方说有个新事情,key是6,然后把这个事情推送给某个subscriber那里,subscriber那里记载的event key是4,现在收到的事情key是6,他就知道他没收到key为5的事情,这样他就向publisher索要漏收的事情,然后保证两边变量值或状况的共同。

3.初次推送。订阅同意订阅之后还会向subscriber发送一组初始变量或状况值,进行初次同步。

4.续订。subscriber有必要在订阅到期前发送renewal续订。

5.订阅到期。订阅到期后publisher会把subscriber的信息删除,subscriber又回到订阅前的状况。

6.退订。subscriber发送cancel信息将会取消订阅。subscriber因非正常退出网络的话,则不会退订直到订阅到期。

7.订阅操作失利信息。当订阅、续订和退订不能被publisher接纳或许出现错误时,publisher会发送一个错误代码。

再简略说下多播(multicast,或许叫组播,本文中两者等同)和单播。even的组播选用UDP/IP,和SSDP相同,便是端口号变成了7900。下图是几个协议的所处层的位置,能够清楚地看到它们之间的差别。首要关于IP多播,要知道只存在UDP多播,没有TCP多播这回事。为什么呢?多播的重点是提高网络功率,将同一数据包发送给尽或许多的或许未知的计算机。像这种对网内一切设备的频繁音讯告诉选用多播是为了减小网络担负,SSDP也是相同。

可是SSDP和multicast这种选用UDP方法的协议存在一个问题,便是可靠性不行。处理的办法便是屡次告诉,可是一般不会超越三次以免添加网络担负,这样就因小失大了。像SSDP的话会选用定期播送advertice的方法,使各式各样原因而没收到advertice的CP重新取得advertice,又处理了UDP丢包的问题。

前面在寻址的时候用到的DHCP用的是UDP播送(broadcast)。当一个新的设备加入网络时,他想要分个IP,但又不知道DHCP服务器的IP地址,所以他就在网内播送,用255.255.255.255地址来告诉一切计算机。DHCP服务器收到恳求后会为他请求并回来一个IP地址。

DLNA投屏协议从理论到实践优化

(6)表达(Presentation)

 只需得到了设备的URL,就能够取得该设备表达的URL,取得该设备表达的HTML,然后能够将此HTML纳入CP的本地浏览器上。这部分还包括与用户对话的界面,以及与用户进行会话的处理。因而设备表达能够理解成“遥控器”。这部分界说描绘界面,标准界面以及传输界面内容。长途界面是供CP用户运用的,CP用户经过长途界面完结设备描绘的获取,操控设备,订阅收取设备事情等等。

好了,到此,UPnP的作业进程的解说就完毕了。总结一下:

DLNA投屏协议从理论到实践优化

UPnP分为6个过程:

先是Addressing,设备加入网络,经过DHCP或许Auto-IP取得IP;这部分在闪联IGRS中是没有界说的。

然后是Discovery,选用SSDP协议(UDP),用multicast/unicast能够完结设备的上线和离线告诉和组播查找设备,设备用unicast(单播,UDP)呼应CP的查找。

往下是Description,经过HTTP协议(TCP)取回来是一个XML文档,包括物理描绘和服务描绘;

再来是Control,选用SOAP协议(HTTP/TCP),完结CP和devices之间的交互;

Eventing,选用GENA协议(HTTP/TCP),完结设备事情音讯的订阅和推送,为保证可靠性,故是TCP传输;事情的推送还有multicast (UDP)。

最终是Presentation。UPnP并没有界说Presentation应该有哪些东西。一个HTML嘛,哪样写得好哪样来!

2.2 为什么运用udp、tcp组合方法

UPnP(Universal Plug and Play)协议运用UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是因为它们别离具有不同的特点和适用场景。

  1. UDP:UDP是一种无衔接的传输协议,它供给了一种简略的、无状况的数据传输方法。UPnP运用UDP首要是为了完成设备的主动发现和播送告诉功用。UDP的特点是传输速度快、推迟低,适用于实时性要求较高的通讯场景。经过UDP播送,设备能够在网络中发送自己的服务信息,其他设备能够经过监听UDP播送来主动发现和识别这些设备。

  2. TCP:TCP是一种面向衔接的传输协议,它供给了可靠的数据传输和流操控机制。UPnP运用TCP首要是为了设备之间的操控和通讯。TCP的特点是供给可靠的数据传输,保证数据的完整性和有序性。经过TCP衔接,设备之间能够树立稳定的通讯通道,进行指令和数据的传输。

综合运用UDP和TCP的原因是为了在UPnP协议中兼顾实时性和可靠性。UDP播送能够快速地进行设备的主动发现和告诉,适用于实时性要求较高的场景,而TCP衔接则供给了可靠的数据传输和操控通讯,保证指令和数据的准确传输。

总之,UPnP运用UDP和TCP的组合,既满足了设备主动发现和播送告诉的实时性要求,又保证了设备之间的操控和通讯的可靠性。

三、存在问题及注意事项

1.当DMC无法查找到DMR时怎样进行排查? 处理办法: 1.ios确认IOS版别,12之前只需DMC发出SEARCH包,而且DMR正确回复即可查找到设备;IOS高版别,Android运用(哔哩哔哩、腾讯等)最新版别需求DMR守时发送notify包; 2.保证notify alive包包括设备类型、设备uuid、设备描绘文件正确,DMR的服务包正确而且被接纳,DMC的SEARCH包被正确回复。

2.CPU过高时怎样进行剖析及怎样处理的?

a.cpu过高90%的情况都是由于socket堵塞导致的。项目中运用jetty.jar作为网络服务器,当socket io异常时经过字节码插桩作为plugin刺进三方库进行异常监听并释放:

DLNA投屏协议从理论到实践优化

DLNA投屏协议从理论到实践优化

b.排查运用的服务器网卡地址是否是可用的,现在仅支撑Eth、Wlan网卡,检查是否是用的p2p、usb或其他网卡。

3.怎样知道DMC设备播映中断线?

播映中DMC会定期获取DMR的播映进展TransportInfo,经过对该事情作为心跳包进行周期性检测来判别是否断线。

4.怎样避免设备间相互操控? DMC A设备投屏后,其他DMC设备也能够操控音量、暂停的操作。原因在于没有树立设备管控机制,经过UDN在DMR端树立设备办理,在DMC发送操作指令时比较IP和UDN来决定是否呼应指令。

2.cpu问题 cpu过高场景及通用处理办法:

  1. 设备数量过多:假如网络中的设备数量过多,每个设备都会发送和接纳UPnP音讯,这或许导致CPU的负载添加。能够经过削减设备数量或许优化网络结构、对设备选择性应对来缓解这个问题。
  2. UPnP音讯处理复杂:假如设备需求处理复杂的UPnP音讯,例如解析和处理很多的XML数据,会耗费很多的CPU资源。能够对通用性的资源描绘进行复用,如DMR本身的描绘文档。
  3. DLNA会根据每张网卡创建组播,根据网卡信息拼装发送notify报文,并用网卡发送notify报文,假设网卡数量为M,notify类型为N,重复发送次数为R,或许的发送次数为:M * N * N * R,注意此时有些报文是无用的,需求根据notify报文中的ip和multicast 组的ip进行匹配,匹配后发送次数为M * N * R