ffmpeg处理流程

news/2024/7/6 6:45:27

ffmpeg——流程解析

  • 图解
  • 主流程
    • 1、初始化avformat
    • 2、初始化avformat网络
    • 3、初始化输入流
        • 1、申请AVFormatContext
        • 2、打开输入流
        • 3、探测输入流信息
        • 4、查找解码器(视频和音频)
        • 5、根据编码器初始化AVCodecContext
    • 4、初始化输出流
        • 1、申请AVFormatContext
        • 2、查找编码器(音频和视频)
        • 3、根据编码器创建AVCodecContext
        • 4、根据编码器类型初始化AVCodecContext
        • 5、根据AVFormatContext和编码器创建输出流
        • 6、根据URL初始化AVIOContext
        • 7、向输出文件写流的头信息
    • 5、初始化滤镜
        • 1、申请AVFilterInOut(输入和输出)
        • 2、打开滤镜(输入滤镜和输入滤镜)
        • 3、申请AVFilterGraph
        • 4、构造滤镜初始化参数
        • 5、根据AVFilterGraph和初始化参数创建过滤器
        • 6、构造滤镜链
        • 7、解析滤镜命令行参数
        • 8、检查及配置滤镜链
    • 6、从AVFormatContext读取packet
    • 7、解码packet
    • 8、添加进滤镜
    • 9、从滤镜中读取数据
    • 10、编码packet
    • 11、输出数据
    • 12、写输出尾

图解

在这里插入图片描述

主流程

1、初始化avformat

av_register_all

2、初始化avformat网络

avformat_network_init

3、初始化输入流

1、申请AVFormatContext

avformat_alloc_context

2、打开输入流

avformat_open_input

3、探测输入流信息

avformat_find_stream_info

4、查找解码器(视频和音频)

avcodec_find_decoder

5、根据编码器初始化AVCodecContext

avcodec_open2

4、初始化输出流

1、申请AVFormatContext

avformat_alloc_output_context2

2、查找编码器(音频和视频)

avcodec_find_encoder

3、根据编码器创建AVCodecContext

avcodec_alloc_context3

4、根据编码器类型初始化AVCodecContext

avcodec_open2

5、根据AVFormatContext和编码器创建输出流

avformat_new_stream

6、根据URL初始化AVIOContext

avio_open

7、向输出文件写流的头信息

avformat_write_header

5、初始化滤镜

1、申请AVFilterInOut(输入和输出)

avfilter_inout_alloc

2、打开滤镜(输入滤镜和输入滤镜)

avfilter_get_by_name

3、申请AVFilterGraph

avfilter_graph_alloc

4、构造滤镜初始化参数

5、根据AVFilterGraph和初始化参数创建过滤器

avfilter_graph_create_filter

6、构造滤镜链

7、解析滤镜命令行参数

avfilter_graph_parse_ptr

8、检查及配置滤镜链

avfilter_graph_config

6、从AVFormatContext读取packet

av_read_frame

7、解码packet

avcodec_decode_video2或avcodec_decode_audio4

8、添加进滤镜

av_buffersrc_add_frame

9、从滤镜中读取数据

av_buffersink_get_frame_flags

10、编码packet

avcodec_encode_video2或avcodec_encode_audio2

11、输出数据

av_write_frame

12、写输出尾

av_write_trailer


http://www.niftyadmin.cn/n/3656219.html

相关文章

Microsoft Updater Application Block 1.3.3 BITSDownloader类设计 [翻译]

Microsoft Updater Application Block BITSDownloader类设计 译者:Tony Qu BITSDownloader类是一个从http服务器拷贝文件的下载器,它是Updater Application Block的默认下载器。 问题描述 BITSDownloader类被设计用于解决以下问题 1. 一个可以被应用程序…

linux后台执行(nohup)之大坑

问题场景 通过xshell远程登录服务器,然后启动几个后台服务,验证后服务功能都正常,ok! 然后过了一段时间发现服务器有问题,排查之后发现,有一个服务莫名的挂了,通过日志定位到接收到SIGHUP信号,…

Microsoft Updater Application Block 1.4.1 验证器设计 [翻译]

Microsoft Updater Application Block 验证器设计 译者:Tony Qu Updater Application Block提供了一个可扩展的验证器架构,这使通过签名或哈希号验证下载文件成为可能。验证器架构支持在服务器上生成签名和在客户端上确认这些签名。 图1 展示了服务器端的…

Microsoft Updater Application Block 1.3.1 下载器设计 [翻译]

Microsoft Updater Application Block 下载器设计 译者:Tony Qu Updater Application Block使用一个可扩展的下载器架构从指定的服务器上拷贝manifest文件和应用程序升级文件到客户端。 图1 展示了下载器架构 图1 包括下列过程 1. ApplicationUpdateManager类使用U…

av_buffersrc_add_frame返回-22

合并音频流时调用av_buffersrc_add_frame()返回-22,切换为av_buffersrc_add_frame_flags(),并指定AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT参数,正常通过。av_buffersrc_add_frame()根本问题参数问题,音频滤镜初始化参数配置错误&#…

Microsoft Updater Application Block 1.1 设计篇 [翻译]

Microsoft Updater Application Block 设计篇 译者:Tony Qu Updater Application Block为企业环境中解决桌面应用程序的更新问题提供了一个“无接触”解决方案。它包含一系列组件,每一个组件被设计用来实现更新过程中的一个特定的角色。 高级设计 图1展示…

ring buffer 环形队列 C++实现

RingBuff.h实现&#xff1a; #include <iostream>using namespace std;template <class T> class RingBuff { private:unsigned int m_size;int m_in;int m_out;T* m_data;public:RingBuff (unsigned int size): m_size(size), m_in(0), m_out(0){m_data new T[m…

Microsoft Updater Application Block 1.2.1 核心设计(core design) [翻译]

Microsoft Updater Application Block 核心设计(core design) 译者&#xff1a;Tony Qu Updater Application Block由一个核心应用程序升级器&#xff08;集合[assembly]名称为ApplicationUpdater&#xff09;和许多额外的assembly接口和工具组成。 Updater Application Bl…