avformat_open_input
int avformat_open_input(AVFormatContext **ps,
const char *filename,
AVInputFormat *fmt,
AVDictionary **options);
avformat_open_input
是 FFmpeg 库中的一个函数,用于打开一个输入文件并初始化格式上下文。该函数会根据文件头信息自动检测输入文件的格式,并准备好读取操作。
参数详解
-
**AVFormatContext ps
- 类型 :
AVFormatContext**
- 解释: 指向 AVFormatContext 结构体指针的指针。
- 用途: 用于返回初始化的格式上下文。调用函数前应将其指针置为 NULL。
- 类型 :
-
*const char filename
- 类型 :
const char*
- 解释: 输入文件名或 URL。
- 用途: 指定要打开的输入文件或流的路径。
- 类型 :
-
*AVInputFormat fmt
- 类型 :
AVInputFormat*
- 解释: 输入文件的格式。
- 用途 : 通常为 NULL,让库自动检测输入文件的格式。如果知道具体格式,可以指定相应的
AVInputFormat
。
- 类型 :
-
**AVDictionary options
- 类型 :
AVDictionary**
- 解释: 选项字典。
- 用途: 用于传递特定格式或协议的附加选项。可以为 NULL。如果不为 NULL,函数返回时,包含未识别的选项。
- 类型 :
avformat_find_stream_info
avformat_find_stream_info
是 FFmpeg 库中的一个函数,用于读取媒体文件或流的详细信息,并填充 AVFormatContext
结构体中的流信息。该函数会尝试读取并解析文件的头部数据,以确定文件中的每个流的编解码器类型、时基、帧率等信息。
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
参数详解
-
*AVFormatContext ic
- 类型 :
AVFormatContext*
- 解释: 格式上下文。
- 用途 : 指向已经打开并初始化的
AVFormatContext
结构体,表示要读取信息的输入文件或流。
- 类型 :
-
**AVDictionary options
- 类型 :
AVDictionary**
- 解释: 选项字典。
- 用途: 用于传递给解码器的附加选项。可以为 NULL。如果不为 NULL,函数返回时包含未识别的选项。
- 类型 :
av_dump_format
av_dump_format
是 FFmpeg 库中的一个函数,用于打印格式上下文的详细信息,包括文件名、格式、时长、比特率以及每个流的相关信息。这个函数对于调试和了解媒体文件的内容非常有用。
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output);
参数详解
-
*AVFormatContext ic
- 类型 :
AVFormatContext*
- 解释: 格式上下文。
- 用途 : 指向包含媒体文件或流信息的
AVFormatContext
结构体。
- 类型 :
-
int index
- 类型 :
int
- 解释: 文件索引。
- 用途: 通常为0,用于指定要打印信息的文件索引。在有多个文件的情况下使用。
- 类型 :
-
*const char url
- 类型 :
const char*
- 解释: 文件名或 URL。
- 用途: 用于指定媒体文件的名称或 URL。
- 类型 :
-
int is_output
- 类型 :
int
- 解释: 输出标志。
- 用途: 指定这是一个输入还是输出格式上下文。0表示输入,非0表示输出。
- 类型 :
avformat_alloc_output_context2
avformat_alloc_output_context2
是 FFmpeg 库中的一个函数,用于为输出文件或流分配并初始化一个 AVFormatContext
结构体。该函数会根据指定的格式自动初始化相应的字段,使得后续的输出操作更加简便。
int avformat_alloc_output_context2(AVFormatContext **ctx,
AVOutputFormat *oformat,
const char *format_name,
const char *filename);
参数详解
-
**AVFormatContext ctx
- 类型 :
AVFormatContext**
- 解释 : 指向
AVFormatContext
结构体指针的指针。 - 用途: 用于返回初始化的格式上下文。调用函数前应将其指针置为 NULL。
- 类型 :
-
*AVOutputFormat oformat
- 类型 :
AVOutputFormat*
- 解释: 输出文件的格式。
- 用途 : 指定输出文件的格式。如果为 NULL,函数将根据
format_name
或filename
自动推断格式。
- 类型 :
-
*const char format_name
- 类型 :
const char*
- 解释: 输出文件格式的名称。
- 用途 : 指定输出文件的格式名称,如 "mp4"。可以为 NULL,此时将根据
filename
自动推断格式。
- 类型 :
-
*const char filename
- 类型 :
const char*
- 解释: 输出文件名或 URL。
- 用途 : 用于指定输出文件的名称或 URL。可以为 NULL,此时必须指定
format_name
。
- 类型 :
avformat_new_stream
avformat_new_stream
是 FFmpeg 库中的一个函数,用于在给定的 AVFormatContext
中添加一个新的流(AVStream
)。这个新流通常用来表示即将编码的数据(音频、视频、字幕等)。该函数会自动分配并初始化 AVStream
结构体,并将其添加到 AVFormatContext
的流列表中。
AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c);
参数详解
-
*AVFormatContext s
- 类型 :
AVFormatContext*
- 解释: 格式上下文。
- 用途 : 指向包含媒体文件或流信息的
AVFormatContext
结构体,表示要添加新流的上下文。
- 类型 :
-
*const AVCodec c
- 类型 :
const AVCodec*
- 解释: 编解码器。
- 用途: 指定要使用的编解码器。可以为 NULL,此时不会自动设置编解码器。
- 类型 :
avio_open
avio_open
是 FFmpeg 库中的一个函数,用于打开一个 URL(文件或流)并为其分配并初始化一个 AVIOContext
结构体。这个 AVIOContext
结构体随后可以用于读写操作。该函数通常在设置输出文件或流时使用。
int avio_open(AVIOContext **s, const char *url, int flags);
参数详解
-
**AVIOContext s
- 类型 :
AVIOContext**
- 解释 : 指向
AVIOContext
结构体指针的指针。 - 用途 : 用于返回初始化的
AVIOContext
。调用函数前应将其指针置为 NULL。
- 类型 :
-
*const char url
- 类型 :
const char*
- 解释: URL(文件名或流地址)。
- 用途: 用于指定要打开的文件或流的名称或 URL。
- 类型 :
-
int flags
- 类型 :
int
- 解释: 标志。
- 用途 : 指定打开文件或流的模式。可以是以下常量的组合:
AVIO_FLAG_READ
:只读模式。AVIO_FLAG_WRITE
:只写模式。AVIO_FLAG_READ_WRITE
:读写模式。
- 类型 :
avcodec_parameters_copy
avcodec_parameters_copy
是 FFmpeg 库中的一个函数,用于将一个 AVCodecParameters
结构体中的编解码器参数复制到另一个 AVCodecParameters
结构体中。这在设置输出流参数或进行转码时非常有用。
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
参数详解
-
*AVCodecParameters dst
- 类型 :
AVCodecParameters*
- 解释: 目标编解码器参数结构体。
- 用途 : 指向要复制参数到的目标
AVCodecParameters
结构体。
- 类型 :
-
*const AVCodecParameters src
- 类型 :
const AVCodecParameters*
- 解释: 源编解码器参数结构体。
- 用途 : 指向要从中复制参数的源
AVCodecParameters
结构体。
- 类型 :
avformat_write_header
avformat_write_header
是 FFmpeg 库中的一个函数,用于写入输出文件的头部信息。在初始化输出格式上下文并添加所有需要的流之后,必须调用此函数来写入文件头。这样后续的帧写入操作才能进行。
int avformat_write_header(AVFormatContext *s, AVDictionary **options);
参数详解:
-
*AVFormatContext s
- 类型 :
AVFormatContext*
- 解释: 格式上下文。
- 用途 : 指向包含输出文件或流信息的
AVFormatContext
结构体。它包含了所有流的信息以及输出文件的格式。
- 类型 :
-
**AVDictionary options
- 类型 :
AVDictionary**
- 解释: 选项字典。
- 用途 : 传递格式化选项。可以为 NULL。如果有特定的选项需要传递给 muxer,可以使用这个参数。例如,设置
bit_rate
、codec
等选项。
- 类型 :
av_seek_frame
av_seek_frame
是 FFmpeg 库中用于在多媒体文件中执行寻帧操作的函数。它允许你跳转到文件中的特定位置,通常基于时间戳(如 PTS)。这是在处理音视频文件时常用的操作,例如在媒体播放器中实现快进、快退等功能
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);
参数详解
AVFormatContext *s
:指向打开的多媒体文件的格式上下文(通过avformat_open_input
打开)。int stream_index
:指定需要进行寻帧操作的流索引。如果设为 -1,FFmpeg 将会选择一个合适的流进行寻帧操作。int64_t timestamp
:目标时间戳,单位是流的时间基(time_base
)。可以使用av_rescale_q
将秒或其他单位的时间转换为目标流的时间基单位。int flags
:寻帧标志,指定如何进行寻帧操作。常用标志包括:AVSEEK_FLAG_BACKWARD
:寻找到小于等于目标时间戳的关键帧。AVSEEK_FLAG_BYTE
:基于字节位置寻帧,而不是基于时间戳。AVSEEK_FLAG_ANY
:可以寻找到任意帧,而不仅仅是关键帧。AVSEEK_FLAG_FRAME
:基于帧数寻帧。
av_read_frame
av_read_frame
从输入文件中读取每一帧数据,并存储在 pkt
中
av_rescale_q_rnd
av_rescale_q_rnd
是 FFmpeg 库中的一个函数,用于在不同时间基之间进行时间戳的缩放和转换,并且支持指定舍入模式。这在处理音视频同步和时间戳转换时非常有用。
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd);
参数详解
int64_t a
:需要转换的值(例如,时间戳)。AVRational bq
:原时间基。AVRational cq
:目标时间基。enum AVRounding rnd
:舍入模式,决定转换时的舍入策略。
返回值
返回值是以目标时间基 cq
表示的转换后的值。
舍入模式 AVRounding
AVRounding
是一个枚举,定义了舍入的不同模式:
AV_ROUND_ZERO
:向零舍入。AV_ROUND_INF
:向无穷远舍入。AV_ROUND_DOWN
:向负无穷舍入。AV_ROUND_UP
:向正无穷舍入。AV_ROUND_NEAR_INF
:四舍五入
av_rescale_q
av_rescale_q
是 FFmpeg 库中的一个函数,用于在不同时间基之间进行时间戳的缩放和转换。它允许你将一个时间戳从一个时间基转换为另一个时间基,而不需要指定舍入模式。通常用于处理音视频同步和时间戳转换。
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq);
参数详解
int64_t a
:需要转换的值(例如,时间戳)。AVRational bq
:原时间基。AVRational cq
:目标时间基。
av_interleaved_write_frame
av_interleaved_write_frame
函数是用于向多媒体文件写入一个交错(interleaved)帧的函数。在音视频文件中,交错写入指的是将音频和视频帧交错地写入文件,以便于播放器读取。
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
参数详解
-
AVFormatContext *s: 输出格式上下文。它是一个存储有关输出文件格式的信息的结构体,包括文件名、编解码器信息等。
-
AVPacket *pkt: 要写入的数据包(包含音频或视频帧的数据)。
av_write_trailer
av_write_trailer
函数用于在编写音视频流数据到输出文件后,向输出文件写入文件尾。
int av_write_trailer(AVFormatContext *s)
参数详解:
AVFormatContext *s
:输出格式上下文。包含了有关输出文件的信息,如文件名、编解码器信息等。
avformat_close_input
avformat_close_input
函数通常与 avformat_open_input
函数成对使用。
avio_closep
avio_closep
函数通常与 avio_open
函数成对使用
avformat_free_context
avformat_free_context
函数通常与 avformat_alloc_context(
或者avformat_alloc_output_context2)