解封装流程:
常用接口:
AVFormatContext结构体详解:
常用字段
-
iformat / oformat
- 类型:
AVInputFormat*
/AVOutputFormat*
- 解释: 指向输入格式或输出格式的指针,用于描述文件的格式信息。
- 用途: 当打开一个多媒体文件时,
iformat
会指向对应的输入格式(例如,MP4、AVI等)。
- 类型:
-
nb_streams
- 类型:
unsigned int
- 解释: 文件中包含的流的数量。
- 用途: 例如,一个视频文件可能包含视频流、音频流和字幕流,这个字段记录了这些流的总数。
- 类型:
-
streams
- 类型:
AVStream**
- 解释: 指向所有流的指针数组。
- 用途: 每个
AVStream
结构体包含一个流的详细信息(如视频流的编码信息、音频流的采样率等)。
- 类型:
-
filename
- 类型:
char[1024]
- 解释: 文件名或URL。
- 用途: 保存打开的多媒体文件的路径或网络地址。
- 类型:
-
start_time
- 类型:
int64_t
- 解释: 媒体的开始时间(以微秒为单位)。
- 用途: 用于计算媒体的播放起始点。
- 类型:
-
duration
- 类型:
int64_t
- 解释: 媒体的持续时间(以微秒为单位)。
- 用途: 用于确定文件或流的总时长。
- 类型:
-
bit_rate
- 类型:
int64_t
- 解释: 总比特率(以比特每秒为单位)。
- 用途: 用于了解文件的总数据率,包括音频、视频和其他数据流的比特率。
- 类型:
-
metadata
- 类型:
AVDictionary*
- 解释: 文件的元数据。
- 用途: 存储文件的附加信息,例如标题、作者、专辑等。
- 类型:
AVStream结构体详解:
常用字段
-
index
- 类型 :
int
- 解释 : 流的索引(在
AVFormatContext
中的位置)。 - 用途: 用于标识流的位置。
- 类型 :
-
codecpar
- 类型 :
AVCodecParameters*
- 解释: 流的编解码器参数。
- 用途: 包含该流的编解码器参数,如编码类型(如codec_type = AVMEDIA_TYPE_AUDIO)、采样率、宽高等信息。
- 类型 :
-
time_base
- 类型 :
AVRational
- 解释: 流的时间基。
- 用途 : 表示该流时间戳的时间单位,例如
{1, 25}
表示每秒25帧。
- 类型 :
-
start_time
- 类型 :
int64_t
- 解释: 流的开始时间。
- 用途: 表示该流的起始时间戳。
- 类型 :
-
duration
- 类型 :
int64_t
- 解释: 流的持续时间。
- 用途: 表示该流的总持续时间。
- 类型 :
-
nb_frames
- 类型 :
int64_t
- 解释: 流的总帧数。
- 用途: 表示该流包含的帧数。
- 类型 :
-
metadata
- 类型 :
AVDictionary*
- 解释: 流的元数据。
- 用途: 存储关于该流的附加信息,如标题、作者等。
- 类型 :
-
avg_frame_rate
- 类型 :
AVRational
- 解释: 平均帧率。
- 用途: 表示该流的平均帧率。
- 类型 :
AVCodecParameters结构体详解:
常用字段
-
codec_type
- 类型 :
enum AVMediaType
- 解释: 编码类型。
- 用途: 表示流的媒体类型,例如视频、音频或字幕。
- 类型 :
-
codec_id
- 类型 :
enum AVCodecID
- 解释: 编解码器ID。
- 用途: 标识使用的编解码器,例如H.264、AAC等。
- 类型 :
-
bit_rate
- 类型 :
int64_t
- 解释: 比特率。
- 用途: 表示流的比特率(以比特每秒为单位)。
- 类型 :
-
width / height
- 类型 :
int
- 解释: 宽度 / 高度。
- 用途: 表示视频流的宽度和高度(以像素为单位)。
- 类型 :
-
sample_rate
- 类型 :
int
- 解释: 采样率。
- 用途: 表示音频流的采样率(以赫兹为单位)。
- 类型 :
-
channels
- 类型 :
int
- 解释: 音频通道数。
- 用途: 表示音频流的声道数量。
- 类型 :
-
format
- 类型 :
int
- 解释: 采样格式(音频)或像素格式(视频)。
- 用途: 表示音频的采样格式(如AV_SAMPLE_FMT_S16)或视频的像素格式(如AV_PIX_FMT_YUV420P)。
- 类型 :
-
channel_layout
- 类型 :
uint64_t
- 解释: 通道布局。
- 用途: 表示音频流的通道布局,如立体声、5.1声道等。
- 类型 :
avformat_open_input打开文件函数详解:
函数定义:
cpp
int avformat_open_input(AVFormatContext **ps,
const char *filename,
AVInputFormat *fmt,
AVDictionary **options);
参数详解
-
**AVFormatContext ps
- 类型 :
AVFormatContext**
- 解释 : 指向指针的指针,用于返回
AVFormatContext
结构体。AVFormatContext
包含了打开文件后的所有上下文信息。 - 用途 : 调用函数后,
*ps
将指向一个已初始化的AVFormatContext
,可用于进一步处理文件。
- 类型 :
-
*const char filename
- 类型 :
const char*
- 解释: 文件名或URL。
- 用途: 指定要打开的文件或流的路径。
- 类型 :
-
*AVInputFormat fmt
- 类型 :
AVInputFormat*
- 解释: 输入格式。如果设置为NULL,FFmpeg将自动检测输入格式。
- 用途: 可以显式指定文件的格式(例如MP4、AVI等),通常为NULL。
- 类型 :
-
**AVDictionary options
- 类型 :
AVDictionary**
- 解释: 选项字典,用于设置一些特定选项(如解码器参数、缓冲区大小等)。
- 用途: 用于传递额外的参数给格式化上下文。调用后,选项中未识别的键将保留在字典中。
- 类型 :
返回值
- 类型 :
int
- 解释: 函数执行的结果。
- 用途: 返回0表示成功,负值表示出错。
avformat_find_stream_info函数详解:
函数定义:
cpp
int avformat_find_stream_info(AVFormatContext *ic,
AVDictionary **options);
参数详解
-
*AVFormatContext ic
- 类型 :
AVFormatContext*
- 解释: 格式上下文,包含打开文件后的所有上下文信息。
- 用途 : 指向已经通过
avformat_open_input
初始化的AVFormatContext
结构体,函数将提取并填充其包含的流信息。
- 类型 :
-
**AVDictionary options
- 类型 :
AVDictionary**
- 解释: 选项字典,用于为解码器设置特定选项。
- 用途: 传递额外的参数给解码器。在调用之后,未识别的键将保留在字典中。通常为NULL。
- 类型 :
返回值
- 类型 :
int
- 解释: 函数执行的结果。
- 用途: 返回非负值表示成功,负值表示出错。具体的错误代码可以用于判断失败原因。
av_read_frame函数详解:
函数定义:
cpp
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
参数详解
-
*AVFormatContext s
- 类型 :
AVFormatContext*
- 解释: 输入文件的格式上下文。
- 用途 : 指向已经通过
avformat_open_input
初始化的AVFormatContext
结构体,表示要从哪个输入文件中读取帧数据。
- 类型 :
-
*AVPacket pkt
- 类型 :
AVPacket*
- 解释: 存储读取到的数据。
- 用途 : 存储读取到的音视频数据帧。函数会将读取到的数据填充到
AVPacket
结构体中,以供后续解码或处理。
- 类型 :
返回值
- 类型 :
int
- 解释: 函数执行的结果。
- 用途: 返回0表示成功读取一帧数据,负值表示出错或已到达文件末尾。