FFmpeg 库入门
FFmpeg 库入门
封装格式相关
avformat_alloc_context();负责申请一个AVFormatContext结构的内存,并进行简单初始化avformat_free_context();释放该结构里的所有东西以及该结构本身avformat_close_input();关闭解复用器,关闭后就不再需要使用 avformat_free_context 进行释放avformat_open_input();打开输入视频文件avformat_find_stream_info();获取音视频文件信息av_read_frame();读取音视频包avformat_seek_file();定位文件av_seek_frame();定位文

解码器相关
avcodec_alloc_context3();分配解码器上下文avcodec_find_decoder();根据ID查找解码器avcodec_find_decoder_by_name();根据解码器名字avcodec_open2();打开编解码器avcodec_send_packet();发送编码数据包avcodec_receive_frame();接收解码后数据avcodec_free_context();释放解码器上下文,包含了 avcodec_close()avcodec_close();关闭解码器

FFmpeg 数据结构简介
- AVFormatContext
- 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。
- AVInputFormat、AVOutputFormat
- 每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
- AVStream
- 视频文件中每个视频(音频)流对应一个该结构体。
- AVCodecContext
- 编解码器上下文结构体,保存了视频(音频)编解码相关信息。
- AVCodec
- 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
- AVPacket
- 存储一帧压缩编码数据。
- AVFrame
- 存储一帧解码后像素(采样)数据。
FFmpeg 数据结构之间的关系





FFmpeg 数据结构分析
- AVFormatContext
- iformat:输入媒体的AVInputFormat,比如指向AVInputFormatff_flv_demuxer
- nb_streams:输入媒体的AVStream 个数
- streams:输入媒体的AVStream []数组
- duration:输入媒体的时长(以微秒为单位),计算方式可以参考av_dump_format()函数。
- bit_rate:输入媒体的码率
- AVInputFormat
- name:封装格式名称
- extensions:封装格式的扩展名
- id:封装格式ID
- 一些封装格式处理的接口函数,比如read_packet()
- AVStream
- index:标识该视频/音频流
- time_base:该流的时基,PTS*time_base=真正的时间(秒)
- avg_frame_rate:该流的帧率
- duration:该视频/音频流长度
- codecpar:编解码器参数属性
- AVCodecParameters
- codec_type:媒体类型,比如AVMEDIA_TYPE_VIDEO、AVMEDIA_TYPE_AUDIO等
- codec_id:编解码器类型, 比如AV_CODEC_ID_H264、AV_CODEC_ID_AAC等。
- AVCodecContext
- codec:编解码器的AVCodec,比如指向AVCodec ff_aac_latm_decoder
- width, height:图像的宽高(只针对视频)
- pix_fmt:像素格式(只针对视频)
- sample_rate:采样率(只针对音频)
- channels:声道数(只针对音频)
- sample_fmt:采样格式(只针对音频)
- AVCodec
- name:编解码器名称
- type:编解码器类型
- id:编解码器ID
- 一些编解码的接口函数,比如int (*decode)()
- AVPacket
- pts:显示时间戳
- dts:解码时间戳
- data:压缩编码数据
- size:压缩编码数据大小
- pos:数据的偏移地址
- stream_index:所属的AVStream
- AVFrame
- data:解码后的图像像素数据(音频采样数据)
- linesize:对视频来说是图像中一行像素的大小;对音频来说是整个音频帧的大小
- width, height:图像的宽高(只针对视频)
- key_frame:是否为关键帧(只针对视频)
- pict_type:帧类型(只针对视频) 。例如I, P, B
- sample_rate:音频采样率(只针对音频)
- nb_samples:音频每通道采样数(只针对音频)
- pts:显示时间戳
FFmpeg 库入门
https://irisislove.github.io/2025/06/09/ffmpeg-lib-base/