AVFormatContext 结构体
unsigned int nb_streams;
表示该avfromatContext中有多少个 stream
AVStream **streams;
AVStream *stream数组,该数组中存放的是 AVStream *,
void *priv_data;
编解码时设置。
* - muxing: set by avformat_write_header()
* - demuxing: set by avformat_open_input()
使用方法,类似于AVOptions,在编码的时候,设置bit rate等参数,在RTSP时候,设置UDP,TCP,超时等信息。
av_opt_set(c->priv_data, "preset", "slow", 0);
AVIOContext *pb;
这个是IO,在解封装的时候用不到,,在封装的时候用来写入文件
char *url;
打开的文件的url,也会被记录到这里
int64_t duration;
整个媒体文件的时长,如果视频比音频的时长 长,则一般这个值会和视频的时长相等,否则会和音频的时长相等。
int64_t bit_rate;
整个媒体文件的比特率,avstream[i]中会有单独的音频或者视频的比特率。
AVStream 结构体
int index
索引号,对应的是AVFormatContext中的AVStream **中的索引号
这个index 作用很大,我们在用av_read_frame读到具体的avpacket时,可以用这个index判断该avpacket 是音频还是视频。
实际应用中是对 avFormatContext 的 nb_streams进行遍历,找到 avstream的索引,并记住索引号,当读取到packet后,根据记住的索引号 和 packet->streamid对比,就能知道该avpacket是音频的还是视频的packet了
AVRational time_base;
时间基数,音频和视频的时间基数不一致
AVRational avg_frame_rate;
视频对应fps,也就是显示帧率
AVCodecParameters *codecpar;
所有的配置参数,该avstream如果是音频,就是音频的参数; 如果是视频,就是视频的参数
* - demuxing: filled by libavformat on stream creation or in
* avformat_find_stream_info()
* - muxing: filled by the caller before avformat_write_header()
*/
AVCodecParameters 结构体
enum AVMediaType codec_type;
说明是音频还是视频
AVMEDIA_TYPE_VIDEO,AVMEDIA_TYPE_AUDIO
enum AVCodecID codec_id;
编解码器ID
int format;
/**
* - video: the pixel format, the value corresponds to enum AVPixelFormat.
* - audio: the sample format, the value corresponds to enum AVSampleFormat.
*/
int64_t bit_rate;
/**
* The average bitrate of the encoded data (in bits per second).
*/
int width; int height;
/**
* Video only. The dimensions of the video frame in pixels.
*/
int sample_rate;
/**
* Audio only. The number of audio samples per second.
*/
AVChannelLayout ch_layout;
/**
* Audio only. The channel layout and number of channels.
*/
int frame_size;
/**
* Audio only. Audio frame size, if known. Required by some formats to be static.
*/