ffmpeg4.2.1常用API

持续更新中...

目录

libavutil库

av_log_set_level

av_log

av_strerror

av_dict_set

av_frame_unref

libavformat库

av_register_all

av_register_output_format

avformat_open_input

avformat_close_input

avformat_find_stream_info

av_dump_format

av_find_best_stream

avformat_alloc_context

av_guess_format

avformat_new_stream

avformat_free_context

av_read_frame

av_write_frame

av_interleaved_write_frame

av_rescale

av_rescale_rnd

av_rescale_q

av_rescale_q_rnd

avformat_write_header

av_write_trailer

avio_open

avio_close

avio_closep

libavcodec库

avcodec_alloc_context3

avcodec_open2

avcodec_find_decoder_by_name

avcodec_find_decoder

avcodec_find_encoder_by_name

avcodec_find_encoder

avcodec_receive_frame

avcodec_send_frame

avcodec_receive_packet

avcodec_send_packet

avcodec_parameters_copy

av_init_packet

avcodec_copy_context

av_bitstream_filter_filter

avcodec_close


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值