最近要使用Ios端H264解码功能,参考了webrtc中使用videoToolBox的硬解部分,在真机调试的时候,从后台切换到前台后,出现画面卡死不能恢复的情况,本以为渲染出问题,查看日志后发现为解码失败,查看底层发现解码方法
OSStatus status = VTDecompressionSessionDecodeFrame( decompression_session_, sample_buffer, decode_flags,
frame_decode_params.release(), nullptr);
返回错误吗-12903,然后查询后发现该错误吗为kVTInvalidSessionErr,为解码器session失效错误,原来从后台切换到前台后原来的解码器Decoder的VTDecompressionSession失效,导致解码失败,经查看webrtc中h264_video_toolbox_decoder.cc中代码,发现程序没有对解码失败的情况进行处理:
发现整个代码中有重置session的操作,因此可以在此根据status的错误码进行操作 ResetDecompressionSession();
经过实际测试完美解决该问题。
同样该问题存在于webrtc使用H264编解码传输的视频通话中,因此有问题的朋友可以使用该方式解决。