码迷,mamicode.com
首页 > 编程语言 > 详细

开启FFmpeg+libx264软解码的多线程特性

时间:2019-01-27 22:09:13      阅读:450      评论:0      收藏:0      [点我收藏+]

标签:帧率   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软解码(依赖具体平台)。

开启FFmpeg+libx264软解码的多线程特性

标签:帧率   evel   pre   fail   name   printf   frame   pen   decode   

原文地址:https://www.cnblogs.com/zuoao123/p/10327465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!