FFmpeg 解码大致流程
注册所有容器格式和CODEC: av_register_all()
打开文件: av_open_input_file()
从文件中提取流信息: av_find_stream_info()
穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO
查找对应的解码器: avcodec_find_decoder()
打开编解码器: avcodec_open()
为解码帧分配内存: avcodec_alloc_frame()
不停地从码流中提取中帧数据: av_read_frame()
判断帧的类型,对于视频帧调用: avcodec_decode_video()
解码完后,释放解码器: avcodec_close()
关闭输入文件:av_close_input_file()
引用自 https://www.jianshu.com/p/c2bc1cd08ca8
录制视频大致流程
1.avformat_open_input():打开输入文件,初始化输入视频码流的AVFormatContext。
2.av_read_frame():从输入文件中读取一个AVPacket。
3.avformat_alloc_output_context2():初始化输出视频码流的AVFormatContext。
4.avformat_new_stream():创建输出码流的AVStream。
avcodec_copy_context():拷贝输入视频码流的AVCodecContex的数值t到输出视频的AVCodecContext。
5.avio_open():打开输出文件。
6.avformat_write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
7.av_interleaved_write_frame():将AVPacket(存储视频压缩码流数据)写入文件。
8.av_write_trailer():写文件尾(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
引用自 https://www.cnblogs.com/Ghosgt/p/7090225.html