概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、解决办法
- 二、代码示例
前言
最近使用ffmpeg的api对视频流进行硬解码时遇到了一个这样的问题:
采用ffmpeg官方的例子进行硬解码(dev/examples下hw_decode.c),解码后与软解码时的cpu占用率没有什么差别,依然很高。
一、解决办法
这个问题困扰了我很长时间,于是就设个断点debug了一下,发现av_hwframe_transfer_data之前调用的avcodec_receive_frame最开始是返回-11的,也就是AVERROR(EAGAIN)(原因可能是ffmpeg内部的缓冲区里面的视频帧还不足以输出,与h264算法有关)。于是加了一个容错判断,cpu的占用率居然降下来了。具体什么原因还没有深究,但是猜测之前应该是处理无效的frame时产生了大的空间开销。
二、代码示例
代码如下(示例):
re = avcodec_receive_frame(codec, frame);
if(re != 0){
mux.unlock();
av_frame_free(&frame);
av_frame_free(&sw_frame);
return NULL;
}
mux.unlock();
av_hwframe_transfer_data(sw_frame, frame, 0);
最后
以上就是酷炫白昼为你收集整理的关于ffmpeg硬解码后cpu依然占用高的问题前言一、解决办法二、代码示例的全部内容,希望文章能够帮你解决关于ffmpeg硬解码后cpu依然占用高的问题前言一、解决办法二、代码示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复