Miracast分析和实线
一,Miracast 简介。
Wi-Fi Display经常和Miracast联系在一起。实际上,Miracast是Wi-Fi联盟(Wi-Fi Alliance)对支持Wi-Fi Display功能的设备的认证名称。通过Miracast认证的设备将在最大程度内保持对Wi-Fi Display功能的支持和兼容。下面介绍Wi-Fi Display,简称WFD.
二,Wi-Fi Display,先看下图。
从上图可以看出分为这样几个技术层次:
1,基于WifiP2P网络技术。
2,利用RTSP作为音频及视频流控制协议.
3,利用ts对音视频进行封包。
4,音视频的编解码。
我们这里重点介绍WifiP2P和rtsp协议。
三,WifiP2P.所谓的WifiP2P就是利用无线Wifi进程点对点的传输。要实现这个功能,需要进行一下几步。
1,发现支持网络环境下WifiP2P的设备。
这个发现原理上区别于Airplay的bonjour发现协议,Airplay需要接收端在和发送端在同一个网络,是基于组播的发现协议,详细的请见Airplay文档。而WifiP2P,不需要链接wifi链接,只要双方都都有相同的wifi ap信号,都支持WifiP2P协议,即可发现对方,发现对方后,需要建立物理链接,比如两台电脑之间,要链接链接,需要先安装网卡,然后给网卡分配或者设置ip地址,我们这里叫物理链接。
2,建立物理链接。
要理解这个链接过程必须先,理解这样几个名词。
发送端:也可以叫被显示端,视频源端。
接收端:也就是显示端。
服务端:也就是发送端,WFD规定发送端之能作为rtsp协议的服务端(监听端)
连接端:也就是接收端(限时端),WFD规定接收端之能作为rtsp的连接端。
G0端:group owner的简称,GO可以理解为ip 的地址的分配端,当个设备都想投到一个设备S上的时候,S必须是GO,如下图所示,GO端负责 client的ip地址分配。
解释了上面的名词,下面我们来说一说物理链接的过程。
1,当c1向s发起链接请求后。s会收到链接请求,包括c1的物理网卡地址。
2,然后确定谁是GO.有两种方式。
A,自己制定。S可以创建group onwer,让自己成为GO.
B,双方协商。这个通过Intent的值协商,谁更愿意成为GO。谁的Intent 值高就成为GO, 如果Intent值相同就需要判断请求封包Tie breaker位,如果2个设备都强制做Group Owner则这次协商失败。如下图所示。
3,当确定了谁是GO后,GO为客户端配分IP。此时如果是像windows这样的可视化的系统,可以在看到系统多了一个网卡,也就是安装了一个虚拟网卡,然后给这个网卡分配ip.
4,还要注意一点,值有GO端从能分配IP,所有当S一对多的链接时候,S必须指定为了GO端,不能通过协商的方式确定。
5,至此物理链接已经完成了。 但是双方还不知道对方的ip,怎么链接应用层的链接呢?
3,获得对端的IP和端口。
就目前我掌握的情况来看,获取ip有两种 情况三种方法。
1,实际上作为go端ip是固定的,客户端直接写固定ip就可以了。
2,但是当我们做一对多的时候,或者s必须是接收端的时候,他必须去链接c1、c2的时候,就不能用固定ip。此时s端做为go,他实际上只知道给c端分配的ip的,只是应用程序不知道,android的api也没有给出这个ip。这里人们探索出来了两种办法。
A,查询arp表,准确的说通过物理网卡的地址查询arp表,但是实际操作种发现arp表更新不及时的问题和保留历史物理地址-ip信息的问题。也就是说会查不到,或者查有多条ip无法取舍。
B,技术研究系统源代码代码发现,go端分配ip是通过dhcp模块分配的,我们只需要在dhcp里面获得分配的最新的ip就可以了。
3,至此ip已经能获取到了,即是建立应用层的链接了。
4,建立应用层的rtsp连接。
技术交流群:864517291