亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

一文讀懂直播卡頓優(yōu)化那些事兒 直播卡頓怎么解決( 三 )

  • 消息調(diào)度:主要是 doframe Message 的調(diào)度,這就是一個(gè)普通的 Handler 調(diào)度,如果這個(gè)調(diào)度被其他的 Message 阻塞產(chǎn)生了時(shí)延,會(huì)直接導(dǎo)致后續(xù)的所有流程不會(huì)被觸發(fā) 。這里直播建立了一個(gè) FWtachDog 機(jī)制,可以通過優(yōu)化消息調(diào)度達(dá)到插幀的效果,使得界面更加流暢;
  • input 處理:input 是一次 Vsync 調(diào)度最先執(zhí)行的邏輯,主要處理 input 事件 。如果有大量的事件堆積或者在事件分發(fā)邏輯中加入大量耗時(shí)業(yè)務(wù)邏輯,會(huì)造成當(dāng)前幀的時(shí)長被拉大,造成卡頓 。抖音基礎(chǔ)技術(shù)同學(xué)也有嘗試過事件采樣的方案,減少 event 的處理,取得了不錯(cuò)的效果;
  • 動(dòng)畫處理:主要是 animator 動(dòng)畫的更新,同理,動(dòng)畫數(shù)量過多,或者動(dòng)畫的更新中有比較耗時(shí)的邏輯,也會(huì)造成當(dāng)前幀的渲染卡頓 。對(duì)動(dòng)畫的降幀和降復(fù)雜度其實(shí)解決的就是這個(gè)問題;
  • view 處理:主要是接下來的三大流程,過度繪制、頻繁刷新、復(fù)雜的視圖效果都是此處造成卡頓的主要原因 。比如我們平時(shí)所說的降低頁面層級(jí),主要解決的就是這個(gè)問題;
  • measure/layout/draw:view 渲染的三大流程,因?yàn)樯婕暗奖闅v和高頻執(zhí)行,所以這里涉及到的耗時(shí)問題均會(huì)被放大,比如我們會(huì)降不能在 draw 里面調(diào)用耗時(shí)函數(shù),不能 new 對(duì)象等等;
  • DisplayList 的更新:這里主要是 canvas 和 displaylist 的映射,一般不會(huì)存在卡頓問題,反而可能存在映射失敗導(dǎo)致的顯示問題;
  • OpenGL 指令轉(zhuǎn)換:這里主要是將 canvas 的命令轉(zhuǎn)換為 OpenGL 的指令,一般不存在問題 。不過這里倒是有一個(gè)可以探索的點(diǎn),會(huì)不會(huì)存在一類特殊的 canvas 指令,轉(zhuǎn)換后的 OpenGL 指令消耗比較大,進(jìn)而導(dǎo)致 GPU 的損耗?有了解的同學(xué)可以探討一下;
  • buffer 交換:這里主要指 OpenGL 指令集交換給 GPU,這個(gè)一般和指令的復(fù)雜度有關(guān) 。一個(gè)有意思的事兒是這里一度被我們作為線上采集 GPU 指標(biāo)的數(shù)據(jù)源,但是由于多緩沖的因素?cái)?shù)據(jù)準(zhǔn)確度不夠被放棄了;
  • GPU 處理:顧名思義,這里是 GPU 對(duì)數(shù)據(jù)的處理,耗時(shí)主要和任務(wù)量和紋理復(fù)雜度有關(guān) 。這也就是我們降低 GPU 負(fù)載有助于降低卡頓的原因;
  • layer 合成:這里主要是 layer 的 compose 的工作,一般接觸不到 。偶爾發(fā)現(xiàn) sf 的 vsync 信號(hào)被 delay 的情況,造成 buffer 供應(yīng)不及時(shí),暫時(shí)還不清楚原因;
  • 光柵化/Display:這里暫時(shí)忽略,底層系統(tǒng)行為;
  • Buffer 切換:主要是屏幕的顯示,這里 buffer 的數(shù)量也會(huì)影響幀的整體延遲,不過是系統(tǒng)行為,不能干預(yù) 。
  • 2.5.2 視頻流除了上述的渲染流程引起的卡頓,還有一些其他的因素,典型的就是視頻流 。
    1. 渲染卡頓:主要是 TextureView 渲染,textureview 跟隨 window 共用一個(gè) surface,每一幀均需要一起協(xié)同渲染并相互影響,UI 卡頓會(huì)造成視頻流卡頓,視頻流的卡頓有時(shí)候也會(huì)造成 UI 的卡頓;
    2. 解碼:解碼主要是將數(shù)據(jù)流解碼為 surface 可消費(fèi)的 buffer 數(shù)據(jù),是除了網(wǎng)絡(luò)外最重要的耗時(shí)點(diǎn) ?,F(xiàn)在我們一般都會(huì)采用硬解,比軟解的性能高很多 。但是幀的復(fù)雜度、編碼算法的復(fù)雜度、分辨率等也會(huì)直接導(dǎo)致解碼耗時(shí)被拉長;
    3. OpenGL 處理:有時(shí)會(huì)對(duì)解碼完成的數(shù)據(jù)做二次處理,這個(gè)如果比較耗時(shí)會(huì)直接導(dǎo)致渲染卡頓;
    4. 網(wǎng)絡(luò):這個(gè)就不再贅述了,包括 DNS 節(jié)點(diǎn)優(yōu)選、cdn 服務(wù)、GOP 配置等;


      以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

      「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: