2 av_register_all()
// 初始化 libavformat和注册所有的muxers、demuxers和protocols,
// 其中会调用avcodec_register_all()注册多种音视频格式的编解码器,并注册各种文件的编解复用器
3 avformat_alloc_context()
// 分配一个AVFormatContext结构
// 其中负责申请一个AVFormatContext结构的内存,并进行简单初始化
4 avformat_free_context()
// 释放一个AVFormatContext结构
// 使用 avformat_alloc_context()分配的结构,采用该函数进行释放,除释放AVFormatContext结构本身内存之外,AVFormatContext中指针所指向的内存也会一并释放
5 AVFormatContext 结构
typedef struct AVFormatContext {
struct AVInputFormat *iformat;
struct AVOutputFormat *oformat;
AVIOContext *pb;
unsigned int nb_streams;
AVStream **streams;
char filename[1024]; /**< input or output filename */
....
} AVFormatContext;
// 作为输入容器时 struct AVInputFormat *iformat; 不能为空, 其中包含了输入文件的音视频流信息,程序从输入容器从读出音视频包进行解码处理
// 作为输出容器时 struct AVOutputFormat *oformat; 不能为空, 程序把编码好的音视频包写入到输出容器中
// AVIOContext *pb: I/O上下文,通过对该变量赋值可以改变输入源或输出目的
// unsigned int nb_streams; 音视频流数量
// AVStream ** streams; 音视频流
结果测试:【在simple_ffmpeg_play2项目中】使用AVFormatContent打开.H265裸流文件时,iformat和streams会被赋值: