播放器切換後臺VideoToolbox的問題

問題

  1. 切換到後臺以後VTDecompressionSessionRef都會變得不可用,從後臺切換到前臺需要重建Session
  2. 重建Session是需要時間的,這個時間大概是0.5~2s左右,並不是一個固定的值
  3. 重建後的VTDecompressionSessionRef並不能從之前位置繼續解碼,只有從關鍵幀位置開始解碼纔是正常的

解碼解決方案

| i1 | p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | p11 | p12 | p13 | i2 | p...

如果在切換後臺之前我們正在解碼p5,那麼從後臺切換回來以後我們需要從p6位置繼續解碼

  • 暫時使用軟解
    • 前面說到重建VTDecompressionSessionRef是需要時間的,如果業務上需要從後臺切換回來以後能“馬上”播放,那麼此時可以先用軟解替換硬解,等硬解準備好以後再切換回去
    • 軟解需要從i1位置開始解碼,一直到p6之前的解碼數據都需要丟棄掉(這個速度是很快的,解碼一幀1080P的數據大概是10ms,解碼30幀數據也就是300ms,正常情況下是能滿足業務需求的)
    • 要從i1位置開始解碼,那麼最少保存最近一個GOP的完整數據
  • 允許重建VTDecompressionSessionRef的時間
    • 如果允許VTDecompressionSessionRef的時間,那麼代碼邏輯就簡單一些,不需要做軟解到硬解的切換,但是還是需要做快速解碼(從i1位置開始解碼,一直到p6之前的解碼數據都需要丟棄掉)
    • 要從i1位置開始解碼,那麼最少保存最近一個GOP的完整數據
  • 允許跳幀
    • 這個方案就更加簡單了,不需要緩存已經解碼的數據,直接從i2位置開始解碼就好了,需要做好音視頻同步
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章