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

Posted zuoao123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启FFmpeg+libx264软解码的多线程特性相关的知识,希望对你有一定的参考价值。

之前编译的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软解码的多线程特性的主要内容,如果未能解决你的问题,请参考以下文章

Android FFMPeg——FFMpeg+libx264编译

ffmpeg 没有找到 vcodec libx264

使用 ffmpeg 进行最快解码的编码

如何在 macos 上为 ffmpeg 启用 libx264

ffmpeg缺少 libx264依赖时的安装方法 (linux 下)

ffmpeg/libx264 C API:从短 MP4 末尾丢弃的帧