在第一篇中,我們分享了數字家庭軟件平臺的發(fā)展趨勢和特點(http://theprogrammingfactory.com/article/index.aspx?id=133757);在第二篇中,我們歸納了將Android移植到電視、機頂盒平臺需要面對的五大技術挑戰(zhàn)并重點探討了挑戰(zhàn)1 : 符合電視體驗的2D/3D圖形性能和用戶交互模式方面的挑戰(zhàn)。在本篇中,我們將一起來繼續(xù)分析其他的技術挑戰(zhàn)。
- 挑戰(zhàn) 2 : 適合大屏的豐富多媒體影音體驗:
Android設計時是以移動手持設備為目標的,因此并沒有考慮作為家庭娛樂中心的電視和機頂盒的多媒體影音需求。在下述方面需要改進:
-
- 更加優(yōu)化的多媒體框架;
- 支持更多的音視頻文件格式和容器;
- 支持更多的音視頻編解碼標準;
在Android的版本更新進化過程中,Android使用過兩套多媒體框架:OpenCore和Stagefright。 在Gingerbread之前使用的是OpenCore(在Froyo中,OpenCore和Stagefright同時存在),之后Stagefright完全替換了OpenCore。相比較而言,Stagefright架構更加簡單,添加新的feature,新的parser更加容易。圖一描述了多媒體框架在Android整個軟件架構中的位置。
圖一 從Froyo到Gingerbread Android多媒體架構的變化
針對多媒體框架的修改和定制,一般我們有三個選擇:
第一,直接在OpenCore或者Stagefright上進行修改或者定制。這個選擇相對簡單,只需要在相應的框架上做相關的修改。缺點是由于Stagefright支持的文件格式和編解碼標準較少,需要一定的工作量來支持一些家庭娛樂中常見的多媒體格式和編碼,同時也不便于重用已有的一些成果。
第二,集成已有的成熟的開源多媒體框架,比如Gstreamer或者FFMPEG。
這樣做的好處是可以最大程度的利用已有的資源和成果;如果是選擇集成Gstreamer的話,則有大量的Plug in可以利用。圖二表述了將Gstreamer集成到Android之后的多媒體架構。
圖二 集成Gstreamer的Android多媒體架構
第三,集成商業(yè)或者私有的多媒體框架。
ARM的合作伙伴特別是在多媒體方面有多年積累的伙伴,會希望將自己私有的多媒體架構集成進Android, 一方面,他們對私有架構的性能非常自信;另一方面也可以重用自身很多已有的成果,形成差異化。另外一方面,ARM的軟件合作伙伴也提供了一些商業(yè)的多媒體框架供選擇, 比如VisualOn推出的VOME。
在考慮過選擇何種方案定制多媒體框架后, 我們來看看作為家庭娛樂中心的電視、機頂盒對所支持的多媒體格式的需求與Android自身支持能力之間的差異。圖三到圖五分別列出了電視平臺在音視頻文件格式(容器)和編碼解碼格式的主流需求與Android 3.0原生能力之間的差異。
圖三 Android TV平臺對音視頻文件格式的需求與Android 3.0原生能力的差異
圖四 Android TV平臺對音頻編解碼格式的需求與Android 3.0原生能力的差異
圖五 Android TV平臺對音頻編解碼格式的需求與Android 3.0原生能力的差異
從上面三張圖的比較,我們可以看出Android 3.0原生支持的格式與電視平臺對媒體文件格式和編解碼格式的主流需求還有不小的差距,彌補這些差距正是將Android移植到互聯(lián)數字家庭必須開展的工作。
- 挑戰(zhàn) 3 : 集成數字電視相關功能:
-
- 集成數字電視協(xié)議棧,比如DVB-T,DVB-C, ATSC等;
- 針對數字電視功能擴展API接口;
截至到Android 3.1, Android內沒有集成任何數字電視協(xié)議相關的協(xié)議棧, 如DVB-C/T/S 或其他。 因此如何集成DTV/STB 相關協(xié)議棧也是Android TV/STB 開發(fā)過程中不得不面對的問題。由于各個國家,各個地區(qū)的數字電視標準存在較大的差異化,因此對于數字電視相關協(xié)議棧的集成需要根據實際需求開展。一般來說,開發(fā)Android TV / STB 的合作伙伴具備一定的數字電視/機頂盒開發(fā)經驗,將軟件組件集成進去技術上難度不大,包括對CA的集成。
圖六從架構的角度描述了數字電視相關軟件組件的集成到Android后的情形。
圖六 集成了數字電視相關組件的Android架構
從上圖可以看出,除了需要集成相關的C/C++ 庫到Library這一層外;在Application Framework這一層也需要做相應的封裝將相關的API暴露給應用層。
關于如何實現(xiàn)和定義Android TV數字電視功能相關的API,目前各家Android TV的廠家都沒有標準,這也是Android TV/ STB最大的風險和挑戰(zhàn)之一。目前在Android TV/STB中實現(xiàn)數字電視相關的API大致有兩種方式(不限于兩種):
- Java Application + Customized Application Framework + JNI + DTV/STB Specific Libraries
- Browser (HTML5 + JavaScript) + C/C++ DTV/STB Specific Libraries
第一種方式如圖六所示,在Application Framework這一層對一系列JNI進行封裝,形成數字電視功能相關的Java Level的Class; 第二種方式,通過修改Webkit,讓JavaScript去call 相關的C level API從而將數字電視的功能嵌入到瀏覽器網頁之中。
圖七和圖八給出了第一種方式的一個示例, 包括封裝哪些類以及相應的Data Flow的一個示例。
圖七 示例 : 新增的數字電視功能相關的Java Package/Class
圖八 示例 :新增的數字電視功能相關的Java Package/Class的數據流
- 挑戰(zhàn) 4 : 推動應用開發(fā)者開發(fā)適合于TV的Android應用;
Android TV/STB 能否真正取得商業(yè)的成功,極大程度上取決于Android TV Application Store能否成功。目前雖然Google Android Market上已經有了20多萬的應用,但是沒有一個應用是真正為電視量身定做的。換句話說Android TV需要自己的應用和應用商店!
那么,如何推動應用開發(fā)者開發(fā)適合TV的Android應用? 在2011年6月21號ARM在深圳舉辦的Android TV/STB 技術交流會上,來自于國內主流的運營商,芯片商,電視系統(tǒng)廠商,軟件設計公司的代表就這個問題展開了深入的討論。其中有幾個共識一起分享一下:
第一, 需要形成相對統(tǒng)一的Android TV的API規(guī)范; 至少要有標準化的Android TV/STB SDK 或者 NDK, 包括Emulator;
第二, 需要各家電視系統(tǒng)商家,包括運營商能以共享的心態(tài)來推動應用市場的建設;各家維護各家的應用市場難以支撐Android TV的商業(yè)成功;
第三, 需要形成靈活的商業(yè)模式吸引應用開發(fā)者開發(fā)Android TV的應用;
第四, 針對TV的Android應用要充分考慮TV和用戶交互方式的特點, 從最簡單的“上下左右確認返回”六個鍵做起;
第五, 需要推動Android TV相關的便利的開發(fā)工具在應用開發(fā)者的使用
雖然很多共識還需要進一步的細化,更需要落實;但所有的合作伙伴都已經意識到對于Android TV或者說智能電視來說,應用是王道;而要推動應用的發(fā)展和繁榮,必須抱著一種開放和共享的心態(tài)!
在下一篇(最后一篇)中, 我們會繼續(xù)探討將Android帶入互聯(lián)網數字家庭的挑戰(zhàn)5 : 如何部署內容保護 以及Android TV和GoogleTV的一些比較。
章立(Leon Zhang) 是ARM的家庭軟件架構師 ,同時他也是ARM戰(zhàn)略軟件聯(lián)盟部門的一員. Leon 擁有多年產品開發(fā)和項目管理經驗, 曾經參與了數字錄像機、機頂盒、數字電視,網絡電視以及智能電視(如GoogleTV)等產品的開發(fā)。作為家庭軟件架構師,他專注于下一代互聯(lián)網智能電視及數字家庭的軟件架構. 而作為戰(zhàn)略軟件聯(lián)盟的成員,他致力于為ARM家庭應用市場的合作伙伴建立強大的軟件生態(tài)系統(tǒng)。 Leon 碩士畢業(yè)于同濟大學。 他的工作地點在中國上海.