FFmpeg API-常用数据结构和函数

目录

  1. 参考

1. 参考

[1] FFmpeg/tree/release/4.1

待整理...

av_log_set_callback

函数原型:

void av_log_set_callback(void(*)(void *, int, const char *, va_list) callback)  

设置日志打印的回调。

av_log

函数原型:

void av_log(void* avcl, int level, const char *fmt, ...)

输出日志。

av_malloc

av_malloc()就是简单的封装了系统函数malloc(),并做了一些错误检查工作。

avformat_alloc_output_context2()

函数原型

int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat * oformat, const char * format_name, const char * filename)

初始化一个用于输出的AVFormatContext结构体

avformat_network_init

全局地初始化网络组件,需要用到网络功能的时候需要调用。

av_register_all

初始化libavformat和注册所有的复用器和解复用器和协议。
如果不调用这个函数,可以使用av_register_input_format()和av_register_out_format()来选择支持的格式。

AVPacket

AVPacket是存储压缩编码数据的数据结构。
通常是解复用器的输出,然后被传递给解码器。或者是编码器的输出,然后被传递给复用器。
AVPacket.size:data的大小。
AVPacket.dts:解码时间戳。
AVPacket.stream_index:标识该AVPacket所属的视频/音频流。

av_copy_packet

函数原型:

int av_copy_packet(AVPacket * dst, const AVPacket * src)    

复制packet,包含内容。

av_packet_unref

函数原型:

void av_packet_unref(AVPacket * pkt)    

解除packet引用的buffer,并且将其余的字段重置为默认值。

AVCodecContext

这是一个描述解码器上下文的数据结构,包含了众多编解码器需要的参数信息。

AVCodec

存储编码器信息的结构体。
主要包含以下信息:

const char *name:编解码器的名字的简称

const char *long_name:编解码器名字的全称

enum AVMediaType type:指明了类型,是视频,音频,还是字幕

enum AVCodecID id:ID,不重复

const AVRational *supported_framerates:支持的帧率(仅视频)

const enum AVPixelFormat *pix_fmts:支持的像素格式(仅视频),如RGB24、YUV420P等。

const int *supported_samplerates:支持的采样率(仅音频)

const enum AVSampleFormat *sample_fmts:支持的采样格式(仅音频)

const uint64_t *channel_layouts:支持的声道数(仅音频)

int priv_data_size:私有数据的大小

avcodec_send_packet

将原始分组数据作为解码器的输入。
在函数内部,会拷贝相关的AVCodecContext结构变量,将这些结构变量应用到解码的每一个包。例如
AVCodecContext.skip_frame参数通知解码器扔掉包含该帧的包。

avcodec_alloc_context3()

创建AVCodecContext结构体。

avcodec_parameters_to_context

将音频流信息拷贝到新的AVCodecContext结构体中。

avcodec_free_context

释放AVCodecContext和与之相关联的所有内容,并且把指针置空。

avcodec_open2

原型:

int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)  

使用给定的AVCodec初始化AVCodecContext。
在使用这个函数之前需要使用avcodec_alloc_context3()分配的context。

av_frame_alloc

原型

AVFrame* av_frame_alloc(void)   

分配一个avframe和设置字段的默认值。分配出来的AVFrame必须使用av_frame_free()释放。

avcodec_receive_frame

原型

int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)    

返回解码器输出的解码数据

av_read_pause

原型

int av_read_pause(AVFormatContext *s)   

暂停网络流(例如RSTP流),使用av_read_play()重新开始。

av_read_play

原型

int av_read_play(AVFrameContext *s)

从当前的位置开始播放网络流(例如RSTP流)。

av_seek_frame

原型

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)   

seek到某个时间点的关键帧。

av_read_frame

原型

int av_read_frame(AVFormatContext *s, AVPacket *pkt)    

读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码。

AVFormatContext

这个结构体描述了一个媒体文件或媒体流的构成和基本信息。
这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象。

avformat_alloc_context

分配一个AVFormatContext,使用avformat_free_context来释放分配出来的AVFormatContext。

avformat_open_input

原型

int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options) 

打开输出的流和读取头信息。需要使用avformat_close_input关闭打开的流。

avformat_close_input

原型

void avformat_close_input(AVFormatContext **s)  

关闭一个打开的输入AVFormatContext,释放它得很所有内容和把指针(*s)置空。

av_dump_format

原型

void av_dump_format(AVFormatContext *ic, int index, const char * url, int is_output)

打印输入或者输出格式的详细信息,比如duration, bitrate, streams, container, programs, metadata, side data, codec and time base。

avformat_new_stream

原型

AVStream* avformat_new_stream(AVFormatContext *s, const AVCodec* c)

添加一个stream到媒体文件中。

avformat_write_header

原型

int avformat_write_header(AVFormatContext *s, AVDictionary ** options)

分配一个stream的私有数据而且写stream的header到一个输出的媒体文件。

AVPixelFormat

像素格式的枚举类型,例如AV_PIX_FMT_YUV420P、AV_PIX_FMT_RGB24

AVMediaType

媒体类型的枚举类型,如AVMEDIA_TYPE_VIDEO(视频)、AVMEDIA_TYPE_AUDIO(音频)、AVMEDIA_TYPE_SUBTITLE(字幕)

avformat_find_stream_info

原型

int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)  

读取视音频数据来获取一些相关的信息。

av_file_map

原型:

av_file_map(const char *filename, uint8_t **bufptr, size_t * size, int log_offset, void * log_ctx)

读取文件名为filename的文件,并将其内容放入新分配的缓冲区中。
如果成功,则将bufptr设置为读缓冲区或映射缓冲区,并将size设置为*bufptr中缓冲区的字节大小。返回的缓冲区必须使用av_file_unmap()释放。

AVInputFormat

AVInputFormat为FFMPEG的解复用器对象。

AVStream

该结构体描述一个媒体流。

AVCodecParameters

该结构体描述了编码的流的属性。

avcodec_parameters_copy

原型

int avcodec_parameters_copy(AVCodecParameter *dst, const AVCodecParameter* src)

把src中的内容拷贝到dst中。

AVRational

这个结构标识一个分数,num为分数,den为分母。

AVCodecID

解码器标识ID的枚举类型。

swr_alloc

原型

struct SwrContext* swr_alloc(void)  

分配一个SwrContext,如果你使用这个函数,需要在调用swr_init()之前设置SwrContext的参数(手工的或者调用swr_alloc_set_opts())

SwrContext

libswresample 的上下文信息。
不像libavcodec和libavformat,这个结构是不透明的,如果你需要设置选项,你必须使用AVOptions而不能直接给这个结构的成员赋值。

swr_alloc_set_opts

原型

struct SwrContext* swr_alloc_set_opts(struct SwrContext *s,
int64_t out_ch_layout,
enum AVSampleFormat out_sample_fmt,
int out_sample_rate,
int64_t in_ch_layout,
enum AVSampleFormat in_sample_fmt,
int in_sample_rate,
int log_offset,
void *log_ctx 
)   

设置通用的参数,如果SwrContext为空则分配一个SwrContext。

swr_init

原型

init swr_init(struct SwrContext *s)

在参数设置好以后初始化context。

swr_free

原型

void swr_free(struct SwrContext **  s)  

释放给定的SwrContext,并且把指针置为空。

sws_getContext

原型


struct SwsContext* sws_getContext   (   int     srcW,
int     srcH,
enum AVPixelFormat  srcFormat,
int     dstW,
int     dstH,
enum AVPixelFormat  dstFormat,
int     flags,
SwsFilter *     srcFilter,
SwsFilter *     dstFilter,
const double *  param 
)   

分配和返回一个SwsContext。

avio_open

原型

int avio_open(AVIOContext **s, const char* filename, int flags)

创建和初始化一个AVIOContext用于访问filename指示的资源。

avio_closep

原型

int avio_closep(AVIOContext **s)

关闭AVIOContext** s打开的资源,释放它并且把指针置为空。

AV_ROUND

AV_ROUND_ZERO     = 0, // Round toward zero.      趋近于0  
AV_ROUND_INF      = 1, // Round away from zero.   趋远于0  
AV_ROUND_DOWN     = 2, // Round toward -infinity. 趋于更小的整数  
AV_ROUND_UP       = 3, // Round toward +infinity. 趋于更大的整数  
AV_ROUND_NEAR_INF = 5, // Round to nearest and halfway cases away from zero.  
                       //                         四舍五入,小于0.5取值趋向0,大于0.5取值趋远于0  

avio_alloc_context

原型

AVIOContext* avio_alloc_context(unsigned char* buffer,
                                                      int                     buffer_size,
                                                      int                     write_flag,
                                                      void*                 opaque,
                int(*)(void *opaque, uint8_t *buf, int buf_size) read_packet,
                int(*)(void *opaque, uint8_t *buf, int buf_size) write_packet,
                int64_t(*)(void *opaque, int64_t offset, int whence) seek)

分配和初始化一个AVIOContext用于缓冲的I/O。之后需要使用avio_context_free()释放。

av_file_unmap

原型

void av_file_unmap(uint8_t *bufptr, size_t size)

取消映射或释放av_file_map()创建的缓冲区bufptr。

你可能感兴趣的:(FFmpeg API-常用数据结构和函数)