精通FFmpeg流程:击鼓传花之责任链模式
好文章,来自【福优学苑@音视频+流媒体】
FFmpeg主要框架
FFmpeg解码流程
FFmpeg作为目前主流的音视频开源处理框架,在目前的互联网音视频处理大行其道,但是缺点是底层实现非常复杂,源码代码晦涩难懂,那么了解其基本处理流程就显得非常重要。下面,简单地将其主要框架梳理一下。
方便大家入门。
(1).av_register_all();//注册所有文件格式和编解码库
(2).avformat_network_init();//打开网络视频流
(3).av_open_input_file();//读取文件头部把信息保存到AVFormatContext结构体
(4).av_find_stream_info();//为pFormatCtx->streams填充上正确的信息
(5).CODEC_TYPE_VIDEO;//通过判断得到视频流类型
(6).avcodec_find_decoder();//查找解码器
(7).avcodec_open();//打开编解码器
(8).avcodec_alloc_frame();//分配空间保存帧数据
(9).av_read_frame();//不断从流中提取帧数据
(10).avcodec_decode_video();//解码视频流
(11).avcodec_close();//关闭解码器
(12).avformat_close_input_file();//关闭输入文件
FFmpeg2.x解码流程
FFmpeg4.x解码流程图
文件处理基本流程(转码流程)
-i:指定输入文件;
demuxer:解复用;即将音视频分离出来,上图中的视频流是AVC(H264)格式,音频流是AAC格式。
decoder:解码器;
filter:帧处理,这里将原始1920*1080转换为1280*720
encoder:编码器,这里是H265的视频格式
muxer:复用,将音频和视频进行重新封装。
注:
-acodec copy,说明音频采用原始的音频格式,只需要拷贝就好,不需要解码然后编码。
ffmpeg音视频文件处理基本流程
ffmpeg对一个媒体文件进行解码的主要流程是:
解码流程图
1.解复用(Demux)
视频文件的音频和视频都是分开进行压缩的,因为音频和视频的压缩算法不一样,
所以解码也不一样,所以需要对音频和视频分别进行解码。
虽然音频和视频是分别进行压缩的,但是为了传输过程的方便,降压所过的音频和视频捆绑在一起进行传输。
所以解复用这一步就是将文件中捆绑的音频流和视频流分开来以方便后面分别对它们进行解码。
2.解码(Decode)
一个音视频文件肯定是经过某种格式压缩的(h264、h265等),也就是通常所说的音视频编码,编码是为了减少数据量,否则的话对于音视频数据的存储和网络传输将是很难完成的,
所以我们必须对音视频文件进行尽可能的压缩。
***【在线视频教程】***