DLNA--无线投屏方案调研
1、DLNA是一套标准,是由微软,因特尔,索尼等大厂商组成的联盟,他们制定了一套标准让大家去用;
DLNA并不是创造技术,而是形成一种解决的方案,一种大家可以遵守的规范。所以,其选择的各种技术和协议都是当前所应用很广泛的技术和协议。而UPNP就是其中一个主要的协议;
2、UPnP通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议。该协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。UPnP通过定义和发布基于开放、因特网通讯网协议标准的UPnP设备控制协议来实现这一目标;
3、DLNA设备分类
- DMS(Digital Media Server),数字媒体服务器,媒体内容的提供者,为DMP/DMR提供内容播放,DMS可以控制提供哪些媒体内容。典型设备如PC,数字机顶盒,手机,音乐播放器等;
- DMP(Digital Media Player),数字媒体播放器,可以从DMS上查找获取媒体内容并播放,典型设备如:智能电视;
- DMR(Digital Media Renderer),数字媒体渲染器,可以播放DMS上的媒体内容,跟DMP的区别是DMR只有媒体播放功能,DMP除了播放功能外,还有浏览查找媒体的功能,典型设备如:显示器,音箱;
- DMC(Digital Media Controller),数字媒体控制器,可以查找DMS的内容,建立DMS和DMR之间的连接,控制媒体的播放,典型设备如:遥控器;
DLNA架构图
如图所示,UPnP属于DLNA分层架构中的第三层(Device Discovery&Control),它属于DLNA的基础协议框架,DLNA用UPnP协议来实现设备的发现和控制;
UPNP协议架构
UPnP模块图
主流开源库对比
UPnP主流开源库 | platform支持 | 功能支持(都包括音视频+图片) | 优势 | 劣势 | 评估工作量 |
---|---|---|---|---|---|
platinum C++ | Windows MAC OSX Linux Android | 1.支持上一首、下一首 2.支持音量控制 3.支持快进、快退,可以通过进度条的方式实现 4.支持开始、暂停和停止 | 1.跨平台,可移植性强 2.可以同时支持多个(DMS或者DMR)和一个control | 1.目前不支持IPv6 2.编译复杂,需要使用JNI,依赖Neptune 3.对于音视频、图片各种参数的解析支持不好,如需要对应这一步使用代替的方案,例如:FFMPEG实现了音视频格式的解析,可以参考 | 0.platinum upnp移植 1.车机接入UPnP协议(连接,局域网可见) 2.数据接收(媒体数据) 3.image、audio、video数据处理(Android自定义播放器处理【显示+播放】) 4.指令或者事件(开始、停止、快进等)接收处理响应(播放器响应) |
cling Java | Android | 1.支持上一首、下一首 2.支持音量控制 3.支持快进、快退,可以通过进度条的方式实现 4.支持开始、暂停和停止 5.支持图片拖动、缩放 6.支持获取MediaInfo信息 | 1.使用简单 2.开源项目比较多 | Cling已停止维护 | 1.车机接入UPnP协议(连接,局域网可见) 2.数据接收(媒体数据) 3.image、audio、video数据处理(Android自定义播放器处理【显示+播放】) 4.指令或者事件(开始、停止、快进等)接收处理响应(播放器响应) |
cybergarage Java | Android | 1.支持上一首、下一首 2.支持音量控制 3.支持快进、快退 4.支持开始、暂停和停止 | 1.同时支持IPv4和IPv6 | 源码中存在一些bug,在使用的时候需要注意,如使用到了有bug的逻辑,需要对源码进行修改 | 1.车机接入UPnP协议(连接,局域网可见) 2.数据接收(媒体数据) 3.image、audio、video数据处理(Android自定义播放器处理【显示+播放】) 4.指令或者事件(开始、停止、快进等)接收处理响应(播放器响应) |
libupnp C | Linux Android | 1.支持快进、快退 2.支持开始、暂停和停止 | 1.同时支持IPv4和IPv6 | 1.只能同时支持一个设备(DMS或者DMR)和一个control 2.对于音视频、图片各种参数的解析支持不好,直接不支持由上层应用实现 3.适配比较困难 | 0.移植 1.车机接入UPnP协议(连接,局域网可见) 2.数据接收(媒体数据) 3.image、audio、video数据处理(Android自定义播放器处理【显示+播放】) 4.指令或者事件(开始、停止、快进等)接收处理响应(播放器响应) |
GUPNP C | Linux | - | 1.使用GObject和libsoup,是libupnp的扩展 2.允许完全异步使用,而不使用线程 | 1.只能同时支持一个设备(DMS或者DMR)和一个control 2.对于音视频、图片各种参数的解析支持不好 3.使用方式多以PHP的方式使用 | - |
DLNA 媒体格式
媒体格式:规定了进行数字媒体和内容的共享和使用的时候的媒体格式; 其必须支持的是:JPEG,LPCM(线性脉冲编码调制),MPEG2;
其余为可选的支持格式:
Image -- JPEG、PNG、GIF、TIFF
Audio -- LPCM、AAC、AC-3、ATRAC、3plus、MP3、WMA9
Video -- MPEG2、MPEG-1、MPEG-4*、 AVC、WMV9