如何实现WiFi Display互联:我的一次WiFi Display(Miracast)功能发送端(source)和接收端(sink)的实现笔记
https://blog.csdn.net/xmc281141947/article/details/60573311/
公司业务需要在安卓车载产品和手机端实现WiFi Display(Miracast)功能,可能是最近浪的比较久,这项任务最终指派给了我,公司是衣食父母嘛有任务义不容辞。周一接到任务夸下海口一周内完成,周一到周三继续浪~浪你个浪~浪你个浪~浪~~~,周四开始百度“WiFi Display(Miracast)功能”,好家伙,各种讲解原理,什么发送端、接收端、TCP、RTP、RTSP、 P2P……不看还好一看彻底蒙逼,整个人都不好了。
周四晚上加班到深夜一个人缕缕思路,得出以下结论:内部怎么实现的与我无关,所以什么TCP、RTP、RTSP、 P2P等等我都不要去管它。
再看一遍百度WiFi Display解释:
支持Wi-Fi Display的发送端设备主要有:一加、HIKe Z1、MEIZU MX3、vivo Xplay、oppo find 5、LG: nexus4、F180L、F200L、LS970、F180S、F180K、F200S、200K;NEC CASIO: N-03E;Samsung: GT-I9300、GT-I9300Z;红米1S;红米2;小米2;小米2S;小米2A;小米3;小米4;Nubia Z5,Nubia Z5mini,Nubia Z7mini,Nubia Z7 max,Nubia Z7 Nubia Z11mini;callbar小雨滴4;中兴V5等
支持Wi-Fi Display的接收端设备主要有:智开miracast大屏分享器、小技PTV、WiPlug(中文名:推)、多笑金箍棒、小米盒子、、乐视盒子、无线视界等
这段话的重点在与:发送端和接收端,发送端比较好理解就是我们用的手机,各种手机WiFi Display(Miracast)功能叫法不一样,大部分位“多屏互动”,也有一些是“屏幕分享”等等。
接收端就比较难理解,百度也各种是列举了各种盒子,那么我们车载产品倒底支持接收(sink)吗?例如我司主要使用的是MTK的平台(6582/6753等),这种情况就要查阅MTK-DCC了,分两步:
1,首先请到MTK的DCC上搜索VideoSpecification(登录MTK的DCC需要Account 和Password ,一般使用MTK平台的公司MTK都会提供账户的),然后可以找到对应平台的这个压缩文件(不断更新,包含之前平台的支持情况),然后解压出来,会有一个excel文件;
2,请打开这个excel,查看(2) mtk Video Spec_SP 这页,然后找到External Display–>WIFI Display(WFD Miracast)查看支持情况,可以查到各平台支持的情况。如下图:
可以看到MT6582支持发送,但不支持接收(sink),MT6753支持发送和接收,完美~
接下来就是拷贝MT6753的源码,该源码当然是由MTK提供,将源码烧到该平台,打开设置找有关接收的(sink)地方,结果并没有想像中的那么顺利的找到sink。
怎么办?明明写的支持啊?这时时间来到了周五,汇报进度的日子了~~~
又是在网上一通胡乱看相关博客,然后并没有什么卵用……
后面我就试着用“Ubuntu”在源码里面搜索:find -name “Wi-Fi Display”,结果找到下图:
哦~Sittings明明就是有Wi-Fi Display的设置嘛,问题已很清晰了,xml有关于Wi-Fi Display的布局但是系统默认是隐藏的,在搜索WiFi Display字段,找到xml–>display_settings.xml中对WiFi Display的引用部分有隐藏,打开隐藏的代码,全编一下烧录进去,果然在车机上:设置-显示-投屏。然后按照网上的步骤建立连接,完成任务。最后发一张完成连接的图:
最后,本篇文章没有代码部分的展示,主要是展示解决问题的思路,毕竟“编程注重的是思路”。