FFmpeg库函数使用流程分析
-
初始化阶段
avformat_network_init(): 初始化FFmpeg网络模块,支持打开网络文件
avformat_alloc_context(): 分配AVFormatContext结构体,用于存储媒体文件格式相关信息
-
打开媒体流
av_dict_set(): 设置RTSP传输选项(如tcp传输模式、最大延迟等)
avformat_open_input(): 打开指定的媒体文件,支持本地文件和网络流,如RTSP/RTMP
avformat_find_stream_info(): 获取流信息,包括视频流和音频流,填充编解码器参数
-
查找视频流和解码器
遍历所有流,查找视频流(AVMEDIA_TYPE_VIDEO)
avcodec_parameters_to_context(): 将编解码器参数复制到编解码器上下文
avcodec_find_decoder(): 根据编解码器ID查找合适的解码器,可找视频解码器和音频解码器
avcodec_open2(): 打开解码器
-
分配解码器上下文
avcodec_alloc_context3():可分配视频和音频对应解码器
avcodec_parameters_to_context():参数复制到解码器上下文
-
准备解码环境
av_frame_alloc(): 分配AVFrame结构体,用于存储解码后的帧数据
sws_getContext(): 创建图像转换上下文,用于YUV到RGB的转换
av_image_get_buffer_size(): 计算RGB图像所需缓冲区大小
av_image_fill_arrays(): 填充图像数据数组
-
解码循环
av_read_frame(): 读取数据包
avcodec_send_packet(): 发送数据包到解码器
avcodec_receive_frame(): 接收解码后的帧
sws_scale(): 将解码后的YUV数据转换为RGB格式
-
重采样
swr_alloc():初始化
swr_alloc_set_opts2():初始化
swr_init():打开重采样
swr_convert():执行重采样
-
滤镜
avfilter_graph_alloc():滤镜图创建
avfilter_graph_create_filter():创建
avfilter_graph_config():配置
av_buffersrc_add_frame():添加帧到滤镜
av_buffersink_get_frame_flags():从滤镜获取处理后的帧
-
清理资源
swr_free():释放重采样上下文
avcodec_free_context(): 释放编解码器上下文
av_packet_unref(): 释放数据包引用
av_frame_free(): 释放帧结构体
avformat_close_input(): 关闭输入流
格式相关函数函数 功能 使用场景
avformat_network_init() 初始化网络支持 程序初始化阶段
avformat_alloc_context() 分配格式上下文 打开文件前
avformat_open_input() 打开媒体文件 文件加载阶段
avformat_find_stream_info() 查找流信息 文件加载阶段
avformat_close_input() 关闭媒体文件 程序结束阶段
编解码相关函数函数 功能 使用场景
avcodec_find_decoder() 查找解码器 解码器初始化
avcodec_alloc_context3() 分配解码器上下文 解码器初始化
avcodec_parameters_to_context() 复制参数到上下文 解码器初始化
avcodec_open2() 打开解码器 解码器初始化
avcodec_free_context() 释放解码器上下文 资源清理
avcodec_send_packet() 发送数据包到解码器 解码过程中
avcodec_receive_frame() 接收解码后的帧 解码过程中
数据包和帧处理函数函数 功能 使用场景
av_read_frame() 读取数据包 文件读取阶段
av_packet_unref() 释放数据包 数据包处理完后
av_frame_alloc() 分配帧结构 帧处理初始化
av_frame_free() 释放帧结构 资源清理
音频重采样函数函数 功能 使用场景
swr_alloc() 分配重采样上下文 音频初始化
swr_alloc_set_opts2() 设置重采样选项 音频初始化
swr_init() 初始化重采样上下文 音频初始化
swr_convert() 执行重采样 音频处理过程中
swr_free() 释放重采样上下文 资源清理
视频滤镜函数函数 功能 使用场景
avfilter_graph_alloc() 分配滤镜图 滤镜初始化
avfilter_get_by_name() 获取滤镜 滤镜创建
avfilter_graph_create_filter() 创建滤镜 滤镜创建
avfilter_graph_config() 配置滤镜图 滤镜初始化
av_buffersrc_add_frame() 添加帧到滤镜 滤镜处理
av_buffersink_get_frame_flags() 获取处理后的帧 滤镜处理
辅助函数函数 功能 使用场景
av_strerror() 获取错误描述 错误处理
av_q2d() 时间基转换为双精度浮点数 时间计算
av_rescale_q() 时间基重缩放 跳转处理
av_seek_frame() 跳转到指定位置 跳转处理
av_channel_layout_default() 默认声道布局 音频初始化
av_channel_layout_from_mask() 从掩码创建声道布局 音频初始化