視頻畫面幀的展示控件SurfaceView及TextureView對比

SurfaceView是什么 岗钩?

SurfaceView優(yōu)點及缺點纽窟?

SurfaceView中雙緩沖?

TextureView是什么兼吓?

TextureView優(yōu)點及缺點臂港?

兩者的性能相比如何?

播放器應(yīng)該選擇誰视搏?

SurfaceView是什么审孽?

它繼承自類View,因此它本質(zhì)上是一個View浑娜。但與普通View不同的是佑力,它有自己的Surface。有自己的Surface筋遭,在WMS中有對應(yīng)的WindowState打颤,在SurfaceFlinger中有Layer。我們知道漓滔,一般的Activity包含的多個View會組成View hierachy的樹形結(jié)構(gòu)编饺,只有最頂層的DecorView,也就是根結(jié)點視圖次和,才是對WMS可見的反肋。這個DecorView在WMS中有一個對應(yīng)的WindowState。相應(yīng)地踏施,在SF中對應(yīng)的Layer石蔗。而SurfaceView自帶一個Surface,這個Surface在WMS中有自己對應(yīng)的WindowState畅形,在SF中也會有自己的Layer养距。雖然在App端它仍在View hierachy中,但在Server端(WMS和SF)中日熬,它與宿主窗口是分離的棍厌。這樣的好處是對這個Surface的渲染可以放到單獨線程去做,渲染時可以有自己的GL context。這對于一些游戲耘纱、視頻等性能相關(guān)的應(yīng)用非常有益敬肚,因為它不會影響主線程對事件的響應(yīng)。但它也有缺點束析,因為這個Surface不在View hierachy中艳馒,它的顯示也不受View的屬性控制,所以不能進行平移员寇,縮放等變換弄慰,也不能放在其它ViewGroup中,一些View中的特性也無法使用蝶锋。

SurfaceView優(yōu)點及缺點

優(yōu)點:可以在一個獨立的線程中進行繪制陆爽,不會影響主線程

? ? ? ? ? 使用雙緩沖機制,播放視頻時畫面更流暢

缺點:Surface不在View hierachy中扳缕,它的顯示也不受View的屬性控制慌闭,所以不能進行平移,縮放等變換第献,也不能放在其它ViewGroup中贡必。SurfaceView 不能嵌套使用

SurfaceView中雙緩沖

雙緩沖:在運用時可以理解為:SurfaceView在更新視圖時用到了兩張Canvas,一張frontCanvas和一張backCanvas庸毫,每次實際顯示的是frontCanvas仔拟,backCanvas存儲的是上一次更改前的視圖,當使用lockCanvas()獲取畫布時飒赃,得到的實際上是backCanvas而不是正在顯示的frontCanvas利花,之后你在獲取到的backCanvas上繪制新視圖,再unlockCanvasAndPost(canvas)此視圖载佳,那么上傳的這張canvas將替換原來的frontCanvas作為新的frontCanvas炒事,原來的frontCanvas將切換到后臺作為backCanvas。例如蔫慧,如果你已經(jīng)先后兩次繪制了視圖A和B挠乳,那么你再調(diào)用lockCanvas()獲取視圖,獲得的將是A而不是正在顯示的B姑躲,之后你講重繪的C視圖上傳睡扬,那么C將取代B作為新的frontCanvas顯示在SurfaceView上,原來的B則轉(zhuǎn)換為backCanvas黍析。

TextureView是什么

在4.0(API level 14)中引入卖怜,與SurfaceView一樣繼承View, ? ? 它可以將內(nèi)容流直接投影到View中阐枣,它可以將內(nèi)容流直接投影到View中马靠,可以用于實現(xiàn)Live preview等功能奄抽。和SurfaceView不同,它不會在WMS中單獨創(chuàng)建窗口甩鳄,而是作為View hierachy中的一個普通View逞度,因此可以和其它普通View一樣進行移動,旋轉(zhuǎn)娩贷,縮放第晰,動畫等變化。值得注意的是TextureView必須在硬件加速的窗口中彬祖。它顯示的內(nèi)容流數(shù)據(jù)可以來自App進程或是遠端進程。從類圖中可以看到品抽,TextureView繼承自View储笑,它與其它的View一樣在View hierachy中管理與繪制。TextureView重載了draw()方法圆恤,其中主要SurfaceTexture中收到的圖像數(shù)據(jù)作為紋理更新到對應(yīng)的HardwareLayer中突倍。SurfaceTexture.OnFrameAvailableListener用于通知TextureView內(nèi)容流有新圖像到來。SurfaceTextureListener接口用于讓TextureView的使用者知道SurfaceTexture已準備好盆昙,這樣就可以把SurfaceTexture交給相應(yīng)的內(nèi)容源羽历。Surface為BufferQueue的Producer接口實現(xiàn)類,使生產(chǎn)者可以通過它的軟件或硬件渲染接口為SurfaceTexture內(nèi)部的BufferQueue提供graphic buffer淡喜。

TextureView優(yōu)點及缺點

優(yōu)點:支持移動秕磷、旋轉(zhuǎn)、縮放等動畫炼团,支持截圖

缺點:必須在硬件加速的窗口中使用澎嚣,占用內(nèi)存比SurfaceView高,在5.0以前在主線程渲染瘟芝,5.0以后有單獨的渲染線程易桃。

誰的性能更優(yōu)?

播放器應(yīng)該選擇誰锌俱?

從性能和安全性角度出發(fā)晤郑,使用播放器優(yōu)先選SurfaceView。

1贸宏、在android 7.0上系統(tǒng)surfaceview的性能比TextureView更有優(yōu)勢造寝,支持對象的內(nèi)容位置和包含的應(yīng)用內(nèi)容同步更新,平移锚赤、縮放不會產(chǎn)生黑邊匹舞。 在7.0以下系統(tǒng)如果使用場景有動畫效果,可以選擇性使用TextureView

2线脚、由于失效(invalidation)和緩沖的特性赐稽,TextureView增加了額外1~3幀的延遲顯示畫面更新

3叫榕、TextureView總是使用GL合成,而SurfaceView可以使用硬件overlay后端姊舵,可以占用更少的內(nèi)存帶寬晰绎,消耗更少的能量

4、TextureView的內(nèi)部緩沖隊列導(dǎo)致比SurfaceView使用更多的內(nèi)存

5括丁、SurfaceView: 內(nèi)部自己持有surface荞下,surface 創(chuàng)建、銷毀史飞、大小改變時系統(tǒng)來處理的尖昏,通過surfaceHolder 的callback回調(diào)通知。當畫布創(chuàng)建好時构资,可以將surface綁定到MediaPlayer中抽诉。SurfaceView如果為用戶可見的時候,創(chuàng)建SurfaceView的SurfaceHolder用于顯示視頻流解析的幀圖片吐绵,如果發(fā)現(xiàn)SurfaceView變?yōu)橛脩舨豢梢姷臅r候迹淌,則立即銷毀SurfaceView的SurfaceHolder,以達到節(jié)約系統(tǒng)資源的目的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子栖茉,更是在濱河造成了極大的恐慌,老刑警劉巖纹份,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異允乐,居然都是意外死亡矮嫉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門牍疏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢笋,“玉大人,你說我怎么就攤上這事鳞陨∽蚰” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵厦滤,是天一觀的道長援岩。 經(jīng)常有香客問我,道長掏导,這世上最難降的妖魔是什么享怀? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮趟咆,結(jié)果婚禮上添瓷,老公的妹妹穿的比我還像新娘梅屉。我一直安慰自己,他們只是感情好鳞贷,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布坯汤。 她就那樣靜靜地躺著,像睡著了一般搀愧。 火紅的嫁衣襯著肌膚如雪惰聂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天咱筛,我揣著相機與錄音搓幌,去河邊找鬼。 笑死眷蚓,一個胖子當著我的面吹牛鼻种,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙热,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罢缸!你這毒婦竟也來了篙贸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枫疆,失蹤者是張志新(化名)和其女友劉穎爵川,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體息楔,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡寝贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了值依。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圃泡。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愿险,靈堂內(nèi)的尸體忽然破棺而出颇蜡,到底是詐尸還是另有隱情,我是刑警寧澤辆亏,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布风秤,位于F島的核電站,受9級特大地震影響扮叨,放射性物質(zhì)發(fā)生泄漏缤弦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一彻磁、第九天 我趴在偏房一處隱蔽的房頂上張望碍沐。 院中可真熱鬧狸捅,春花似錦、人聲如沸抢韭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻恭。三九已至瞧省,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳍贾,已是汗流浹背鞍匾。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骑科,地道東北人橡淑。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像咆爽,于是被迫代替她去往敵國和親梁棠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容