FFmpeg笔记(一)-- 简介

简介

FFmpeg是一套可以用来记录、处理数字 音频、视频,并将其转换为流的开源框架,采用LPL或GPL许可证,提供了录制、转换以及流化音视频的完整解决方案。它的可移植性或者说跨平台特性非常强大,可以用在Linux服务器、PC(包括Windows、 Mac OS X等)、移动端设备(Android、iOS等移动设备)等平台。名称中的mpeg来自视频编码标准MPEG,而前缀FF是Fast Forward的首字母缩写。

安装

FFmpeg

pod安装(github上的版本比较老,需要最新版本手动去官网下载吧):

pod 'FFmpeg'

手动安装要执行脚本,比较繁琐,自行查找吧,比如 这个,亲测可行。需要注意的是无论手动安装还是pod安装都需要添加关联的系统库(各个版本导入的库可能不一样):
libz.tbd
libbz2.tbd
libiconv.tbd
AudioToolbox.framework
CoreMedia.framework
VideoToolbox.framework
AVFoundation.framework

x264

资源包
执行脚本
将【build-x264.sh】脚本文件放到和资源包同一级目录下,并将资源包名称改为【x264】(这里是为了和脚本内容匹配,具体可以打开脚本文件看【SOURCE】字段的赋值)。
如果报错【No working C compiler found.】执行以下代码:

//如果是i386报这个错直接打开脚本删掉【ARCHS="arm64 x86_64 i386 armv7 armv7s"】中的i386
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/

执行完后的【x264-iOS】就是最终的iOS库。

结构

FFmpeg结构图.png

FFmpeg分为3个命令行工具(笔记二有详细介绍),8个静态库如下:

libavutil:核心工具库,该模块是最基础的模块之一,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。

common.h,ffplay 使用的工具类数据类型定义,宏定义和两个简单的内联函数.
bswap.h,short 和 int 整数类型字节顺序交换,通常和 CPU 大端或小端有关。
rational.h,用两整数精确表示分数。常规的可以用一个 float 或 double 型数来表示分数,但不是精确表示,在需要相对比较 精确计算的时候,为避免非精确表示带来的计算误差,采用两整数来精确表示。
mathematics.h,数学上的缩放运算。为避免计算误差,缩放因子用两整数表示做精确的整数运算。为防止计算溢出,强制转换为 int 64 位整数后计算。
avutil.h,ffplay 基础工具库使用的一些常数和宏的定义。

libavformat:文件格式和协议库,该模块是最重要的模块之一,封装了Protocol层和Demuxer、Muxer层,使得协议和格式对于开发者来说是透明的。

avformat.h,定义识别文件格式和媒体类型库使用的宏、数据结构和函数,通常这些宏、数据结构和函数在此模块内相对全局有效。
allformats.c,简单的注册/初始化函数,把相应的协议,文件格式,解码器等用相应的链表串起来便于查找。
cutils.c,ffplay 文件格式分析模块使用的两个工具类函数,都是对字符串的操作。
file.c,ffplay 把 file 当做类似于 rtsp,rtp,tcp 等协议的一种协议,用 file:前缀标示 file 协议。 URLContext 结构抽象 统一表示这些广义上的协议,对外提供统一的抽象接口。 各具体的广义协议实现文件实现 URLContext 接口。此 文件实现了 file 广义协议的 URLContext 接口。
avio.h,文件读写模块定义的数据结构和函数声明,ffplay 把这些全部放到这个.h 文件中。
avio.c,此文件实现了 URLProtocol 抽象层广义文件操作函数,由于 URLProtocol 是底层其他具体文件 (file,pipe 等) 的简单封装,这一层只是一个中转站,大部分函数都是简单中转到底层的具体实现函数。
aviobuf.c,有缓存的广义文件 ByteIOContext 相关的文件操作,比如 open,read,close,seek 等等。
utils_format.c,识别文件格式和媒体格式部分使用的一些工具类函数。
avidec.c,AVI 文件解析的相关函数。
注意 1:AVI 文件容器媒体数据有两种存放方式,非交织存放和交织存放。交织存放就是音视频数据以帧为最 小 连续单位,相互间隔存放,这样音视频帧互相交织在一起,并且存放的间隔没有特别规定;非交织存放就是把 单 一媒体的所有数据帧连续存放在一起,非交织存放的 avi 文件很少。
注意 2:AVI 文件索引结构 AVIINDEXENTRY 中的 dwChunkOffset 字段指示的偏移有的是相对文件开始字节的 偏 移,有的事相对文件数据块 chunk 的偏移。
注意 3:附带的 avi 测试文件是交织存放的。

libavcodec:编解码库,该模块也是最重要的模块之一,封装了 Codec层,但是有一些Codec是具备自己的License的,FFmpeg是不会默认添加像libx264、FDK-AAC、lame等库的,但是FFmpeg就像一个平台一样,可以将其他的第三方的Codec以插件的方式添加进来,然后为开发者提供统一的接口。

avcodec.h,定义编解码器库使用的宏、数据结构和函数,通常这些宏、数据结构和函数在此模块内相对全局有效。
allcodecs.c,简单的注册/初始化函数,把编解码器用相应的链表串起来便于查找识别。
dsputil.h,定义 dsp 优化限幅运算使用的查找表及其初始化函数。
dsputil.c,定义 dsp 优化限幅运算使用的查找表,实现其初始化函数。
imgconvert_template.h,定义并实现图像颜色空间转换使用的函数和宏。
imgconvert.c,定义并实现图像颜色空间转换使用的函数和宏。
msrle.c,此文件实现微软行程长度压缩算法解码器。
turespeech_data.h,定义 true speed 音频解码器使用的常数。
turespeech.c,实现 true speed 音频解码器。
utils_codec.c,编解码库使用的帮助和工具函数。

libavfilter:音视频滤镜库,该模块提供了包括音频特效和视频特效 的处理,在使用FFmpeg的API进行编解码的过程中,直接使用该模块为 音视频数据做特效处理是非常方便同时也非常高效的一种方式。
libavdevice:输入输出设备库,比如,需要编译出播放声音或者视频的工具ffplay,就需要确保该模块是打开的,同时也需要libSDL的预先编译,因为该设备模块播放声音与播放视频使用的都是libSDL库。
libswresample:该模块可用于音频重采样,可以对数字音频进行声道数、数据格式、采样率等多种基本信息的转换。
libswscale:该模块是将图像进行格式转换的模块,比如,可以将 YUV的数据转换为RGB的数据。
libpostproc:该模块可用于进行后期处理,当我们使用AVFilter的时 候需要打开该模块的开关,因为Filter中会使用到该模块的一些基础函数。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容