1.编码整体流程
上图已经完整的说明了编码的流程,这里我们来具体说一下:
- av_register_all()
- 注册编解码器
- 注册复用器
- 注册解复用器
- 注册协议处理器
基本上这个函数永远是的第一个被调用的,只有调用了这个函数才能完成各种初始化,我们才能够使用编码/解码器,才能够使用复用/解复用器
- avformat_alloc_output_context2()
这是第二优先调用的函数,该函数可以帮助我们创建一个用于输出的AVFormatContext结构体
- avio_open2()
该函数用于打开FFmpeg的输入输出文件
- avformat_new_stream()
- avcodec_find_encoder()
avcodec_find_encoder()和avcodec_find_decoder()。avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。
- avcodec_open2()
该函数用于初始化一个视音频编解码器的AVCodecContext
- avformat_write_header
avformat_write_header(),av_write_frame()以及av_write_trailer()。其中av_write_frame()用于写视频数据,avformat_write_header()用于写视频文件头,而av_write_trailer()用于写视频文件尾
- avcodec_encode_video2()
该函数用于编码一帧视频数据
- av_write_frame()
av_write_frame()用于输出一帧视音频数据
- av_write_trailer()
av_write_trailer()用于输出文件尾
- avcodec_close()
- avformat_free_context()
- avio_close()