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

相关推荐
小馬佩德罗21 小时前
如何将x264 x265的动态库编译入Linux系统中的FFmpeg源码 - x264库编译
linux·ffmpeg·x264
LYOBOYI12321 小时前
qml练习:创建地图玩家并且实现人物移动(2)
开发语言·qt
Black蜡笔小新1 天前
视频融合平台EasyCVR融合无线监控,打造智能高效安防解决方案
ffmpeg·音视频
得鹿梦鱼、1 天前
Qt/halcon 总结halcon字典数据用法和QDataSteam序列化与反序列化结构体实例
qt·tuple字典·qdatasteam·序列化结构体·反序列化结构体
世转神风-1 天前
qt-基础打印-不换行打印
开发语言·qt
老歌老听老掉牙1 天前
PyQt5中RadioButton互斥选择的实现方法
开发语言·python·qt
864记忆1 天前
Qt Creator 常用命令的中英文对照表
开发语言·qt
jianghusanren31 天前
【无标题】
ffmpeg
Larry_Yanan1 天前
Qt多进程(六)共享内存和信号量
开发语言·qt
东方忘忧1 天前
Qt使用QDesktopServices::openUrl打开系统默认应用(如浏览器,文件,文件夹和邮件)
开发语言·qt