2021-4-9 | 電影電視
漸暴露出在鼠標、手勢、語音等輸入上的缺陷,這就使得人手一臺的手機或Pad來操控電視成為一種可能,同時利用三屏互動技術還是可以實現電視、手機、Pad上面的內容共享,實時傳輸等功能。公司市場調查表明,三屏互動技術的開發和實現已迫在眉睫,且對今后智能電視的開發起著重要作用。
一、涉及的關鍵技術
三屏互動的制作過程中主要運用的網絡通信技術包括:IP多播技術、HTTPWebServer技術和Socket套接字技術。它們分別用于手機對電視的局域網內檢索、將手機端媒體內容甩屏給電視播放、進程間的消息通信。
虛擬驅動技術:用于在電視端模擬實現手機端發送過來的虛擬按鍵、鼠標、傳感器消息;多媒體播放技術:用于在手機端和電視端分別播放手機端的多媒體文件;語音識別和合成技術:分別用于識別手機端的用戶錄音數據和合成電視端需要播報的文字內容。
二、三屏互動總體設計
對于Android和Linux雙系統的智能電視來說,三屏互動的原理框圖如圖1所示,手機端負責檢索和連接電視,并將手機的虛擬按鍵、鼠標、手勢、傳感器和語音數據發送給智能電視端的后臺控制服務(ControlService),并開啟一個HttpWebServer供智能電視端的Linux播放接口下載并播放手機SD卡內的媒體文件。智能電視Android端主要負責接收手機端的消息,并分別處理或傳給Linux端的播放接口。智能電視Linux端主要負責接收和播放ControlService傳過來的媒體資源,并響應虛擬驅動設備的消息映射。
三、手機端接口設計與實現
(一)檢索和連接部分
1.依據設計思想,采用IP多播技術進行手機對電視檢索的設計,然后再運用TCP單播建立電視與手機的一對一的可靠連接。手機端作為多播服務器端,首先發起檢索的多播請求,并等待電視回復平臺名和IP地址。
2.在手機端檢索到電視列表后,如果手機端用戶在電視IP列表點擊某一IP選項,主程序將另開一個線程專門負責與該IP對應的電視建立一對一的連接。當然,這其中需要電視端先開啟連接的服務器端,然后在對應端口監聽來自手機端的連接請求。
(二)虛擬遙控部分
當手機和電視建立連接后,手機端UI程序首先捕獲用戶按下Button消息,然后將它轉換為電視需要的按鍵消息,通過之前已經建立好連接的socket發送給電視。
2.電視鼠標的滑動和手勢的判斷都是手機端UI程序通過系統捕獲觸摸屏滑動數據來模擬鼠標和手勢的移動的數據,然后將移動的數據(包括方向和距離)打包成滑動消息,通過socket發送給電視端。
3.將智能手機中自帶的重力傳感器產生的感應數據傳給電視,來模擬一些Android游戲操作。
4.通過手機端錄入語音數據傳給電視的語音服務器來進行語音識別操作和控制。
(三)甩屏部分
手機甩屏部分主要實現手機文件的過濾和預覽,實現本地多媒體文件的播放,以及開啟一個Http的WebServer供電視端下載手機資源,最后就是將手機本地中的多媒體文件以url形式傳輸給電視。這個模塊是我們三屏互動中實現資源共享的一個主要的功能。它可以將手機端的文件“甩”給電視,然后在電視上播放。
四、智能電視端接口設計與實現
(一)ControlService的設計
我們的智能電視中,ControlService處于電視Android端,作為一個服務運行在系統后臺,主要設計如下幾個功能:(1)在手機端發起多播檢索消息后,通過ControlService的UDP多播客戶端回應消息給手機;(2)在檢索后,作為手機和電視通信的TCP服務器端,可以保證多個手機同時連接一臺電視;(3)將虛擬遙控、鼠標和甩屏命令等處理組裝后發送給UserService服務線程;(4)將語音數據發送給語音服務器和接收識別結果,同時將結果反饋給AndroidUI處理。
(二)語音識別處理
目前國內中文語音識別和合成最好的要數科大訊飛的語音引擎,該公司對于智能電視的語音識別庫有兩套方案。一種是打包在手機端程序,在手機端識別后發送文字到電視端;另外一種是在手機發送語音數據到電視,電視再轉發給云端語音服務器,由云端服務器來識別語音數據,再將處理結果反饋給電視端。目前我們就是采用后者的解決方案。
(三)虛擬按鍵在linux端的獲取
為了能在Linux主進程中接受虛擬按鍵消息,需要在Main函數中增加一個虛擬按鍵的讀取線程。
該線程主要工作流程如下:(1)獲取虛擬按鍵文件節點描述符;(2)阻塞讀取虛擬按鍵文件節點的按鍵數據;(3)映射按鍵碼;(4)發送按鍵映射碼給上層處理。
(四)UserService和播放接口設計
UserService主要用來在Linux端接收Android端ControlService的消息,以及調用底層接口去處理這些消息。其本質是一個中間接口層。為了實現以上功能,我們最好在主進程中另開一個單獨的線程來接收消息。同時為了更加靈活的調用下層接口來處理接收的ControlService消息,可以采用注冊回調類的方式來實現。
由于三屏互動的接收甩屏消息大部分是一些播放消息,所以我們在回調類中主要需要實現的也就是play播放接口。播放接口定義如下:virtualvoidplay(constchar**url,constchar*type,intcount,constchar*index)url是手機端的WebServer服務器上的媒體文件地址,可能是多個媒體文件。在此函數中調用Linux底層的播放器接口即可完成甩屏播放。