AVFormatContext 是一個結構體
//用於日志記錄和 avoptions類的引用。由avformat_alloc_context () 賦值。導出(de)muxer私有選項(如果存在的話)。
const AVClass *av_class;
//輸入容器的格式,只有在解封裝的時候,由avformat_open_input() 函數賦值
ff_const59 struct AVInputFormat *iformat;
//輸入容器的格式,只有在加封裝的時候,必須由調用者在avformat_write_header()之前設置。
ff_const59 struct AVOutputFormat *oformat;
//AVFormatContext.streams中的元素數量。由avformat_new_stream()設置,不能被任何其他代碼修改。
unsigned int nb_streams;
//文件中所有流的列表。使用avformat_new_stream()創建新流。
//解封裝:流是由avformat_open_input()中的libavformat創建的。如果在ctx_flags中設置了AVFMTCTX_NOHEADER,那么新的流也可能出現在av_read_frame()中。
//加封裝:流是由用戶在avformat_write_header()之前創建的。
AVStream **streams;
//輸入或輸出的文件名
//解封裝:由函數avformat_open_input()賦值
//封裝:由用戶在avformat_write_header()之前創建的。
//@deprecated 已使用url代替
char filename[1024];
//輸入或輸出的url,不像舊版的filename字段,它沒有長度限制。
//解封裝:由avformat_open_input函數賦值,如果url參數為空的情況下,賦值一個空字符串。
//加封裝:可以由調用者在調用avformat_write_header()(或avformat_init_output()(如果先調用它)到av_free()可釋放的字符串之前進行設置。如果avformat_init_output()中的字符串為空,則將其設置為空字符串。
//由libavformat 模塊中的avformat_free_context()函數釋放
char *url;
//第一個數據幀的開始時間,單位為AV_TIME_BASE,不要直接設置該值,它是由AVSTREAM值推導出來。
//只在解封裝的時候有意義,由libavformat模塊賦值
int64_t start_time;
//數據流的時長,單位為AV_TIME_BASE,只有在您不知道單個流持續時間的情況下才設置此值,否則不要設置該值。這是從AVStream值推導出來的,如果沒有設置。
//只在解封裝的時候有意義,由libavformat模塊賦值
int64_t duration;
//總流比特率,以比特/秒為單位,如果不可用,則為0。如果file_size和持續時間是FFmpeg可以自動計算的,就不要直接設置它。
int64_t bit_rate;
unsigned int packet_size;
int max_delay;
//強制視頻編解碼器id,解封裝的時候由用戶設置
enum AVCodecID video_codec_id;
AVCodec *video_codec;
//強制音頻編解碼id,解封裝的時候由用戶設置
enum AVCodecID audio_codec_id;
AVCodec *audio_codec;
//強制字幕編解碼id,解封裝的時候由用戶設置
enum AVCodecID subtitle_codec_id;
AVCodec *subtitle_codec;
//應用於整個文件的元數據
//解封裝的時候,由libavformat模塊的avformat_open_input函數賦值
//加封裝的時候,需在用戶調用avformat_write_header()函數前賦值
//由libavformat模塊在avformat_free_context()中釋放
AVDictionary *metadata;