一、
首先FFmpeg中存在多个时间基(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。
1、AVstream中(libavformat/avformat.h)
typedef struct AVFormatContext {
struct AVInputFormat *iformat;//输入数据的封装格式
unsigned int nb_streams;//视音频流的个数
AVStream **streams;//视音频流
char filename[1024];//文件名
int64_t duration//时长(单位:微秒us,转换为秒需要除以1000000)
int bit_rate//比特率(单位bps,转换为kbps需要除以1000)
AVDictionary *metadata//元数据
int64_t start_time;//开始的时间
......
}
typedef struct AVCodecContext {
enum AVMediaType codec_type;//编解码器的类型(视频,音频...)
struct AVCodec *codec;//采用的解码器AVCodec(H.264,MPEG2...)
int bit_rate;//平均比特率
uint8_t *extradata;//针对特定编码器包含的附加信息(例如对于H.264解码器来说,存储sps,pps等)
AVRational time_base;//根据该参数,可以把PTS转化为实际的时间(单位为秒s)