全志V3S H.264 对视频进行编码的过程

本文介绍了如何使用FFmpeg SDK对H.264格式的视频进行解码,包括解码器结构、初始化过程、解码步骤及收尾工作。通过avcodec_find_encoder找到H.264解码器,avcodec_alloc_context3分配AVCodecContext,av_parser_init初始化AVCodecParserContext,然后进行解码循环,调用avcodec_decode_video2进行实际解码。
摘要由CSDN通过智能技术生成

《FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK》视频教程已经在“CSDN学院”上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK
工程代码地址:FFmpeg_Tutorial

我们开发中经过调用FFMpeg SDK对视频进行编码的过程之后,我们可以比较容易地理解本篇的内容,即上一篇的逆过程——将H.264格式的裸码流解码为像素格式的图像信息。

1、FFMpeg视频解码器所包含的结构
同FFMpeg编码器类似,FFMpeg解码器也需要编码时的各种结构,除此之外,解码器还需要另一个结构——编解码解析器——用于从码流中截取出一帧完整的码流数据单元。因此我们定义一个编解码上下文结构为:

/*************************************************
Struct:         CodecCtx
Description:    FFMpeg编解码器上下文
*************************************************/
typedef struct
{
    AVCodec         *pCodec;                //编解码器实例指针
    AVCodecContext  *pCodecContext;         //编解码器上下文,指定了编解码的参数
    AVCodecParserContext *pCodecParserCtx;  //编解码解析器,从码流中截取完整的一个NAL Unit数据

    AVFrame         *frame;                 //封装图像对象指针
    AVPacket        pkt;                    //封装码流对象实例
} CodecCtx;
2、FFMpeg进行解码操作的主要步骤
(1). 参数传递和解析
同编码器类似,解码器也需要传递参数。不过相比编码器,解码器在运行时所需要的大部分信息都包含在输入码流中,因此输入参数一般只需要指定一个待解码的视频码流文件即可

(2). 按照要求初始化需要的FFMpeg结构
首先,所有涉及到编解码的的功能,都必须要注册音视频编解码器之后才能使用。注册编解码调用下面的函数:

avcodec_register_all();
1
编解码器注册完成之后,根据指定的CODEC_ID查找指定的codec实例。CODEC_ID通常指定了编解码器的格式,在这里我们使用当前应用最为广泛的H.264格式为例。查找code

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值