播放器切换后台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位置开始解码就好了,需要做好音视频同步
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章