视频和视频帧:FFMPEG CPU解码API介绍

本文介绍了使用FFMPEG API进行视频解码的详细步骤,涵盖从连接和打开视频流到解码过程中的关键函数,包括avformat_open_input、avformat_find_stream_info、avcodec_find_decoder、avcodec_open2等。讨论了FFMPEG API的变化,并强调了在新版本中的一些注意事项,如资源释放和解码后的帧转码、输出、缓冲区刷新等。适合对音视频处理和FFMPEG有一定了解的读者参考。
摘要由CSDN通过智能技术生成

写在前面


本文将介绍的如何用FFMPEG API做视频解码。

视频解码,是将压缩后的视频(压缩格式如H264)通过对应解码算法还原为YUV视频流的过程;在计算机看来,首先输入一段01串(压缩的视频),然后进行大量的浮点运算,最后再输出更长的一段01串(还原的非压缩视频)。计算机内部可以进行浮点数计算的部件是CPU,目前市场上涌现了一批GPU和类GPU芯片,如Nvidia、海思芯片甚至Intel自家的核显。利用前者进行解码一般称为“软解码”,后者被称为“硬解码”,如果没有特殊指定,FFMPEG是用CPU进行解码的,即软解

本文将介绍的是软解,也就是FFMPEG最通用的做法。

如果对视频基础懵懂的同学,建议先阅读本文的前序文章:

本文将介绍以下内容:

  1. FFMPEG3.3以上的新版API介绍;

  1. FFMPEG解码的通用流程以及每个步骤涉及的API详解,这一部分比较硬核,会涉及代码和api底层的解释;

  1. FFMPEG解码的其他注意点。


I. FFMPEG API变化

了解一门语言/工具最好的办法就是阅读他的API文档/开发者手册,然而,计算机领域大多数语言/技术的官方文档都是英文,对国内初学者而言,以此入门,不推荐。笔者推荐的学习路线是:简单的入门博客 -> 专业人士的相关博客(比如业内的雷神的博客) -> 官方文档 -> 参与相关开源项目,大致如此,不必较真。程序员圈内严(gang)谨(jing)人士是真多,所以在一些点上必须陈述清楚。

网上关于FFMPEG入门的资料特别多,但是笔者发现许多博客已经比较陈旧了,新版本(指FFMPEG3.3及以上的版本)的API有较大的变化,本文出现的代码使用的都是新的API。

FFMPEG官方GIT上罗列了API的变化,读者可以看APIchanges;FFMPEG的官方开发者手册见Developer Documentation。不过,在实际开发中,就算真的在新版本上用了旧的API,编译和运行时也不会有问题,只不过在编译时会提示“is deprecated”类似warnning提示。

笔者在后续出现的代码中会注释写明某个API是新版本的,还是沿袭了旧版本的。


II. FFMPEG解码套路

“自古深情留不住,唯有套路得人心”,和很多工具一样,FFMPEG解码也是有套路的,这里先搬出业内大人物雷神(雷霄骅,可以从知乎的帖子-如何看待雷霄骅之死?-知道雷神在流媒体技术上做出的贡献之大,叹息缅怀)当年的解码流程图:

FFMPEG解码流程(雷神版)

上图出自其CSDN博客:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值