ffmpeg重要函数和结构体整理

ffmpeg、ffplay   

自己学习记录,方便以后查看。 

=======================================================================================================================
ffmpeg关键结构体类型:

1)解协议

AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。

每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)。

2)解封装

AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频使用的封装格式。

每种视音频封装格式都对应一个AVInputFormat 结构。

3)解码

每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;

每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。

4)存数据

视频的话,每个结构一般是存一帧;音频可能有好几帧

解码前数据:AVPacket

解码后数据:AVFrame

------------------------------------------------------------------------------------------------------------------------

AVOutputFormat:输出文件容器,包含音频、视频、字幕编码器ID

AVInputFormat: 输入文件容器

------------------------------------------------------------------------------------------------------------------------

AVFormatContext:它是FFMPEG解封装(flv,mp4,rmvb,avi)功能的结构体,

	包含:输入数据缓存、视音频流个数、视音频流、文件名、时长、码率,元数据等信息。

AVCodecContext:封装编解码器功能的结构体。包括:编解码器的类型(视频,音频...)、编解码器、平均码率、视频宽高、

	运动估计参考帧个数、采样率(音频)、声道数(音频)、采样格式、

AVIOContext:FFMPEG管理输入输出数据的结构体。包括:缓存开始位置、缓存大小、当前指针读到的位置、

	缓存结束位置、URLContext结构体。

-------------------------------------------------------------------------------------------------------------------------

AVPacket:存储压缩编码数据相关信息的结构体。包括压缩编码的数据、数据大小、显示时间戳(PTS)、解码时间戳(dts)。

	对于H.264来说,1个AVPacket的data通常对应一个NAL。在使用FFMPEG进行视音频处理的时候,

	常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件

AVFrame:一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),

	包括:解码后的原始数据、视频宽和高、音频帧数、是否为关键帧、帧类型(I/P/B)、宽高比、

	显示时间戳(pts)、帧序号、QP表等

AVStream:存储每一个视频/音频流信息的结构体。包括:视音频流序号、视音频流长度、元数据、帧率等

AVCodec:存储编解码器信息的结构体。包括:编解码器名字、媒体类型(视频、音频还是字幕)、编解码器ID、

	支持的帧率(视频)、支持的像素格式(视频)、采样率(音频)、采样格式(音频)、声道数(音频)、私有数据大小。

AVDictionary:一个结构体,简单的key/value存储,经常使用AVDictionary设置或读取内部参数

===========================================================================================================================

ffmpeg重要函数和结构体整理

=========================================================================================
重要结构体对应的函数:

AVFormatContext 初始化函数是avformat_alloc_context(),销毁函数是avformat_free_context()。

AVIOContext:	初始化函数是avio_alloc_context(),    销毁的时候使用av_free()释放掉其中的缓存

AVStream:	    初始化函数是avformat_new_stream(),   销毁函数使用销毁AVFormatContext的avformat_free_context()

AVFrame:	    初始化函数是av_frame_alloc(),        销毁函数是av_frame_free()

AVPacket:	    初始化函数有两个:av_init_packet(),av_new_packet()。销毁函数是av_free_packet()。

AVOutputFormat  初始化函数av_guess_format(),

=========================================================================================
ffmpeg通用函数:

1)av_register_all():fmpeg注册复用器,编码器等。包括:
	(a)avcodec_register_all():注册了和编解码器有关的组件。
	(b)av_register_output_format():注册复用器
	(c)av_register_input_format():注册解复用器
	(d)ffurl_register_protocol():注册协议处理器

2)av_malloc()、av_free():内存的分配和释放

3)avio_open2():用于打开FFmpeg的输入输出文件

4)av_find_decoder():查找FFmpeg的编码器。输入参数编码器的ID

5)av_find_encoder():查找FFmpeg的解码器。输入参数解码器的ID

6)avcodec_open2():初始化一个视音频编解码器的AVCodecContext

7)avcodec_close():关闭编码器。

8)av_dump_format(): 打印关于输入或输出格式的详细信息,例如持续时间,比特率,流,容器,程序,

元数据,边数据,编解码器和时基。

9)avpicture_get_size():获取一帧图像的大小,p1:像素格式,p2和p3分别为宽和高。

10)avpicture_fill():为已经分配空间的AVFrame挂上一段用于保存数据的buffer。

11)av_sample_get_buffer_size():计算音频占用的字节数。

12)avcodec_fill_audio_frame():将分配空间后的buffer挂到AVFrame中

13) avformat_open_input():该函数用于打开多媒体数据并且获取一些信息

14) avformat_close_input():对应于13

15) avcodec_copy_context():拷贝输入视频码流的AVCodecContex的数值t到输出视频的AVCodecContex

16) avformat_alloc_output_context2(): 负责分配输出 AVFormatContext

17) av_compare_ts(): 比较时间戳,决定写入视频还是写入音频

18) av_read_frame(): 从输入文件读取一个AVPacket。

19) av_interleaved_write_frame(): 写入一个AVPacket到输出文件
-----------------------------------------------------------------------------------------
解码相关函数:

1)avformat_open_input():打开多媒体数据并且获得一些相关的信息

2)avformat_find_stream_info():读取一部分视音频数据并且获得一些相关的信息

3)av_read_frame():读取码流中的音频若干帧或者视频一帧

4)avcodec_decode_video2():解码一帧视频数据。输入一个压缩编码的结构体AVPacket,

                    输出一个解码后的结构体AVFrame

5)avformat_close_input():关闭一个AVFormatContext

-----------------------------------------------------------------------------------------
编码相关函数:

1)avformat_alloc_output_context2():初始化一个用于输出的AVFormatContext结构体

2)avformat_write_header():写视频文件头

3)av_write_frame():写视频数据

4)av_write_trailer():写视频文件尾

=========================================================================================
上一篇:论文研究12:DUAL-PATH RNN for audio separation


下一篇:解封装(八):av_seek_frame改变播放进度函数