持续更新中...
目录
libavutil库
av_log_set_level
函数原型:
void av_log_set_level(int level);
功能:
设置日志级别
位于log.h文件中
返回值:
无
参数:
level:日志级别
从定义中可以看出来,随着严重程度逐渐下降,一共包含如下级别:
- AV_LOG_PANIC,
- AV_LOG_FATAL,
- AV_LOG_ERROR,
- AV_LOG_WARNING,
- AV_LOG_INFO,
- AV_LOG_VERBOSE,
- AV_LOG_DEBUG。
每个级别定义的数值代表了严重程度,数值越小代表越严重。
默认的级别是AV_LOG_INFO。
此外,还有一个级别不输出任何信息,即AV_LOG_QUIET。
av_log
函数原型:
void av_log(void *avcl, int level, const char *fmt, ...);
功能:
位于log.h文件中
控制台日志打印输出
返回值:
无
参数:
avcl:指向任意结构体的指针,其第一个字段是指向AVClass结构体的指针
level:日志级别
fmt:指定后续参数如何转换为输出的格式字符串(打印兼容)
av_strerror
函数原型:
int av_strerror(int errnum, char *errbuf, size_t errbuf_size);
功能:
位于error.h文件中
将AVERROR代码errnum的描述放在errbuf中。
如果失败,将设置全局变量errno来表示错误。即使在失败的情况下,av_strerror()也会打印一个通用的错误消息,指出提供给errbuf的errnum。
返回值:
成功返回0,没有找到错误描述或者errnum,返回一个负值
参数:
errnum:用于描述错误的错误码
errbuf:将错误描述写入其中
errbuf_size:errbuf字节大小
av_dict_set
函数原型:
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
功能:
位于avcodec.h文件中
在*pm中设置给定条目,覆盖现有条目。
注意:如果设置了AV_DICT_DONT_STRDUP_KEY或AV_DICT_DONT_STRDUP_VAL,这些参数将在出现错误时被释放。
警告:向字典添加新条目将使之前用av_dict_get返回的所有现有条目无效。
返回值:
成功返回0,失败返回负值
参数:
pm:指向字典结构的指针。如果*pm为空,分配字典结构并放入*pm中。
key:添加到*pm的输入键(将被av_strduped或者根据flags添加为一个新的键)
value:要添加到*pm的条目值(将被av_strduped或根据flags添加为新键)。传递空值将导致现有条目被删除。
flags:
av_frame_unref
函数原型:
void av_frame_unref(AVFrame *frame);
功能:
位于avcodec.h文件中
取消引用帧引用的所有缓冲区,并重置帧字段
返回值:
无
参数:
frame:帧句柄
libavformat库
av_register_all
函数原型:
void av_register_all(void)
功能:
- 位于avformat.h文件中
- 该函数会初始化libavformat并且注册所有的封装器,解封装器以及协议。
- 并且在不调用av_register_all的情况下,可以通过使用av_register_input_format或者av_register_output_format精确选择某个需要支持的格式。但是注意一点:这3个函数源码是一摸一样的,也许是因为以后这些函数都要弃用,所以如此处理。
- 函数定义在#if FF_API_NEXT .... #endif之间,而FF_API_NEXT是在version.h中定义,暗示了这之间定义的public api将会在未来的某个版本给drop掉。
- 注意函数已经被标记为 attribute_deprecated,告知编译器函数已过时
返回值:
无
参数:
无
av_register_input_format
函数原型:
void av_register_input_format(AVInputFormat *format);
功能:
位于avformat.h文件中
注册解复用器
返回值:
无
参数:
format:输入文件容器格式
av_register_output_format
函数原型:
void av_register_output_format(AVOutputFormat *format);
功能:
位于avformat.h文件中
注册复用器
返回值:
无
参数:
format:输出文件容器格式
avformat_open_input
函数原型:
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options);
功能:
位于avformat.h文件中
打开输入流,并且读取header。codecs不会被打开
输入流必须用avformat_close_input()来关闭
返回值:
成功返回0,失败返回负数AVERROR
参数:
ps:指向用户提供的AVFormatContext的指针(由avformat_alloc_context分配) 可能是一个指针NULL,在这种情况下,AVFormatContext被分配到这个函数和写入到ps
注意,如果失败,用户提供的AVFormatContext将被释放
url:要打开的流的路径
fmt:如果非空,此参数强制指定输入格式。否则将自动检测格式。
options:一个包含AVFormatContext和demuer -private选项的字典。返回时,该参数将被销毁,并替换为包含。未找到的选项。可能是NULL。
avformat_close_input
函数原型:
void avformat_close_input(AVFormatContext **s);
功能:
位于avformat.h文件中
关闭已打开的输入AVFormatContext。释放它和它的所有内容,并将*s设为NULL。
返回值:
无
参数:
s:已打开的输入AVFormatContext
avformat_find_stream_info
函数原型:
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
功能:
位于avformat.h文件中
读取媒体文件的数据包以获取流信息。这对于没有标头的文件格式很有用,比如MPEG。该函数还计算在MPEG-2重复帧模式下的实际帧速率。
此函数不会改变逻辑文件的位置;检查过的数据包可能会被缓冲以供以后处理。
返回值:
成功返回大于等于0,失败出错返回AVERROR_xxx
参数:
ic:媒体文件句柄
options:如果非空,一个ic.nb_streams指针的长数组到字典,其中第i个成员包含选项的编解码器对应的第i个流。在返回时,每个字典将填充未找到的选项。
av_dump_format
函数原型:
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output);
功能:
位于avformat.h文件中
打印有关输入或输出格式的详细信息,如持续时间、比特率、流、容器、程序、元数据、边数据、编解码器和时基。
返回值:
无
参数:
ic:要分析的上下文
index:要转储有关信息的流的索引
url:要打印的URL,例如源文件或目标文件
is_output:选择指定的上下文是输入(0)还是输出(1)
av_find_best_stream
函数原型:
int av_find_best_stream(AVFormatContext *ic,
enum AVMediaType type,
int wanted_stream_nb,
int related_stream,
AVCodec **decoder_ret,
int flags);
功能:
位于avformat.h文件中
在文件中找到“最好的”流。
最佳流是根据各种试探法确定的,因为最有可能是用户所期望的。如果解码器参数是非null, av_find_best_stream将为流的编解码器找到默认的解码器;无法找到解码器的流将被忽略。
返回值:
成功返回非负流数,
如果请求的流没有被发现,返回AVERROR_STREAM_NOT_FOUND
如果流被发现了,但是没有响应的解码器,返回AVERROR_DECODER_NOT_FOUND
参数:
ic:打开的媒体文件句柄
type:流类型: video, audio, subtitles,等等
wanted_stream_nb:用户请求的流号,或-1用于自动选择
related_stream:试着找到一个和这个相关的流(例如。在同一程序中),或-1,如果没有
decoder_ret:如果非空,返回所选流的解码器
flags:当前为定义
avformat_alloc_context
函数原型:
AVFormatContext *avformat_alloc_context(void);
功能:
位于avformat.h文件中
为AVFormatContext 分配空间
返回值:
返回AVFormatContext 句柄
参数:
无
av_guess_format
函数原型:
ff_const59 AVOutputFormat *av_guess_format(const char *short_name, const char *filename, const char *mime_type);
功能:
位于avformat.h文件中
返回与提供的参数最匹配的已注册输出格式列表中的输出格式,如果没有匹配,则返回NULL。
返回值:
返回AVOutputFormat 句柄
参数:
short_name:非空检查short_name是否与注册格式的名称匹配
filename:非空检查文件名是否随注册格式的扩展名终止
mime_type:非空检查检查mime_type是否与注册格式的MIME类型匹配
avformat_new_stream
函数原型:
AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c);
功能:
位于avformat.h文件中
在进行视音频分离时,分离器在read_header()中调用它。如果AVFMTCTX_NOHEADER标志在s中设置。ctx_flags,那么它也可以在read_packet()中调用。
返回值:
返回AVStream 句柄
参数:
s:媒体文件句柄
c:如果非空,对应于新流的AVCodecContext将被初始化以使用这个编解码器。这是需要的,例如,编解码器的默认设置,所以编解码器应该提供,如果它是已知的。
avformat_free_context
函数原型:
void avformat_free_context(AVFormatContext *s);
功能:
位于avformat.h文件中
释放AVFormatContext句柄和所有与他相关的流
返回值:
无
参数:
s:需要释放的上下文
av_read_frame
函数原型:
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
功能:
位于avformat.h文件中
返回流的下一帧
此函数返回文件中存储的内容,但不验证解码器的有效帧。它将文件中存储的内容分割成帧,并为每个调用返回一个帧。它不会省略有效帧之间的无效数据,以便给解码器解码可能的最大信息。
如果pkt->buf为空,则包在下一次av_read_frame()或avformat_close_input()之前有效。否则数据包是无限期有效的。在这两种情况下,当包不再需要时,必须使用av_packet_unref释放它。对于视频,数据包只包含一帧。对于音频,它包含一个整数帧,如果每个帧有一个已知的固定大小(例如PCM或ADPCM数据)。如果音频帧有一个可变的大小(例如MPEG音频),那么它包含一个帧。
在AVStream中,pkt->pts, pkt->dts 和 pkt->duration总是设置为正确的值。time_base单位(猜测是否格式不能提供)。如果视频格式有b帧,pkt->pts可以是AV_NOPTS_VALUE,所以如果不解压有效载荷,最好依赖pkt->dts。
返回值:
成功返回0,失败或者到文件末尾,返回负值
参数:
s:媒体文件句柄
pkt:一帧数据
av_write_frame
函数原型:
int av_write_frame(AVFormatContext *s, AVPacket *pkt);
功能:
位于avformat.h文件中
将一个包写入输出媒体文件,确保正确的交错
此函数将包直接传递给muxer,而不进行任何缓冲或重新排序。如果格式需要,调用者负责正确地交叉包。想要libavformat处理交错的调用者应该调用av_interleaved_write_frame()而不是这个函数。
返回值:
成功返回0,失败返回AVERROR的负值,Libavformat将会一直关注释放该包,即使这个函数失败了
参数:
s:媒体文件句柄
pkt:注意,与av_interleaved_write_frame()不同,这个函数不获取传递给它的包的所有权(尽管一些muxers可能会对输入包进行内部引用)。
这个参数可以为NULL(在任何时候,而不仅仅是在末尾),以便立即刷新muxer中缓冲的数据,因为muxer在将数据写入输出之前在内部缓冲数据。
包的@ref AVPacket。“stream_index”字段必须设置为@ref AVFormatContext中对应流的索引。流“s->stream”。
时间戳(@ref AVPacket.pts "pts", @ref AVPacket。必须将dts“dts”设置为流时间基中的正确值(除非输出格式被avfmt_notimestamp标记,否则可以将其设置为AV_NOPTS_VALUE)。
一个流中后续数据包的dts必须严格递增(除非输出格式被AVFMT_TS_NONSTRICT标记,否则它们只能是非递减的)。@ref AVPacket。如果已知,也应该设置duration(“duration”)。
av_interleaved_write_frame
函数原型:
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
功能:
位于avformat.h文件中
将一个包写入输出媒体文件,确保正确的交错
这个函数将根据需要在内部缓冲数据包,以确保输出文件中的数据包按照dts增加的顺序正确地交叉。调用者自己做交错应该调用av_write_frame()而不是这个函数。
使用这个函数代替av_write_frame()可以让muxer提前了解未来的数据包,比如改善mp4 muxer在片段模式下VFR内容的行为。
返回值:
成功返回0,失败返回AVERROR的负值,Libavformat将会一直关注释放该包,即使这个函数失败了
参数:
s:媒体文件句柄
pkt:如果包是引用计数的,这个函数将获得这个引用的所有权,然后在它认为合适的时候取消对它的引用。
在函数返回后,调用者不能通过该引用访问数据。如果包没有引用计数,libavformat将复制。
这个参数可以为NULL(在任何时候,而不仅仅是在结束时),以刷新交错队列。
包的@ref AVPacket。“stream_index”字段必须设置为@ref AVFormatContext中对应流的索引。流“s→流”。
时间戳(@ref AVPacket.pts "pts", @ref AVPacket。必须将dts“dts”设置为流时间基中的正确值(除非输出格式被avfmt_notimestamp标记,否则可以将其设置为AV_NOPTS_VALUE)。
一个流中后续数据包的dts必须严格递增(除非输出格式被AVFMT_TS_NONSTRICT标记,否则它们只能是非递减的)。@ref AVPacket。如果已知,也应该设置duration(“duration”)。
av_rescale
函数原型:
int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
功能:
位于mathematics.h文件中
用四舍五入重新排列一个64位整数
这个函数相当于带有#AV_ROUND_NEAR_INF的av_rescale_rnd()。
返回值:
参数:
av_rescale_rnd
函数原型:
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const;
功能:
位于mathematics.h文件中
用指定的四舍五入重新排列一个64位整数
该操作在数学上等同于“a * b / c”,但是直接写入可能会溢出,并且不支持不同的舍入方法。
返回值:
参数:
av_rescale_q
函数原型:
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
功能:
位于mathematics.h文件中
用2个有理数重新缩放一个64位整数。
该操作在数学上等同于a * bq / cq
这个函数等同于带有#AV_ROUND_NEAR_INF的av_rescale_q_rnd()
返回值:
参数:
av_rescale_q_rnd
函数原型:
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq,enum AVRounding rnd) av_const;
功能:
位于mathematics.h文件中
使用指定的四舍五入重新用2个有理数来缩放一个64位整数。
这个操作在数学上等同于a * bq / cq
返回值:
参数:
avformat_write_header
函数原型:
int avformat_write_header(AVFormatContext *s, AVDictionary **options);
功能:
位于avformat.h文件中
分配流私有数据并将流标头写入输出媒体文件。
返回值:
AVSTREAM_INIT_IN_WRITE_HEADER表示成功如果编解码器在avformat_init中没有完全初始化,AVSTREAM_INIT_IN_INIT_OUTPUT表示成功如果编解码器在avformat_init中已经完全初始化,AVSTREAM_INIT_IN_INIT_OUTPUT表示失败。
参数:
s:媒体文件句柄,必须用avformat_alloc_context()来分配。它的oformat字段必须设置为所需的输出格式;它的pb字段必须设置为一个已经打开的AVIOContext。
options:用AVFormatContext和mux -private选项填充的AVDictionary。返回时,该参数将被销毁,并替换为包含未找到选项的dict。可能是NULL。
av_write_trailer
函数原型:
int av_write_trailer(AVFormatContext *s);
功能:
位于avformat.h文件中
将流标尾写入输出媒体文件,并释放此文件私有数据。
返回值:
成功返回0,失败返回AVERROR_xxx
参数:
s:媒体文件句柄
avio_open
函数原型:
int avio_open(AVIOContext **s, const char *url, int flags);
功能:
位于avio.h文件中
创建并初始化一个AVIOContext来访问url所指示的资源。
注意:当url指示的资源以读+写模式打开时,AVIOContext只能用于写。
返回值:
成功返回大于等于0,失败返回AVERROR代码的一个负值
参数:
s:用于返回创建的AVIOContext的指针。在失败的情况下,指向的值被设置为NULL。
url:要访问的url资源
flags:控制url指示的资源如何打开的标志,如AVIO_FLAG_WRITE
avio_close
函数原型:
int avio_close(AVIOContext *s);
功能:
位于avio.h文件中
关闭被AVIOContext 访问得资源,并释放它
返回值:
成功返回大于等于0,失败返回AVERROR代码的一个负值
参数:
s:已打开的AVIOContext 。
avio_closep
函数原型:
int avio_closep(AVIOContext **s);
功能:
位于avio.h文件中
关闭被AVIOContext 访问得资源,并释放它,并设置指针指向NULL
返回值:
成功返回大于等于0,失败返回AVERROR代码的一个负值
参数:
s:已打开的AVIOContext 。
libavcodec库
avcodec_alloc_context3
函数原型:
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
功能:
位于avcodec.h文件中
分配一个AVCodecContext并将其字段设置为默认值
需要avcodec_free_context()释放
返回值:
成功返回已被设置默认值的AVCodecContext 句柄,失败返回NULL
参数:
codec:如果非空,分配私有数据和初始化默认的给定编解码器。然后使用不同的编解码器调用avcodec_open2()是不合法的。如果为NULL,那么特定于编解码的默认值就不会初始化,这可能会导致不理想的默认设置(这对于编码器来说很重要,例如libx264)。
avcodec_open2
函数原型:
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
功能:
位于avcodec.h文件中
初始化AVCodecContext来使用给定的AVCodec。在使用此函数之前,必须使用avcodec_alloc_context3()分配上下文。
此函数是线程不安全的
返回值:
成功返回0,失败返回负值
参数:
avctx:要初始化的上下文
codec:打开这个上下文的编码器。如果一个非空的编解码器之前已经传递给avcodec_alloc_context3(),或者对于这个上下文,那么这个参数必须为空或等于之前传递的编解码器。
options:一个充满AVCodecContext和codec-private选项的字典。在返回时,该对象将被未找到的选项填充。
avcodec_find_decoder_by_name
函数原型:
AVCodec *avcodec_find_decoder_by_name(const char *name);
功能:
位于avcodec.h文件中
使用特定的名字,找到被注册的解码器
返回值:
成功返回一个被注册的解码器,失败返回NULL
参数:
name:被注册的解码器的名字
avcodec_find_decoder
函数原型:
AVCodec *avcodec_find_decoder(enum AVCodecID id);
功能:
位于avcodec.h文件中
根据特定的codec ID找到被注册的解码器
返回值:
成功返回一个被注册的解码器,失败返回NULL
参数:
id:被请求得解码器id
avcodec_find_encoder_by_name
函数原型:
AVCodec *avcodec_find_encoder_by_name(const char *name);
功能:
位于avcodec.h文件中
使用特定的名字,找到被注册的编码器
返回值:
成功返回一个被注册的编码器,失败返回NULL
参数:
name:被注册的编码器的名字
avcodec_find_encoder
函数原型:
AVCodec *avcodec_find_encoder(enum AVCodecID id);
功能:
位于avcodec.h文件中
根据特定的codec ID找到被注册的编码器
返回值:
成功返回一个被注册的编码器,失败返回NULL
参数:
id:被请求得编码器id
avcodec_receive_frame
函数原型:
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
功能:
位于avcodec.h文件中
从解码器返回解码后的输出数据
返回值:
0: 成功,返回一帧数据
AVERROR(EAGAIN): 此状态下的输出不可用-用户必须尝试发送新的输入
AVERROR_EOF: 解码器已完全刷新,将不再有输出帧
AVERROR(EINVAL): 编解码器未打开,或者是编码器
AVERROR_INPUT_CHANGED: 当前解码帧相对于第一解码帧改变了参数。当设置AV_CODEC_FLAG_DROPCHANGED 标志时适用。
其他负值: 合法的解码错误
参数:
avctx:codec上下文
frame:这将被设置为由解码器分配的引用计数视频或音频帧(取决于解码器类型)。注意,这个函数总是在做其他事情之前调用av_frame_unref(frame)。
avcodec_send_frame
函数原型:
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);
功能:
位于avcodec.h文件中
向编码器提供原始视频或音频帧。使用avcodec_receive_packet()检索缓冲的输出数据包。
返回值:
0: 成功
AVERROR(EAGAIN): 在当前状态下,输入不被接受——用户必须使用avcodec_receive_packet()读取输出(一旦读取了所有输出,就应该重新发送数据包,并且调用不会通过EAGAIN失败)。
AVERROR_EOF: 编码器已经刷新,没有新的帧可以发送给它
AVERROR(EINVAL): 编解码器未打开,或者是解码器 refcounted_frames未设置,它是一个解码器,或需要刷新
AVERROR(ENOMEM): 限定将数据包添加到内部队列或类似的内容
其他负值: 合法的解码错误
参数:
avctx:codec上下文
frame:包含要编码的原始音频或视频帧的AVFrame。
帧的所有权保留给调用者,而编码器将不会写入帧。编码器可以创建对帧数据的引用(或者复制它,如果帧没有引用计数)。
它可以为NULL,在这种情况下,它被认为是刷新包。这标志着流的结束。如果编码器仍然有包缓冲,它将返回它们之后,这个调用。一旦进入刷新模式,额外的刷新包将被忽略,发送帧将返回AVERROR_EOF。
对于音频:
如果设置了AV_CODEC_CAP_VARIABLE_FRAME_SIZE,那么每个帧可以有任意数量的样本。如果没有设置,frame->nb_samples必须等于avctx->frame_size(最后一帧除外)。最后一帧可能小于avctx->frame_size。
avcodec_receive_packet
函数原型:
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
功能:
位于avcodec.h文件中
从编码器中读取被编码得数据
返回值:
成功返回0,失败返回负值
AVERROR(EAGAIN): 此状态下的输出不可用-用户必须尝试发送新的输入
AVERROR_EOF: 解码器已完全刷新,将不再有输出帧
AVERROR(EINVAL): codec 没有被打开 或者这个一个编码器
其他错误: 合法得解码错误
参数:
avctx:codec上下文
avpkt:这将被设置为由编码器分配的引用计数数据包。注意,这个函数总是在做其他事情之前调用av_frame_unref(frame)。
avcodec_send_packet
函数原型:
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
功能:
位于avcodec.h文件中
将原始数据包数据作为输入提供给解码器
输入缓冲区avpkt->data;数据AV_INPUT_BUFFER_PADDING_SIZE必须大于实际读取字节,因为一些优化的位流阅读器一次读取32位或64位,并可以读取结束。
注意AVCodecContext必须在信息包可能被提供给解码器之前被avcodec_open2()打开
返回值:
成功返回0,失败返回负值
AVERROR(EAGAIN): 在当前状态下,输入不被接受-用户必须使用avcodec_receive_frame()读取输出(一旦读取了所有输出,就应该重新发送数据包,并且调用不会通过EAGAIN失败)
AVERROR_EOF: 解码器不能向其发送新的数据包(如果发送了超过1个刷新包,也会返回)
AVERROR(EINVAL): codec 没有被打开 或者这个一个编码器
AVERROR(ENOMEM): 未能将封包添加到内部队列或类似情况
其他错误: 合法得解码错误
参数:
avctx:codec上下文
avpkt:输入AVPacket。通常,这将是一个视频帧,或几个完整的音频帧。封包的所有权仍然属于调用者,解码器将不写入封包。解码器可以创建对包数据的引用(或复制它,如果包没有引用计数)。
与旧的api不同,数据包总是被完全消耗,如果它包含多个帧(例如一些音频编解码器),将需要你调用avcodec_receive_frame()多次之后,你可以发送一个新的数据包。它可以是NULL(或AVPacket与数据设置为NULL和大小设置为0);在本例中,它被视为刷新包,表示流的结束。发送第一个刷新包将返回成功。后续的是不必要的,将返回AVERROR_EOF。如果解码器仍然有帧缓冲,它会在发送刷新包后返回帧。
avcodec_parameters_copy
函数原型:
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
功能:
位于avcodec.h文件中
将src的内容复制到dst。dst中分配的任何字段都被释放,并替换为src中相应字段的重复项。
返回值:
成功返回0,失败返回AVERROR
参数:
dst:需要被赋值的AVCodecParameters
src: 原始得AVCodecParameters
av_init_packet
函数原型:
void av_init_packet(AVPacket *pkt);
功能:
位于avcodec.h文件中
用默认值初始化数据包的可选字段。
这不会涉及必须单独初始化的数据和大小成员。
返回值:
成功返回0
参数:
pkt:需要被关闭的AVCodecContext
avcodec_copy_context
函数原型:
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
功能:
位于avcodec.h文件中
此函数的语义定义不明确,已过时,不应该使用。如果需要将流参数从一个codec上下文传输到另一个,请使用中间的AVCodecParameters实例和avcodec_parameters_from_context() / avcodec_parameters_to_context()函数。
返回值:
成功返回0,错误时(如内存分配错误)返回AVERROR()
参数:
dest:目标codec上下文,应该被avcodec_alloc_context3(NULL)初始化,否则未初始化
src:源codec上下文
av_bitstream_filter_filter
函数原型:
int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
AVCodecContext *avctx, const char *args,
uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size, int keyframe);
功能:
位于avcodec.h文件中
经过上述代码处理之后,AVPacket中的数据有如下变化:
- 每个AVPacket的data添加了H.264的NALU的起始码{0,0,0,1}
- 每个IDR帧数据前面添加了SPS和PPS
旧的位流过滤API(使用AVBitStreamFilterContext)不赞成使用。从新的比特流过滤API(使用AVBSFContext)中使用av_bsf_send_packet()和av_bsf_receive_packet()。
返回值:
参数:
avcodec_close
函数原型:
int avcodec_close(AVCodecContext *avctx);
功能:
位于avcodec.h文件中
关闭一个给定的AVCodecContext并释放所有与之关联的数据(但不是AVCodecContext本身)。
不要使用此函数,直接使用avcodec_free_context()销毁编解码器上下文(打开或关闭)
返回值:
成功返回0
参数:
avctx:需要被关闭的AVCodecContext