博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最新版ffmpeg源码分析一:框架
阅读量:5914 次
发布时间:2019-06-19

本文共 1816 字,大约阅读时间需要 6 分钟。

(ffmpeg v0.9)

框架

最新版的ffmpeg中发现了一个新的东西:avconv,而且ffmpeg.c与avconv.c一个模样,一研究才发现是libav下把ffmpeg改名为avconv了.
到底libav与ffmpeg现在是什么个关系?我也搞得希里糊涂的,先不管它了.
ffmpeg的主要功能是音视频的转换和处理.其功能之强大已经到了匪夷所思的地步(有点替它吹了).它的主要特点是能做到把多个输入文件中的任意几个流重新组合到输出文件中,当然输出文件也可以有多个.
所以我们就会发现,在ffmpeg.c中,有类似于如下的一些变量:
static InputStream *input_streams = NULL; static int nb_input_streams = 0; static InputFile *input_files = NULL; static int nb_input_files = 0; static OutputStream *output_streams = NULL; static int nb_output_streams = 0; static OutputFile *output_files = NULL; static int nb_output_files = 0;
其中:
input_streams 是输入流的数组,nb_input_streams是输入流的个数.
InputFile 是输入文件(也可能是设备)的数组,input_files是输入文件的个数.
下面的输出相关的变量们就不用解释了.
可以看出,文件和流是分别保存的.于是,可以想象,结构InputStream中应有其所属的文件在input_files中的序号,结构OutputStream中也应有其所属文件在output_files中的序号.输入流数组应是这样填充的:每当在输入文件中找到一个流时,就把它添加到input_streams中,所以一个输入文件对应的流们在input_streams中是紧靠着的,于是InputFile结构中应有其第一个流在input_streams中的开始序号和被放在input_streams中的流的个数,因为并不是一个输入文件中所有的流都会被转到输出文件中.我们看一下InputFile:
typedef struct InputFile { AVFormatContext *ctx; int eof_reached; /* true if eof reached */ int ist_index; /* index of first stream in input_streams */ int buffer_size; /* current total buffer size */ int64_t ts_offset; int nb_streams; /* number of stream that ffmpeg is aware of; may be different from ctx.nb_streams if new streams appear during av_read_frame() */ int rate_emu; } InputFile;
注意其中的ist_index和nb_streams。
在输出流中,除了要保存其所在的输出文件在output_files中的序号,还应保存其对应的输入流在input_streams中的序号,也应保存其在所属输出文件中的流序号.而输出文件中呢,只需保存它的第一个流在output_streams中的序号,但是为啥不保存输出文件中流的个数呢?我也不知道,但我知道肯定不用保存也不影响实现功能(嘿嘿,相当于没说).
各位看官看到这里应该明白ffmpeg是怎样做到可以把多个文件中的任意个流重新组和到输出文件中了吧?
流和文件都准备好了,下面就是转换,那么转换过程是怎样的呢?还是我来猜一猜吧:
首先打开输入文件们,然后跟据输入流们准备并打开解码器们,然后跟据输出流们准备并打开编码器们,然后创建输出文件们,然后为所有输出文件们写好头部,然后就在循环中把输入流转换到输出流并写入输出文件中,转换完后跳出循环,然后写入文件尾,最后关闭所有的输出文件.
概述就先到这里吧,后面会对几个重要函数做详细分析.

转载地址:http://hwwvx.baihongyu.com/

你可能感兴趣的文章
Facebook正为Internet.org研发毫米波技术
查看>>
人们需要了解的有关闪存缓存的内容
查看>>
NB-IoT/LoRa/eMTC和蓝牙/WiFi互补效应的几个典型案例
查看>>
北京君正:126.22亿收购两家传感器芯片公司 布局智能生态圈
查看>>
《企业软件交付:敏捷与高效管理精要》——2.4 项目背景
查看>>
《人民的名义》霸屏,如何戏里戏外看安防?
查看>>
Runtime 类
查看>>
亲们,不用再创建变更了
查看>>
华为研发投入首破百亿美元
查看>>
投资1500万美元 思科发力SDS和全闪存存储
查看>>
FBI时隔半年再被打脸 研究者轻松破解iPhone 5C
查看>>
浅谈zwave智能家居与zigBee的区别
查看>>
传统监控结合“视频+” 石化领域玩创新
查看>>
调查显示40%的管理员使用Word文档存储密码
查看>>
联合光伏3000万英镑增持6个英国光伏电站
查看>>
报告称苹果的保密文化或导致人才流失 阻碍招聘进程
查看>>
百会CRM:云时代哪些营销模式最好用
查看>>
光伏组件价格跌势未歇 带动中上游供应链续跌
查看>>
智慧武汉地理信息大数据中心上线 比百度地图更全
查看>>
什么模式才是安防渠道商们的未来?
查看>>