最近开始集中学习使用FFMpeg,对一些常用的api有了一个大致的了解,下面做个记录以备忘!
FFMPEG处理流程
FFMPEG的函数使用成千上万,不容易记住,但是如果知道她的使用流程的话,那就方便记住的多了!
在我理解的流程如下:
1.打开并且初始化输入流(AVFormatContext):
数据的来源,来自一个网络流,还是一个文件....
2.打开并且初始化输出流(AVFormatContext):
数据的流向,数据是要推送到服务器,还是写到本地的文件,还是说直接做渲染
3.从输入流中读取包(AVPacket)
输入流中包含了一系列的压缩的数据AVPacket,我们需要读取出来统一处理
4.解码(AVCodec)AVPacket成Frame(AVFrame)
压缩的AVPacket需要进一步解码成对应的音视频或者字幕的AVFrame,是原始码流未经过压缩,对于视频通常是YUV格式,对于音频则是PCM码流
5.对AVFrame进行编码,生成需要的格式的Packet
.......
流程对应的API
1.输入流相关API
avformat_alloc_context():
初始化AVFormatContext
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat