1. 程式人生 > >如何實現WiFi Display互聯:我的一次WiFi Display(Miracast)功能傳送端(source)和接收端(sink)的實現筆記

如何實現WiFi Display互聯:我的一次WiFi Display(Miracast)功能傳送端(source)和接收端(sink)的實現筆記

公司業務需要在安卓車載產品和手機端實現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的引用部分有隱藏,開啟隱藏的程式碼,全編一下燒錄進去,果然在車機上:設定-顯示-投屏。然後按照網上的步驟建立連線,完成任務。最後發一張完成連線的圖:

這裡寫圖片描述

最後,本篇文章沒有程式碼部分的展示,主要是展示解決問題的思路,畢竟“程式設計注重的是思路”。