介紹
由於 Google 開始在 Android 4.2 上支援 Miracast,無線顯示技術在 Android* 手機和平板電腦上正變得愈加流行起來。 藉助無線顯示技術,終端使用者可以更輕鬆地擴充他們手機的 LCD 尺寸。 我認為這是獨立軟體開發商 (ISV) 面臨的絕佳機會,有助於他們將無線顯示功能整合到他們的應用之中,尤其是遊戲和視頻播放器。
然而,對 ISV 來說,如何為 x86 手機上的 Miracast 實現英特爾 無線顯示差異化則成為了他們面臨的巨大挑戰。 在本文中,我們將為您展示在 K900 上啟用 iQiyi 線上視頻播放器和 WPS office 軟體,並藉此介紹如何為 Miracast 實現雙顯示差異化。 我們希望未來能夠支援更多的重要應用。
什麼是 Miracast
Wi-Fi 聯盟在 2012 年 9 月 19 日正式宣布推出經過 Wi-Fi* 認證的 Miracast,這種開創性的解決方案無需使用電纜或網路連接就能在裝置間無縫顯示視頻。 使用者可以在大螢幕電視查看智能手機中的圖片或視頻,與會議室投影儀即時分享膝上型電腦螢幕內容,或者在平板電腦上觀看家用電纜盒中的實況轉播節目。 由於這種 Miracast 串連是通過 Wi-Fi 認證的 Wi-Fi Direct* 實現的,因此並不需要訪問 Wi-Fi 網路功能,同時在 Miracast 認證的裝置中就已經存在這種串連能力。
Miracast 的串連是一種基於 Wi-Fi direct 的對等串連。 基於 Wi-Fi 的 Miracast 架構如下所示。
圖 1: Miracast* 架構
如下所示,有四種 Miracast 串連模式:
圖 2: Miracast* 串連模式
藉助 Miracast 串連,您無需使用 Wi-Fi AP 基礎設施就能為多個裝置實現串連,如 topology 1 所示。 您在串連了一個 AP 之後也可以通過一個適配器串連到一台顯示器,如 topology 2 所示。 通過該模式,您可以在家中方便地觀看線上視頻。 如果您擁有一台可以支援 Miracast 的智能電視,您的電視、AP 和智能手機甚至可以實現彼此互聯,如 topology 4 所示。
根據 Miracast 標準,源裝置和顯示裝置的互動模式如所示:
圖 3: Miracast* 會話管理
源裝置和顯示裝置在串連設定之前就發現了彼此的 Miracast 功能。 這種串連是基於 Wi-Fi direct 或 TDLS 實現的。 源裝置和顯示裝置根據能力協商為 Miracast 會話確定參數。 這種協商過程是基於 TCP 串連實現的。 源裝置將根據 UDP 串連通過 MPEG2-TS 格式將內容傳輸給顯示裝置。
表 4 中列出了 Miracast 無線流支援的格式。
表 4: Miracast* 流格式
Android 4.2 上的 Miracast
Google 自 Android 4.2 版本開始支援 Miracast。 藉助無線顯示技術,終端使用者可以分享電影、照片、YouTube 視頻和高清電視螢幕上的任何內容。 外部的高清電視被視為一種外部顯示裝置。
當前,Android 上的 Miracast 支援複製模式和示範模式,如下所示:
圖 5: Miracast* 支援模式
藉助複製模式,我們可以將手機顯示內容複寫到遠程顯示裝置上。 發送給適配器的幀數解析度必須與本地顯示器的解析度相匹配。 在該模式中,本地和遠程顯示裝置開啟後會顯示相同的內容。
在示範模式中,Android 現在已經允許您的應用在通過有線或 Wi-Fi 串連方式串連到使用者裝置上的附加螢幕上顯示獨特的內容。 而前提條件就是必須對這些應用進行修改使其支援該模式,否則應用在預設情況下只能支援複製模式。
為英特爾架構 (IA) 手機上的 Miracast 開發差異化
英特爾在 Android 手機和平板電腦上的無線顯示解決方案可完全相容 Miracast。 我們也可以為 IA 手機上的 Miracast 開發一些具備差異化用途的應用程式。
第一個應用將用於支援 iQiyi 實現視頻背景流功能。 使用者可以使用一款支援背景流的 iQiyi 應用將視頻發送到解析度為 1080p 的遠程顯示器上,此時使用者就可以在本地螢幕上播放 1080p 視頻或者使用任何其他的應用,包括在不會給背景播放造成任何中斷的前提下寄送電子郵件或訪問他們的瀏覽器,如下所示:
圖 6: iQiyi 視頻背景音樂功能
第二個應用將用於支援 WPS office 在本地和遠程顯示器上實現 UI 拆分功能。 在通過無線顯示串連到電視之後,受支援的 WPS office 應用可以在遠程螢幕上顯示 PPT 投影片,同時在手機的螢幕上顯示 PPT 注釋,這種功能對發言人來說非常方便。 我們計劃今後在手機的螢幕上添加一個定時器時鐘,為發言人提醒時間。
圖 7: WPS office 的 UI 拆分功能
這兩種差異化用法是使用手機的 IA 硬體功能根據 Miracast 的示範模式開發出來的。 這兩種應用現已上傳到英特爾 AppUp 上,供終端使用者下載並安裝到他們的 IA 手機上。
案例研究: 如何支援雙顯示差異化用法
在本節中,我將根據我們的 iQiyi 應用支援經驗介紹如何?視頻背景流功能。
眾所周知,為了實現視頻背景音樂功能,關鍵的一點就是通過一種服務在背景中播放視頻,同時正確地處理表面視圖或視頻視圖。 當使用者按下本位鍵時,表面視圖或視頻視圖將被自動破壞,因此我們必須使用一個其他顯示器顯示背景流視頻。 程式流程圖如下所示:
圖 8: 背景視頻流流程圖
為了給其他顯示器建立出獨特的內容, 拓展 Presentation 類並執行 onCreate() 回調。 在 onCreate() 中,通過調用 setContentView() 為其他顯示器指定您的 UI。 作為 Dialog 類的一個擴充,Presentation 類提供了一個位置,使您的應用可以在其他顯示器上顯示一個獨特的 UI。
在您的示範中可以通過兩種方法使用其他顯示器。 使用 DisplayManager 或 MediaRouter API。 選擇一個示範顯示器的最簡易方法就是使用MediaRouter API。 媒體路由器服務負責跟蹤系統上有哪些可用的音頻和視頻路徑。 媒體路由器建議應用如果想在其他顯示器上顯示內容應當使用的首選示範顯示器。
此處告訴您如何通過使用媒體路由器建立簡報並在使用 getPresentationDisplay() 的首選示範顯示器上顯示該文稿。
1 |
MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); |
2 |
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(); |
4 |
Display presentationDisplay = route.getPresentationDisplay(); |
5 |
if (presentationDisplay != null) { |
6 |
Presentation presentation = new MyPresentation(context, presentationDisplay); |
選擇一個示範顯示器的另一種方法就是直接使用 DisplayManager API。 該顯示管理器服務提供的函數可以列舉和描述所有與系統串連的顯示器,包括可以用作示範的顯示器。
該顯示管理器負責跟蹤系統中的所有顯示器。 此處告訴您如何識別適合的顯示器並使用 getDisplays(String) 和 DISPLAY_CATEGORY_PRESENTATION 類顯示簡報。
1 |
DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); |
2 |
Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION); |
3 |
if (presentationDisplays.length > 0) { |
4 |
Display display = presentationDisplays[0]; |
5 |
Presentation presentation = new MyPresentation(context, presentationDisplay); |
開發人員可以在 Android SDK 上引用示範範例程式碼,如下所示:
\sdk\sources\android-17\android\app\Presentation.java
總結
對於基於 IA 的手機和平板電腦來說,除了英特爾 Inside 的賣點之外,無線顯示特性可能會成為一個閃光點。 獨立軟體開發商應注意根據無線顯示開發出更具創新性的用法,尤其是雙顯示差異化用法。
參考資料
英特爾公司 2013 年著作權。 所有權利受到保護。
* 其他的名稱和品牌可能是其他所有者的資產。