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

相关推荐
fzb5QsS1p1 天前
告别重复造轮子,Qt 快速开发脚手架
开发语言·qt·php
森G1 天前
58、最佳实践与注意事项---------多线程、竟态条件和同步
c++·qt
紫金修道1 天前
【编解码】RK3588 平台基于 FFmpeg RKMPP 硬解的多路 RTSP 抓帧插件实战
ffmpeg·rkmpp
小樱花的樱花1 天前
1 项目概述
开发语言·c++·qt·ui
MinterFusion1 天前
如何在openKylin 2.0 SP2中安装Qt(v0.2.2)(上)
开发语言·qt·软件开发·系统维护·明德融创·openkylin
特立独行的猫a1 天前
HarmonyOS鸿蒙PC的QT应用开发:(一、开发环境搭建及第一个HelloWorld)
qt·华为·harmonyos·鸿蒙pc
青花瓷1 天前
采用QT下MingW编译opencv4.8.1
开发语言·qt
cpp_learners1 天前
Linux ARM架构 使用 linuxdeployqt 打包QT程序
linux·arm开发·qt
森G1 天前
3.1、移植Qt程序到ARM平台----移植Qt程序到ARM平台(扩展)
arm开发·c++·qt
白杆杆红伞伞1 天前
Qt Event
开发语言·qt