蘭 珺
IPTV(互聯(lián)網(wǎng)交互電視)是基于寬帶業(yè)務(wù)平臺(tái),以機(jī)頂盒或其他具有音視頻編解碼能力的數(shù)字化設(shè)備為終端,通過(guò)聚合服務(wù)商的各種流媒體服務(wù)內(nèi)容和增值應(yīng)用,為用戶(hù)提供多種互動(dòng)多媒體服務(wù)的一項(xiàng)業(yè)務(wù)。
隨著業(yè)務(wù)的不斷完善,用戶(hù)大量增加,IPTV已成為黨和政府的重要宣傳渠道。根據(jù)工信部相關(guān)數(shù)據(jù),截止到2020年底,中國(guó)電信、中國(guó)移動(dòng)、中國(guó)聯(lián)通三家企業(yè)在全國(guó)范圍內(nèi)共發(fā)展IPTV用戶(hù)3.15億戶(hù),全年凈增2120萬(wàn)戶(hù)。廣西現(xiàn)有IPTV用戶(hù)近600萬(wàn),覆蓋人群超過(guò)2000萬(wàn)。
雖然從數(shù)據(jù)上看,IPTV的發(fā)展欣欣向榮,用戶(hù)量仍在增加,但增速已明顯放緩,已經(jīng)基本觸及用戶(hù)紅利的天花板。調(diào)整IPTV運(yùn)營(yíng)思路,深挖現(xiàn)有存量用戶(hù)價(jià)值,成為IPTV發(fā)展轉(zhuǎn)型的重要方向,而EPG頁(yè)面開(kāi)發(fā)因此成為重要的運(yùn)營(yíng)環(huán)節(jié)。
EPG是英文Electronic Program Guide的縮寫(xiě),意思是電子節(jié)目菜單。EPG是數(shù)字電視的重要標(biāo)志,是觀眾進(jìn)入IPTV的門(mén)戶(hù)。EPG界面上一般都提供有各類(lèi)菜單、按鈕、鏈接等可供用戶(hù)選擇節(jié)目時(shí)直接點(diǎn)擊的組件,因此,IPTV所提供的各種業(yè)務(wù)都是通過(guò)EPG系統(tǒng)索引及導(dǎo)航來(lái)完成的。
可以說(shuō),EPG系統(tǒng)在IPTV發(fā)展過(guò)程中的地位十分重要,它是IPTV業(yè)務(wù)面向用戶(hù)最重要的界面,IPTV的運(yùn)營(yíng)思路、運(yùn)營(yíng)手段和實(shí)現(xiàn)方式等均需EPG系統(tǒng)的密切配合。在IPTV人口紅利期已過(guò),更講求精細(xì)化運(yùn)營(yíng)的大環(huán)境下,IPTV業(yè)務(wù)對(duì)EPG的頁(yè)面開(kāi)發(fā)提出了更高的要求。
在IPTV EPG頁(yè)面的開(kāi)發(fā)過(guò)程中,經(jīng)常需要使用機(jī)頂盒進(jìn)行調(diào)試。由于IPTV機(jī)頂盒的型號(hào)種類(lèi)過(guò)多,且測(cè)試用機(jī)頂盒數(shù)量有限,常常出現(xiàn)多個(gè)開(kāi)發(fā)人員需要共享機(jī)頂盒進(jìn)行調(diào)試的情況,影響了開(kāi)發(fā)的效率。另外,如需在機(jī)頂盒中進(jìn)行調(diào)試,必須在開(kāi)發(fā)代碼中添加大量的調(diào)試代碼,而這些代碼在上線前必須全部刪除,稍有不慎就會(huì)影響EPG頁(yè)面的上線質(zhì)量,造成功能缺失、頁(yè)面BUG或用戶(hù)投訴等情況。因此,在機(jī)頂盒中調(diào)試EPG頁(yè)面代碼一直是開(kāi)發(fā)人員在工作中遇到的難題。
通過(guò)編寫(xiě)一個(gè)IPTV通用機(jī)頂盒開(kāi)發(fā)模擬器,可以讓開(kāi)發(fā)人員在EPG開(kāi)發(fā)過(guò)程中只要使用電腦就可以模擬機(jī)頂盒的操作,簡(jiǎn)化EPG調(diào)試流程,不需要在EPG代碼中添加其他過(guò)多的調(diào)試信息,提升開(kāi)發(fā)的質(zhì)量。本文將詳細(xì)說(shuō)明如何通過(guò)Chrome瀏覽器的擴(kuò)展(Extension)機(jī)制來(lái)實(shí)現(xiàn)IPTV機(jī)頂盒的模擬。
通過(guò)閱讀IPTV機(jī)頂盒規(guī)范可以看出,IPTV機(jī)頂盒的核心實(shí)質(zhì)上是一個(gè)網(wǎng)頁(yè)瀏覽器。主流的瀏覽器對(duì)頁(yè)面的解析功已經(jīng)很完整了,技術(shù)人員在開(kāi)發(fā)IPTV機(jī)頂盒模擬器的時(shí)候不需要從零開(kāi)始,可以直接使用現(xiàn)有瀏覽器,并根據(jù)IPTV機(jī)頂盒模擬器的特殊需求進(jìn)行二次開(kāi)發(fā)。另外,Chrome瀏覽器對(duì)于二次開(kāi)發(fā)是友好的,開(kāi)發(fā)人員可以很方便地進(jìn)行代碼的調(diào)試,只需要在網(wǎng)頁(yè)瀏覽器的基礎(chǔ)上添加三個(gè)IPTV機(jī)頂盒內(nèi)置的JavaScript對(duì)象,就可以在Chrome瀏覽器中基本實(shí)現(xiàn)模擬IPTV機(jī)頂盒的工作。三個(gè)IPTV機(jī)頂盒內(nèi)置的JavaScript對(duì)象分別為:
(一)MediaPlayer:直播、點(diǎn)播的視頻播放器對(duì)象;
(二)Utitliy:播放器狀態(tài)變化事件處理的對(duì)象;
(三)Authentication:IPTV用戶(hù)認(rèn)證,保存盒子信息和直播頻道列表。
另外,還需要實(shí)現(xiàn)模擬遙控器,來(lái)負(fù)責(zé)向機(jī)頂盒模擬器頁(yè)面發(fā)送消息,這就需要開(kāi)發(fā)一個(gè)遙控器頁(yè)面,讓開(kāi)發(fā)人員可以通過(guò)這個(gè)虛擬的遙控器發(fā)送按鍵消息給機(jī)頂盒模擬器頁(yè)面。
根據(jù)以上思路可以明確,若要實(shí)現(xiàn)IPTV機(jī)頂盒的模擬器及相關(guān)功能,就需要Chrome Extension完成兩個(gè)模塊的開(kāi)發(fā),一個(gè)模塊實(shí)現(xiàn)IPTV內(nèi)嵌的javascript對(duì)象,另一個(gè)模塊是遙控器模擬頁(yè)面。Chrome Extension的工作機(jī)制如下。
Chrome Extension主要由4個(gè)核心的組件來(lái)完成工作:
(一)Background scripts:服務(wù)腳本和Chrome同一個(gè)生命周期,在Chrome打開(kāi)時(shí)創(chuàng)建,在Chrome關(guān)閉時(shí)銷(xiāo)毀,同時(shí)負(fù)責(zé)監(jiān)聽(tīng)Chrome的事件進(jìn)行相應(yīng)的處理;
(二)Content scripts:和每個(gè)頁(yè)面是同一個(gè)生命周期,根據(jù)Chrome的安全沙盒的機(jī)制可以訪問(wèn)頁(yè)面上的DOM,但是不能訪問(wèn)頁(yè)面上的JavaScript腳本;
(三)Options page:通過(guò)這個(gè)頁(yè)面可對(duì)Extension進(jìn)行配置;
(四)UI Elements:點(diǎn)擊插件圖標(biāo)的時(shí)候響應(yīng)UI的頁(yè)面。
了解Chrome的Extension機(jī)制之后,就可以著手進(jìn)行IPTV機(jī)頂盒模擬器具體頁(yè)面的開(kāi)發(fā)工作了。IPTV機(jī)頂盒的模擬器整體流程如下圖:
流程說(shuō)明如下。
1.開(kāi)發(fā)人員打開(kāi)Chrome瀏覽器時(shí),瀏覽器會(huì)自動(dòng)加載IPTV模擬器插件,先調(diào)用background.js,完成缺省配置的配置工作。
2.開(kāi)發(fā)人員訪問(wèn)一個(gè)頁(yè)面,Chrome瀏覽器加載Content Script的腳本。
3.Content Script中的腳本,通過(guò)檢測(cè)加載HTML中的Meta節(jié)點(diǎn)來(lái)判斷是不是一個(gè)合法標(biāo)準(zhǔn)的IPTV頁(yè)面,如果是IPTV頁(yè)面則注入MediaPlayer、Authentication、Utitliy三個(gè)對(duì)象。
4.在頁(yè)面加載成功后,Content Script自動(dòng)生成遙控器的界面。
5.將遙控器的界面注入。
這樣,一個(gè)IPTV機(jī)頂盒的模擬器就完成了整體的流程,IPTV頁(yè)面即可正常顯示和訪問(wèn)。
需要解決的第二個(gè)問(wèn)題是如何模擬遙控器中的按鍵信息。在以往IPTV的EPG頁(yè)面開(kāi)發(fā)中,處理遙控按鍵的代碼都采用onkeypress來(lái)實(shí)現(xiàn),即用戶(hù)按下或按住一個(gè)遙控器按鍵時(shí)會(huì)觸發(fā)onkeypress事件。因此,可以通過(guò)構(gòu)建一個(gè)事件直接調(diào)用document.onkeypress的方法來(lái)模擬調(diào)用遙控器情景。
實(shí)現(xiàn)IPTV機(jī)頂盒的模擬器功能,最重要的就是模擬機(jī)頂盒的視頻播放功能。采用配置需要模擬播放的視頻URL地址,使用H5的Video標(biāo)簽,EPG頁(yè)面通過(guò)調(diào)用MediaPlayer來(lái)實(shí)現(xiàn)視頻播放。同時(shí),將Video的播放事件轉(zhuǎn)換為IPTV對(duì)應(yīng)的播放事件,發(fā)送給相關(guān)頁(yè)面。
此外,還可以通過(guò)MediaPlayer的joinChannel方法來(lái)模擬IPTV直播頻道視頻流的播放,本文不再贅述。
通過(guò)IPTV通用機(jī)頂盒模擬器的開(kāi)發(fā),可極大減輕開(kāi)發(fā)人員在IPTV EPG頁(yè)面開(kāi)發(fā)過(guò)程中對(duì)機(jī)頂盒的依賴(lài)。同時(shí),由于開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的EPG代碼基本匹配,不再需要區(qū)分開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境,整體提升了EPG的整體開(kāi)發(fā)效率。
后續(xù),模擬器工具可進(jìn)行相應(yīng)開(kāi)發(fā),對(duì)接應(yīng)用到真實(shí)的IPTV環(huán)境中,用于EPG實(shí)時(shí)頁(yè)面監(jiān)控、IPTV視頻播放質(zhì)量監(jiān)控、IPTV內(nèi)容編排管理等工作,進(jìn)一步為IPTV的運(yùn)營(yíng)提供支撐能力。