問題
- 切換到後臺以後VTDecompressionSessionRef都會變得不可用,從後臺切換到前臺需要重建Session
- 重建Session是需要時間的,這個時間大概是0.5~2s左右,並不是一個固定的值
- 重建後的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位置開始解碼就好了,需要做好音視頻同步