DLNA
是一个实现数字生活网络解决方案,DLNA标准包括多项协议及标准,其中最重要的部分是UPnP协来议实现设备的发现和控制
UPnP协议栈
UPnP设备体系结构包含了设备之间、控制点之间、设备和控制点之间的通信。完整的UPnP由设备寻址、设备发现、设备描述、设备控制、事件通知等。
UPnP工作流程
1.寻址阶段是 UPnP 工作流程中的基础,在 IPv4 的环境中,每台设备或每个控制点在同一网关下分配独立的IP地址
2.发现阶段,当开放了 UPnP 服务的设备加入网络后,该设备将以组播的方式,向网络中的控制点通知自己以及服务的存在
其中多播地址239.255.255.250端口1900,
NTS: ssdp:alive表示通知设备在线,于此相关发送byebye设备离线
Cache-Control: max-age=16 如果设备一直没有收到byebye,当max-age超出时为更新状态也会主动离线
投屏端rootdevice会注册设备并创建一些对应的服务
3.搜索阶段
当新的端点设备加入时,可主动通过SEARCH来查询已经注册的设备和对应的服务列表,选中设备后就可以获取到投屏设备的路径,uid于对应注册的服务
4.端点控制和事件
当控制点获取到设备及其注册的服务的详细信息后,就可以通过发送相应指令SOAP控制包文
由此控制点实时获取投屏设备的状态,控制播放设备的声音,播放内容,进度条等等
5.投屏展示
以腾讯视频为例,手机端点投射时会发出播放地址,和play指令.投屏端在接收到端点请求都会有对应的反馈
于此同时在控制过程中为了同步播放器的状态,端点会实时发送GetTransportInfo来获取播放器实际状态来确保设备在线
具体学习代码怎么写可以参考这个大佬的项目
GitHub - devin1014/DLNA-Cast: 基于Cling库封装的DLNA投屏库,支持DMC、DMS、DMR功能。 (nuaa.cf)