鸿蒙开发之视频解码优化以保持后台性能
在 C++中对视频进行解码时,当应用退至后台,解码帧率从 30 帧下降到 10 帧以下是一个常见的问题。为了解决这个问题,我们可以通过优化解码流程和使用硬件加速来提升解码性能,即使在后台也能保持 30 帧的解码性能。
视频解码的基本流程
创建解码器实例对象
使用 codecname 或 mimetype 创建解码器。硬解支持 H264 和 H265,软解仅支持 H264。
设置回调函数
注册回调函数,包括解码器运行错误、码流信息变化、需要新的输入数据、产生新的输出数据等。
配置解码器
配置视频帧宽度、高度和颜色格式。
设置 Surface 或 Buffer 输出
Surface 模式:使用 OHNativeWindow 传递输出数据。
Buffer 模式:解码数据以共享内存方式输出。
解码器就绪
调用 OH_VideoDecoder_Prepare()。
启动解码器
调用 OH_VideoDecoder_Start()。
写入解码码流
调用 OH_VideoDecoder_PushInputBuffer()。
处理输出数据
Surface 模式:调用 OH_VideoDecoder_RenderOutputBuffer()显示并释放解码帧。
Buffer 模式:调用 OH_VideoDecoder_FreeOutputBuffer()释放解码帧。
刷新、重置、停止和销毁解码器
调用 OH_VideoDecoder_Flush()、OH_VideoDecoder_Reset()、OH_VideoDecoder_Stop()和 OH_VideoDecoder_Destroy()。
代码示例
创建解码器
设置回调函数
配置解码器
启动解码器
写入解码码流
处理输出数据
通过上述步骤和代码示例,我们可以在 C++中优化视频解码,确保即使在应用退至后台后,也能保持 30 帧的解码性能。这些方法通过硬解和优化解码流程,有效提升了解码效率和性能。
参考链接:视频解码
版权声明: 本文为 InfoQ 作者【彭康佳】的原创文章。
原文链接:【http://xie.infoq.cn/article/ce1464d142788b4e3cd77dfab】。文章转载请联系作者。
评论