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