投屏协议 DLNA ---UPnP

2019-07-22  本文已影响0人  马上就来

投屏协议 DLNA ---UPnP

投屏的应用场景
视频投屏 AirPlay(苹果私有的协议) 无线投屏
DLNA(安卓 由三星等制定的协议)

DLNA最重要的部分是UPnP

协议栈
基于 IP ,UDP 和TCP,UDP用来发现设备 TCP来控制设备

UpnP组件 三部分组成
1.设备 网络实体(电视) 逻辑设备(视频 图片播放器)
2.服务 展示服务 UpnP最小可控单元 包括一系列可控制动作和一组记录该服务目前情况的状态 服务依赖与设备
3.控制点 如手机响电脑投屏 手机是控制点 用来获取设备描述和相关服务,发出控制设备动作 向服务获取服务

工作流程

1.寻址 通过DHCP 寻找局域网内的ip地址
2.发现 SSDP协议 第一种 搜索响应 多播地址搜索设备 第二种 主动 宣告自己的存在(ssdp:alive,ssdp:byebye)

UDP:单播(针对特定IP) 多播(一组IP即一定范围) 广播
数据报协议
UDP 可以发送 2的16次方 - 自身协议8字节 - IP头部 20字节 = 65507字节
MTU(设备最大传输单元 1500) - 20 - 8
如果UDP大于1472 会到IP层进行分片

代码
1.start 绑定端口 加入多播组
多播地址是固定的
static NSString *ssdpAddres = @"239.255.255.250";
2.search 搜索列表

 主动搜索发送的报文格式
 M-SEARCH * HTTP/1.1
 MAN: "ssdp:discover"
 MX: 5
 HOST: 239.255.255.250:1900
 ST: upnp:rootdeviceqings  

3.设备回调
拿到设备描述的 URL 地址(请求相应的 URL 地址)
设备标识 USN 通知消息的子类型 ssdp

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
      fromAddress:(NSData *)address
withFilterContext:(nullable id)filterContext

通过设备描述请求设备信息XML

4.将搜索结果回调

5.控制 SOAP
控制点通过ControlURL发送控制
请求控制通过 TCP 请求资源(AVTransport) 动作响应

AirPlay

DNS-SD协议 发现协议
mDNS协议 多播协议 需要向多个设备发送 不需要向每一个设备发送 而是发送到一个特定的地址
AVPlayer FFmpeg

上一篇下一篇

猜你喜欢

热点阅读