FFmpeg库函数使用流程

FFmpeg库函数使用流程分析

  1. 初始化阶段

    avformat_network_init(): 初始化FFmpeg网络模块,支持打开网络文件

    avformat_alloc_context(): 分配AVFormatContext结构体,用于存储媒体文件格式相关信息

  2. 打开媒体流

    av_dict_set(): 设置RTSP传输选项(如tcp传输模式、最大延迟等)

    avformat_open_input(): 打开指定的媒体文件,支持本地文件和网络流,如RTSP/RTMP

    avformat_find_stream_info(): 获取流信息,包括视频流和音频流,填充编解码器参数

  3. 查找视频流和解码器

    遍历所有流,查找视频流(AVMEDIA_TYPE_VIDEO)

    avcodec_parameters_to_context(): 将编解码器参数复制到编解码器上下文

    avcodec_find_decoder(): 根据编解码器ID查找合适的解码器,可找视频解码器和音频解码器

    avcodec_open2(): 打开解码器

  4. 分配解码器上下文

    avcodec_alloc_context3():可分配视频和音频对应解码器

    avcodec_parameters_to_context():参数复制到解码器上下文

  5. 准备解码环境

    av_frame_alloc(): 分配AVFrame结构体,用于存储解码后的帧数据

    sws_getContext(): 创建图像转换上下文,用于YUV到RGB的转换

    av_image_get_buffer_size(): 计算RGB图像所需缓冲区大小

    av_image_fill_arrays(): 填充图像数据数组

  6. 解码循环

    av_read_frame(): 读取数据包

    avcodec_send_packet(): 发送数据包到解码器

    avcodec_receive_frame(): 接收解码后的帧

    sws_scale(): 将解码后的YUV数据转换为RGB格式

  7. 重采样

    swr_alloc():初始化

    swr_alloc_set_opts2():初始化

    swr_init():打开重采样

    swr_convert():执行重采样

  8. 滤镜

    avfilter_graph_alloc():滤镜图创建

    avfilter_graph_create_filter():创建

    avfilter_graph_config():配置

    av_buffersrc_add_frame():添加帧到滤镜

    av_buffersink_get_frame_flags():从滤镜获取处理后的帧

  9. 清理资源

    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() 从掩码创建声道布局 音频初始化

相关推荐
用户8055336980310 小时前
现代Qt开发教程(新手篇)1.10——进程
c++·qt
vegetablesssss10 小时前
VTK切割图
c++·qt·vtk
happybasic11 小时前
在CMD下使用FFmpeg将.wav文件转换成指定的格式~
ffmpeg
Lhan.zzZ12 小时前
笔记_2026.4.28_003
c++·笔记·qt·opencv
m0_6356474812 小时前
Qt打包含有第三方库的软件为应用程序——CQtDeployer
开发语言·数据库·qt
shao91851615 小时前
第10章 Streaming(上):初级音频应用(1)——项目三:自建服务器的Mini-Omni实时语音聊天机器人
ffmpeg·whisper·asr·mini-omni·自建语音服务器
菩提树下的凡夫15 小时前
Qt环境下普通变量与原子变量的区别与联系
qt
小短腿的代码世界1 天前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
徐某人..1 天前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm