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

相关推荐
慧都小项4 天前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同
人工智能·qt·ui·边缘计算·qt6.3
Quz5 天前
QML SwipeDelegate 滑动委托
qt
Quz5 天前
QML 列表中的四种委托:ItemDelegate、CheckDelegate、RadioDelegate、SwitchDelegate
qt
实心儿儿5 天前
Qt — 显示类控件
qt
江湖人称菠萝包5 天前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
扶尔魔ocy5 天前
【QT android】环境安装及第一个QT项目
qt·andriod开发
江湖人称菠萝包5 天前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
Cx330❀6 天前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
Quz6 天前
QML DelegateChooser:多条件组合与按列选择委托
qt
Quz6 天前
QML DelegateChooser:按角色选择委托与按索引选择委托
qt