dlna原理

dlna原理

术语:DLNA: Digital Live Network Alliance, 资源共享协议标准以实现设备之间互联、互通和互操作功能 MS:媒体服务器 MR:媒体播放器 CP 控制点 CDs:内容目录服务 AVT:媒体传输服务 RCs:呈现控制服务 CM:连接管理服务 UPnP 基于IP网络的设备即插即用协议
原理:DLNA协议主要是解决局域网中设备之间的互联、互通和互操作问题,在UPnP基础之上定义了设备交互规范,其中AV框架规定了设备(媒体服务器MS,控制点CP,媒体播放器MR)之间的通信规范,具体分为以下步骤:
1. 控制点基于SSDP协议查找/发现网络中媒体服务器
2. 控制点调用媒体服务器MS的内容目录服务CDs的Browser接口浏览媒体文件,选中感兴趣的媒体文件后,调用媒体播放器MR的媒体传输服务AVT的SetAVTransport接口把链接地址URI发送给媒体播放器。
3. 控制点调用媒体播放器上的AVT和RCs服务来控制媒体播放(播放,暂停,声音和亮度调节)

交互过程:
媒体播放器和媒体服务器之间基于http(标配)或rtsp(可选)进行媒体文件传输,控制点不参与媒体传输过程,控制点主要是来协调媒体服务器和媒体播放器之间的互操作功能的,比如选择两者都支持的传输协议和媒体格式,通常会有个UI界面来操作各自提供的接口(UPnP Action),比如手机,遥控器等,下面描述控制点播放视频的交互过程。
1. 发现DLNA网络中的音视频设备(媒体服务器和媒体播放器):控制点会自动通过UPnP的发现机制来检测到网络中的媒体服务器和媒体呈现器,一种通过手机以组播的形式发送UPnP M-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()接口来结束媒体服务器和媒体播放器

DLNA(Digital Living Network Alliance)投屏音频播放是基于网络将多媒体内容从一台设备传输到另一台设备的技术,在安卓系统中,其原理涉及多个方面。 首先,DLNA投屏基于设备之间的WiFi连接,当安卓设备(如智能手机、平板电脑)与支持DLNA的接收设备(如电视、音响系统)处于同一WiFi网络时,便为音频传输搭建了基础通道,无需额外的物理连接或设置 [^1][^3]。 在设备发现阶段,安卓设备会通过网络协议在局域网内搜索支持DLNA的接收设备。一旦发现可用的接收设备,安卓设备会与接收设备建立通信连接。 接着是内容共享与传输。安卓设备将本地存储的音频文件或正在播放的音频流,按照DLNA协议规定的格式进行编码和封装。这些经过处理的音频数据会以网络数据包的形式,通过WiFi网络传输到接收设备。 接收设备接收到音频数据包后,会对其进行解码和解析,将数字音频信号还原为可播放的音频内容,并通过自身的音频播放系统进行播放。 在整个过程中,DLNA协议起到了关键作用,它规范了设备之间的通信方式、数据格式和控制指令,确保了音频数据能够准确、稳定地从安卓设备传输到接收设备,并实现播放控制,例如播放、暂停、停止、调节音量等操作,从而使用户能够轻松地将手机上的音频内容投屏到其他设备上并实现双向控制 [^1]。 ```java // 以下是一个简单的伪代码示例,展示安卓DLNA投屏音频播放的基本流程 // 假设存在一个DLNAController类用于管理DLNA投屏操作 class DLNAController { private WiFiManager wifiManager; private DLNADeviceFinder deviceFinder; private DLNAAudioSender audioSender; public DLNAController(WiFiManager wifiManager) { this.wifiManager = wifiManager; this.deviceFinder = new DLNADeviceFinder(wifiManager); this.audioSender = new DLNAAudioSender(wifiManager); } public void startAudioCast(String audioFilePath) { // 检查WiFi连接 if (!wifiManager.isWifiEnabled()) { System.out.println("WiFi is not enabled."); return; } // 发现支持DLNA的设备 DLNADevice targetDevice = deviceFinder.findDevice(); if (targetDevice == null) { System.out.println("No DLNA device found."); return; } // 发送音频数据 audioSender.sendAudio(audioFilePath, targetDevice); } } // 假设存在一个DLNADeviceFinder类用于发现DLNA设备 class DLNADeviceFinder { private WiFiManager wifiManager; public DLNADeviceFinder(WiFiManager wifiManager) { this.wifiManager = wifiManager; } public DLNADevice findDevice() { // 实现设备发现逻辑 // 这里省略具体实现,实际中会使用网络协议搜索设备 return null; } } // 假设存在一个DLNAAudioSender类用于发送音频数据 class DLNAAudioSender { private WiFiManager wifiManager; public DLNAAudioSender(WiFiManager wifiManager) { this.wifiManager = wifiManager; } public void sendAudio(String audioFilePath, DLNADevice targetDevice) { // 实现音频数据发送逻辑 // 这里省略具体实现,实际中会对音频进行编码、封装并通过网络发送 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值