标签:帧率 evel pre fail name printf frame pen decode
之前编译的FFmpeg+libx264可以实现分辨率为1920*1080的H264视频流的软解码,经过测试,随着码率的提高,解码效率会降低,导致解码速率跟不上实际帧率。查找资料发现FFmpeg软解码支持多线程特性,程序上不用做修改,只是在软解码的上下文设置里添加一行指定解码线程数量的代码即可,如下:
m_codec = avcodec_find_decoder_by_name("h264_mediacodec");
if (!m_codec)
{
SDLOG_PRINTF("CX264_Decoder", SD_LOG_LEVEL_ERROR, "avcodec_find_decoder find h264 failed!!");
return false;
}
m_ctx = avcodec_alloc_context3(m_codec);
if (!m_ctx)
{
SDLOG_PRINTF("CX264_Decoder", SD_LOG_LEVEL_ERROR, "avcodec_alloc_context3 failed!!");
return false;
}
m_picture = av_frame_alloc();
m_ctx->width = 1920;
m_ctx->height = 1080;
m_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
m_ctx->thread_count = 8; //指定解码线程数量
if(m_codec->capabilities&AV_CODEC_CAP_TRUNCATED)
m_ctx->flags|= AV_CODEC_FLAG_TRUNCATED;
avcodec_open2(m_ctx, m_codec, NULL);
这样软解码的速率大大提高,可以支持8M码率/30fps帧率的H264软解码(依赖具体平台)。
标签:帧率 evel pre fail name printf frame pen decode
原文地址:https://www.cnblogs.com/zuoao123/p/10327465.html