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

相关推荐
小尧嵌入式13 小时前
在windows上安装ffmpeg及新版ffmpeg命令
c++·windows·算法·ffmpeg
别动哪条鱼13 小时前
AVFrame的data数组数据结构详解
网络·数据结构·ffmpeg
小亦小亦_空中接力13 小时前
高效开发利器:Visual Studio 2022与Qt结合实战详解
qt·visual studio
小c君tt13 小时前
FFmpeg在QT中的使用3
开发语言·qt·ffmpeg
扶尔魔ocy13 小时前
【QT window】ffmpeg实现手动绘图(裁剪)、缩放、拍照,显示fps等功能
qt·ffmpeg·视频处理
秦jh_13 小时前
【Qt】信号与槽
服务器·开发语言·数据库·qt
Source.Liu13 小时前
【学写LibreCAD】Win11下在MSYS2 UCRT64环境中搭建Qt+Rust混合开发环境(VSCode)完整笔记
c++·qt·rust
攻城狮7号14 小时前
【AI时代速通QT】第十节:在 Windows 上配置vs和qmake环境手动编译 Qt 项目
windows·qt·makefile·visual studio·qmake·vcvarsall·nmake/jom
2401_8534482314 小时前
imx6ullMini开发板qt项目
qt·系统移植