天天看點

移動端的播放器設計經驗:與VLC的考量點完全不同

移動播放器面臨的情況:

1、渲染時按照時間戳渲染

2、播放端來的流是抖動不平滑的,可快可慢,可能延時隻來一幀,後緊跟N幀。

VLC針對抖動的處理方式

1、收流時在收到第一幀TS1的時候取本地絕對時間,作為絕對時戳absPts1,第二幀TS2到來時取本地絕對時戳absPts2。內插補點計算absDvalue = absPts2 - absPts1  TsDvalue = Ts2-Ts1 ,如果absDvalue > TsDvalue 說明資料延時到來,否則時提前到來。這種方式的缺陷是:以第一幀作為參考,可能第一幀本身就晚到了。

2、将absDvalue值累計到clock機制裡,clock裡會計算這種誤差,反應到送渲染的時戳裡,這樣達到播放端與發流端的速度保持一緻,減少緩沖資料的堆積(即時鐘漂移政策)。這樣做對于視訊流源端是IPC等錄影機來說是合理的,且是有優勢的。但是對于移動手機作為采集端,加入了調整幀率、碼率等手段做網絡動态适配時,VLC的這些優勢就變成了劣勢。

移動端采集方案:動态監測網絡狀态,網絡狀态較差時

1、自動降低幀率、碼率;

2、采集端産生堆積資料,導緻播放端接收到的資料延時較大。如果此時網絡情況突然改善,播放端會收到一大串的幀,類似脈沖式的效果。

移動播放端的改進

1、考慮到音視訊同步問題,以音頻作為調整的觸發點;

2、收流側實時統計每幀音頻是否延時,計算延時時間。基準的緩存時間為500ms,如果延時時間>緩存時間,連續500ms時,可以增加緩存時間(即後續每幀的絕對時戳=curpts+新緩存時間),相當于渲染時間延後了。使用該方式可以在網絡情況差的情況下,平滑播放但整體延時了。

3、當網絡情況好轉時,同樣的方式計算出延時間<緩存時間,連續500ms時,可以減少緩存時間(即後續每幀的絕對時戳=curpts+新緩存時間(新的緩存時間比原先的緩存時間小)),并且通知渲染子產品,調整已有的渲染隊列中資料的pts值,這樣啟到加速渲染的效果。

4、注意:快速增加延時,但緩慢減少延時。如快速減少延時,會導緻在網絡情況好的時候,音視訊卡頓。

繼續閱讀