FFmpeg的软解和硬解

文章介绍了如何在iOS上使用FFmpeg进行软解码和硬解码H264视频流,强调硬解码时需包含videotoolbox模块。软解码涉及avcodec_register_all()、avcodec_find_decoder()等步骤,而硬解码则需额外配置硬件解码器。解码后的AVFrame数据在软硬解码中处理方式有所不同,硬解码可直接获取CVPixelBufferRef进行渲染。
摘要由CSDN通过智能技术生成

前言

其实使用原生FFmpeg的软解和硬解很简单,硬解以iOS为例只需要编译的库里面含有videotoolbox模块。 注意:如果是使用ijk编译的库是直接调用硬解是不会成功的

软解流程

1.注册所有解码器

avcodec_register_all();

2.找到h264编解码器信息

AVCodec * codec_dec = avcodec_find_decoder(AV_CODEC_ID_H264);

3.通过编解码器信息创建上下文

AVCodecContext * c_dec = avcodec_alloc_context3(codec_dec);

4.通过配置参数初始化具体的解码器(第三个参数为AVDictionary可以配置解码器的具体参数)

if (avcodec_open2(c_dec, codec_dec,NULL) < 0)
        {
            av_free(c_dec);
            return NULL;
        }

5.初始化AVFrame用于接收解码后的数据

AVFrame * pic_tmp = av_frame_alloc();
    if(pic_tmp == NULL)
    {
        avcodec_close(c_dec);
        av_free(c_dec);
        return ;
    }

6.Socket收到数据包后在CADisplayLink中调用解码

  • FramePacket:是自定义的传输数据包
  • XYQCodecCtx:就是AVCodecContext
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值