1. 程式人生 > >視訊播放器的丟幀邏輯

視訊播放器的丟幀邏輯

    最近在做播放器在電視盒子上的適配,發現一個嚴重的問題:低端機型解碼能力不足。表現是丟幀,音畫不同步。對此,有兩種解決方法。

一、解碼前丟幀

    思路是記錄25幀(1s)解碼的總時間decodeTotalTime,減去25幀播放的總時間playTotalTime得到差值diff。如果diff大於0,說明解碼耗時較長,應該開啟丟幀。丟幀策略可以開啟級別,最低階為8幀丟一幀,最高階為2幀丟1幀,直到diff小於0,關閉丟幀。

二、渲染前丟幀

    由於音視訊同步時,會把音訊的播放時間作為標準時間,視訊同步時會與標準時間校準。那麼可以得到視訊時間戳的實際值與理想值的差值。如果這個差值在一定的範圍內(60ms?),那麼視為可以忍受的範圍;如果這個差值大於一個閾值,那麼開啟丟幀,丟幀同樣設定級別,直到視訊時間戳的實際值與理想值在一定範圍內,再關閉丟幀。

    適配電視盒子時,發現即使丟幀了,仍然還有音畫不同步現象。對此,把音視訊同步的邏輯改的更激進了一點,也就是說視訊追趕音訊的步進值更大,問題得以解決。這種改法的缺點是,觀看正片時會有些許一頓一頓的現象。