一、序
你慢慢會發(fā)現(xiàn),身邊所有的電視都變成了智能電視。這是很容易接受的事實,智能電視更便宜。
價格是不容忽視的敏感點,顧客會天然的選擇物美價廉的智能電視。這看似不符合邏輯,為什么選擇落后的技術(shù),不允許聯(lián)網(wǎng)的傳統(tǒng)電視反而更貴呢?
廠商靠硬件的利潤是固定的,當小米發(fā)布“年輕人的第一臺電視”之后,通過搭建并自營廣告、付費內(nèi)容分發(fā)等服務(wù)手段,將用戶數(shù)據(jù)緊握在自己手中并實現(xiàn)貨幣化。以服務(wù)的收入來補貼硬件的成本,極大的壓低了智能電視的售價。
這很容易理解吧,之前都是單純的制造商,賣出一臺電視賺一臺電視的錢,撇開需要提供的質(zhì)保服務(wù)之外,這就是一錘子買賣。而當電視可以聯(lián)網(wǎng)之后,就可以延伸出更多可能,你每一步操作都有廣告的體驗、推薦給你的電視 App、你在電視上看的付費視頻,這些都是服務(wù)的費用,在你電視的使用壽命一直到終結(jié),廠商都可以從你那里獲得價值。
電視廠商已經(jīng)開始從制造商轉(zhuǎn)變成服務(wù)商了。智能電視是大勢所趨,回頭是不可能回頭的,可能今后會有廠商繼續(xù)生產(chǎn)小眾的傳統(tǒng)電視,但也只是小眾。
再說回到技術(shù)上,對于智能電視的系統(tǒng),得益于 Android 的開放,市面上占有率最大的就是 Android 系統(tǒng),其次 Apple TV、Chromecast 都是比較小眾的。另外三星之類的廠商,也從去年開始將新款電視的系統(tǒng),選定為 Android。
在智能電視領(lǐng)域,Android 才是主流。
不少人對 Android TV 的技術(shù)印象,還停留在移動開發(fā)上,但其實它們并不一樣。
二、技術(shù)與 Android TV
只要是個 Android 開發(fā),就可以很容易的上手 Android TV 的項目,這一點毋庸置疑。
但是又不那么完全一樣,不能簡單的把 TV 開發(fā)理解成更大屏的手機去做,這其中還是有一些細節(jié)需要打磨的。
本文我就換一個角度,來分析 Android TV 開發(fā)所涉及到的一些技術(shù)點。
2.1 設(shè)計風格不同
電視最直觀的感受就是大屏,但是不能僅僅把它當成放大版的手機,這是有根本區(qū)別的。
在做電視 UI 設(shè)計的時候,要考慮到這個設(shè)計在兩三米開外,還能不能看見,電視和手機的視距是不一樣的。
在做設(shè)計的時候,就講究大塊、留白、滾動、焦點效果等等,了解其中的差異即可。
2.2 API 的差異
都是 Android 系統(tǒng),在手機上能用的那一套 API,在智能電視上都可以用到。智能電視用到的 API,算是移動開發(fā)的一個補充。
舉個最簡單的例子,在手機上操作,點擊一個內(nèi)容只有兩態(tài),普通態(tài)和按下態(tài),而在電視上是有三態(tài)的,無焦點態(tài)、獲取焦點態(tài)和按下態(tài),這就需要在移動開發(fā)中根本不會用到的 android:focusableInTouchMode 屬性來支持。
另外還有一些對焦點的處理,例如焦點動畫、焦點記錄、焦點尋址等,雖然 Android 是以就近原則來計算方向操作時,下一個獲取焦點的控件,但是有時候還是需要我們通過代碼去控制它的尋址效果。
電視開發(fā)還有很多 API 上的區(qū)別,這里就不一一舉例了,其實很多效果都可以參照 Leanback 的實現(xiàn),這個后文會介紹。
2.3 涉及的工具
在電視開發(fā)中,也有一些工具可以提高我們開發(fā)的效率。
雖說智能電視本質(zhì)還是 Android 設(shè)備,但是大部分電視和智能盒子在出廠時,已經(jīng)關(guān)閉了調(diào)試口,如果和廠商合作或者在論壇搜尋,有一些特定的設(shè)備,經(jīng)過特殊的設(shè)置是允許開啟 ADB 調(diào)試的。開啟調(diào)試后,我們就可以通過 adb connect 進行連接,之后的調(diào)試就和普通的手機開發(fā)沒有區(qū)別了。
電視調(diào)試有時候確實很麻煩,如果不是和特定硬件強相關(guān)的需求,我們可以直接使用普通手機進行開發(fā)調(diào)試。
電視和手機的交互方式是不同的,手機通過觸摸屏幕,而電視只能通過遙控器按鍵操控。那么為了在手機上模擬電視遙控器的操作,這里推薦一個 Chrome 插件:ChromeADB。
只需要保證開發(fā)設(shè)備和調(diào)試設(shè)備,ADB 連接通暢,通過 ChromeADB,實現(xiàn)一些遙控器的簡單上下左右的操作。
2.4 Google 的 Leanback 項目
Leanback 是 Google 真的 TV 開源的一款 UI 框架,可以使用 Leanback 快速實現(xiàn) UI 效果,Leanback 主要都是圍繞 Fragment 展開的。
在國內(nèi)的 TV App 項目中,基本上都不會使用 Leanback 推薦的效果,就像 Google 的 Material Design 設(shè)計,所有設(shè)計都在轉(zhuǎn)發(fā)文章,但是就是不用,但是這并不妨礙我們研究它的實現(xiàn)。
Leanback 內(nèi)提供的 RecyclerView 把一些很頭疼的焦點記憶、焦點項目放大、滾動時焦點塊居中等問題都封裝好了,簡單到可以拿來即用。
Leanback 最大的問題是它是一個 v17 的項目,也就是 minSdkVersion 為 17,而在國內(nèi)的環(huán)境下,TCL、聯(lián)想都還在出廠 4.2 以下的電視和盒子。也就是說對于一個商業(yè)項目,你想完全依賴 Leanback 的官方指導來開發(fā) App,將會有一部分設(shè)備的市場被放棄掉。
但是這并不是無法解決的硬傷,我印象中只是某些數(shù)據(jù)刷新的 notifyDataXxx() 方法,對 API Level 有要求。所以只需要將這部分邏輯自己來實現(xiàn),就可以將 Leanback 用在 V14 的設(shè)備上。
具體實現(xiàn)我就不放代碼了,在 Github 上搜索 “V14 Leanback” 關(guān)鍵字,就能夠有所收獲。
2.5 音視頻
智能電視雖然可以安裝一些 App,但是最終還是要回歸本質(zhì),就是看電視。大部分電視 App,都是圍繞著音視頻方向,做內(nèi)容分發(fā)。
你能想到的主要的視頻 App,都存在電視版 App,做電視開發(fā)無可避免的會遇到音視頻方向的問題。
有關(guān)音視頻方向,簡單點呢找個 Github 上的開源庫封裝一下也能用,但是出問題了也很難排查。想要向這個方向研究,這里推薦一本前愛奇藝音視頻方向?qū)<液慰×值臅禔ndroid 音視頻開發(fā)》。
如果讓我針對智能電視的音視頻,只提一個建議,那肯定是慎用硬解。
我想這也很好理解,現(xiàn)在一臺智能電視比很多手機都便宜,最大的成本占比在屏幕上,可想而知它的其他硬件,還不如小米幾百塊的手機。
當你使用硬解的時候,在一些低端設(shè)備上的表現(xiàn)就不可控了,會碰到非常惡心的黑屏、馬賽克、花屏等問題。所以如果你的經(jīng)驗沒那么豐富,推薦直接使用軟解。
2.6 投屏協(xié)議
電視的真實需求,還是看電視,任何強操作的需求,在電視上都是偽需求。
智能電視聯(lián)網(wǎng)后,我們就不必將看電視這個動作局限在直播中。想將手機上的內(nèi)容投到電視上播放,這就涉及到投屏的協(xié)議。
市面上存在很多投屏的協(xié)議,基本上對投屏有點想法的都會定制一套投屏的協(xié)議。主流的只有兩個 Google 的 DLNA 和 Apple 的 AirPlay,基本上屬于現(xiàn)在智能電視出廠時的標配。
就像微信對手機的關(guān)系一樣,某個手機要是微信退出到后臺就收不到消息了,用戶只會說這個手機有問題而不會說微信有問題。這兩個協(xié)議對智能電視也是一樣。
但是有歸有,好不好用就是另外的說法了。所有的投屏協(xié)議,都是存在兩端,客戶端和接收端,智能電視在出廠時,集成的都是接收端的協(xié)議,如果遇上不好用的情況,可以嘗試安裝“樂播投屏 App”來解決。
大多數(shù)情況下,我們更多的是和協(xié)議的客戶端在打交道,這里推薦一個開源項目 ConnectSDK,在其中對大部分協(xié)議做了支持。
ConnectSDK 是一個全平臺的 SDK,接入也有明確的文檔和示例,這里就不詳細講解了。
投屏的功能,在大部分主流的視頻 App,都是集成了投屏的功能。還有一些比較小眾的 App,例如快點投屏,可以將一些視頻網(wǎng)站上的內(nèi)容,投到智能電視上觀看。
投屏在智能電視的技術(shù)棧中,必定是需要點亮的。
2.7 本地服務(wù)
還是為了解決電視上操作困難的問題,最簡單的想要把一部下載好的藍光高清的電影,Copy 到電視上觀看,難度都很大。
所以不少 App 都通過搭建本地服務(wù)的方式,方便用戶在電視和其他設(shè)備之間傳輸文件。
在 Android 上,開啟一個 HTTP 服務(wù)的方法,有很多開源項目可供選擇。
這里推薦 nanohttpd,只需一個文件就可以在 Android 上實現(xiàn)一個本地的 HTTP 服務(wù)器。并且使用的人很多,上傳文件、webserver 等已經(jīng)被實現(xiàn)了,開箱即用。
三、小結(jié)時刻
我想看完本文,你對 Android 智能電視開發(fā)應(yīng)該有了一個基本的了解,不會再將它了解成一個更大屏的手機了。
就像前文提到的,智能電視注定是會被普及的,我最近看到頭條這樣做短視頻的公司,都已經(jīng)開設(shè)了 Android TV 的產(chǎn)品崗位,我想今后 TV 開發(fā)相關(guān)的崗位會越來越多。
你還知道有什么關(guān)于智能電視的技術(shù)點,歡迎在留言區(qū)討論。
在頭條號私信我。我會送你一些我整理的學習資料,包含:Android反編譯、算法、設(shè)計模式、虛擬機、Linux、Kotlin、Python、爬蟲、Web項目源碼。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。