当下三大主流投屏协议,Airplay、Miracast、DLNA。Airplay(苹果设备)、Miracast(安卓设备)都属于镜像投屏,也就是手机显示什么,投屏到大屏幕上也显示同样的内容,唯独DLNA比较特殊,它即支持安卓也支持苹果设备,同时流媒体推送属性还让他不影响发送端设备的正常使用。尽管自身存在很大的局限性,但是不可忽略的是目前DLNA投屏的使用率是真的高。
原理:DLNA协议主要是解决局域网中设备之间的互联、互通和互操作问题,在UPnP基础之上定义了设备交互规范,其中AV框架规定了设备(媒体服务器MS,控制点CP,媒体播放器MR)之间的通信规范,具体分为以下步骤:
1.控制点基于SSDP协议查找/发现网络中媒体服务器
2.控制点调用媒体服务器MS的内容目录服务CDs的Browser接口浏览媒体文件,选中感兴趣的媒体文件后,调用媒体播放器MR的媒体传输服务AVT的SetAVTransport接口把链接地址URI发送给媒体播放器。
3.控制点调用媒体播放器上的AVT和RCs服务来控制媒体播放(播放,暂停,声音和亮度调节)
交互过程:
媒体播放器和媒体服务器之间基于http(标配)或rtsp(可选)进行媒体文件传输,控制点不参与媒体传输过程,控制点主要是来协调媒体服务器和媒体播放器之间的互操作功能的,比如选择两者都支持的传输协议和媒体格式,通常会有个UI界面来操作各自提供的接口(UPnPAction),比如手机,遥控器等,下面描述控制点播放视频的交互过程。
1.发现DLNA网络中的音视频设备(媒体服务器和媒体播放器):控制点会自动通过UPnP的发现机制来检测到网络中的媒体服务器和媒体呈现器,一种通过手机以组播的形式发送UPnPM-SEARCH命令来查找设备,另外是网络中的音视频设备会间隔地发送ssdp:alive消息告诉控制点其设备信息和其提供的服务。
2.查找、浏览网络中媒体服务器的视频:调用媒体服务器提供的内容目录服务接口ContentDirectory::Search()或Browser(),媒体服务器会以didl-lite规范返回目录及文件信息,其中包括支持的传输协议和格式
3.获取媒体播放器的协议信息:控制点调用媒体播放器连接管理服务的接口ConnectionManager::GetProtocolInfo()来获取传输协议和支持的数据格式列表。
4.匹配传输协议和数据格式:控制点在第2步从媒体服务器获取到的视频格式和支持的传输协议,在第3步同样获取到媒体播放器支持的传输协议和媒体数据格式,通过比较选择两者都支持的协议和数据格式。
5.配置媒体服务器和媒体播放器:DLNA中媒体服务器和媒体播放器必须都支持连接管理服务,控制点通过调用ConnectionManger::PrepareForConnection()接口来做预配置处理并返回传输服务(AVTransport)的实例Id,以方便多个控制点操作状态的管理
6.选取要播放的视频:控制点根据第2步中返回的视频列表中选择要播放的视频,调用音视频传输服务AVTransport::SetAVTransportURI()接口来告诉媒体播放器资源存储地址。
7.开始视频传输:控制点调用媒体播放器的音视频传输服务AVTransport:play()/stop()接口进行控制操作,这个时候实际就是媒体播放器从媒体服务器上下载视频播放,控制点不参与视频数据的传输过程。
8.视频显示控制:控制点调用媒体播放器的呈现控制服务RendringControl的接口来调整显示效果,如控制亮度,对比度,声音大小等。
9.重复选择下一个视频:控制点通过调用AVTransport::SetAVTransportURI()或者AVTransport::SetNextAVTransportURI()接口来重复上面的过程播放下一个视频。
10.播放结束:当控制点不想再播放视频时,就可以调用连接管理服务ConnectionManager::ConnectionComplete()接口来结束媒体服务器和媒体播放器。