logo资料库

FFMpeg_FFPlay 源码剖析(杨书良).pdf

第1页 / 共234页
第2页 / 共234页
第3页 / 共234页
第4页 / 共234页
第5页 / 共234页
第6页 / 共234页
第7页 / 共234页
第8页 / 共234页
资料共234页,剩余部分请下载后查看
目录
前言
第一章概述
1.1ffplay文件概览
1.2播放器一般原理
1.3ffplay播放器原理
1.4ffplay架构概述
1.5ffplay主要改动
1.6SDL显示视频
1.7SDL播放音频
1.8AVI文件格式简介
1.9MSRLE压缩算法简介
1.10TrueSpeech压缩算法简介
第二章libavutil剖析
2.1文件列表
2.2common.h文件
2.2.1功能描述
2.2.2文件注释
2.3bswap.h文件
2.3.1功能描述
2.3.2文件注释
2.4rational.h文件
2.4.1功能描述
2.4.2文件注释
2.5mathematics.h文件
2.5.1功能描述
2.5.2文件注释
2.6avutil.h文件
2.6.1功能描述
2.6.2文件注释
第三章libavformat剖析
3.1文件列表
3.2avformat.h文件
3.2.1功能描述
3.2.2文件注释
3.3allformat.c文件
3.3.1功能描述
3.3.2文件注释
3.4cutils.c文件
3.4.1功能描述
3.4.2文件注释
3.5file.c文件
3.5.1功能描述
3.5.2文件注释
3.6avio.h文件
3.6.1功能描述
3.6.2文件注释
3.7avio.c文件
3.7.1功能描述
3.7.2文件注释
3.8aviobuf.c文件
3.8.1功能描述
3.8.2文件注释
3.9utils_format.c文件
3.9.1功能描述
3.9.2文件注释
3.10avidec.c文件
3.10.1功能描述
3.10.2文件注释
第四章libavcodec剖析
4.1文件列表
4.2avcodec.h文件
4.2.1功能描述
4.2.2文件注释
4.3allcodec.c文件
4.3.1功能描述
4.3.2文件注释
4.4dsputil.h文件
4.4.1功能描述
4.4.2文件注释
4.5dsputil.c文件
4.5.1功能描述
4.5.2文件注释
4.6utils_codec.c文件
4.6.1功能描述
4.6.2文件注释
4.7imgconvert_template.h文件
4.7.1功能描述
4.7.2文件注释
4.8imgconvert.c文件
4.8.1功能描述
4.8.2文件注释
4.9msrle.c文件
4.9.1功能描述
4.9.2文件注释
4.10turespeech_data.h文件
4.10.1功能描述
4.10.2文件注释
4.11turespeech.c文件
4.11.1功能描述
4.11.2文件注释
第五章ffplay剖析
5.1文件列表
5.2berrno.h文件
5.2.1功能描述
5.2.2文件注释
5.3ffplay.c文件
5.3.1功能描述
5.3.2文件注释
FFMPEG/FFPLAY FFMPEG/FFPLAY FFMPEG/FFPLAY FFMPEG/FFPLAY 源 码 剖 析 作 者:::: 杨 书 良
FFMPEG/FFPLAY 源码剖析 第 2 页 共 234 页 前 言......................................................................................................................................................................................5 第一章 概述......................................................................................................................................................................... 7 1.1 ffplay 文件概览.........................................................................................................................................................7 1.2 播放器一般原理....................................................................................................................................................... 8 1.3 ffplay 播放器原理.....................................................................................................................................................9 1.4 ffplay 架构概述.......................................................................................................................................................10 1.5 ffplay 主要改动.......................................................................................................................................................20 1.6 SDL 显示视频.........................................................................................................................................................20 1.7 SDL 播放音频.........................................................................................................................................................21 1.8 AVI 文件格式简介..................................................................................................................................................22 1.9 MS RLE 压缩算法简介..........................................................................................................................................24 1.10 True Speech 压缩算法简介................................................................................................................................. 25 第二章 libavutil 剖析.........................................................................................................................................................26 2.1 文件列表................................................................................................................................................................. 26 2.2 common.h 文件....................................................................................................................................................... 26 2.2.1 功能描述...................................................................................................................................................... 26 2.2.2 文件注释...................................................................................................................................................... 26 2.3 bswap.h 文件...........................................................................................................................................................29 2.3.1 功能描述...................................................................................................................................................... 29 2.3.2 文件注释...................................................................................................................................................... 29 2.4 rational.h 文件.........................................................................................................................................................30 2.4.1 功能描述...................................................................................................................................................... 30 2.4.2 文件注释...................................................................................................................................................... 30 2.5 mathematics.h 文件.................................................................................................................................................31 2.5.1 功能描述...................................................................................................................................................... 31 2.5.2 文件注释...................................................................................................................................................... 31 2.6 avutil.h 文件............................................................................................................................................................ 32 2.6.1 功能描述...................................................................................................................................................... 32 2.6.2 文件注释...................................................................................................................................................... 32 第三章 libavformat 剖析....................................................................................................................................................34 3.1 文件列表................................................................................................................................................................. 34 3.2 avformat.h 文件.......................................................................................................................................................34 3.2.1 功能描述...................................................................................................................................................... 34 3.2.2 文件注释...................................................................................................................................................... 34 3.3 allformat.c 文件.......................................................................................................................................................41 3.3.1 功能描述...................................................................................................................................................... 41 3.3.2 文件注释...................................................................................................................................................... 41 3.4 cutils.c 文件.............................................................................................................................................................42 3.4.1 功能描述...................................................................................................................................................... 42 3.4.2 文件注释...................................................................................................................................................... 42 3.5 file.c 文件................................................................................................................................................................ 44 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第 3 页 共 234 页 3.5.1 功能描述...................................................................................................................................................... 44 3.5.2 文件注释...................................................................................................................................................... 44 3.6 avio.h 文件.............................................................................................................................................................. 47 3.6.1 功能描述...................................................................................................................................................... 47 3.6.2 文件注释...................................................................................................................................................... 47 3.7 avio.c 文件..............................................................................................................................................................50 3.7.1 功能描述...................................................................................................................................................... 50 3.7.2 文件注释...................................................................................................................................................... 50 3.8 aviobuf.c 文件......................................................................................................................................................... 54 3.8.1 功能描述...................................................................................................................................................... 54 3.8.2 文件注释...................................................................................................................................................... 54 3.9 utils_format.c 文件..................................................................................................................................................65 3.9.1 功能描述...................................................................................................................................................... 65 3.9.2 文件注释...................................................................................................................................................... 65 3.10 avidec.c 文件.........................................................................................................................................................77 3.10.1 功能描述.................................................................................................................................................... 77 3.10.2 文件注释.................................................................................................................................................... 77 第四章 libavcodec 剖析...................................................................................................................................................101 4.1 文件列表............................................................................................................................................................... 101 4.2 avcodec.h 文件...................................................................................................................................................... 101 4.2.1 功能描述.................................................................................................................................................... 101 4.2.2 文件注释.................................................................................................................................................... 101 4.3 allcodec.c 文件...................................................................................................................................................... 107 4.3.1 功能描述.................................................................................................................................................... 107 4.3.2 文件注释.................................................................................................................................................... 107 4.4 dsputil.h 文件........................................................................................................................................................ 108 4.4.1 功能描述.................................................................................................................................................... 108 4.4.2 文件注释.................................................................................................................................................... 108 4.5 dsputil.c 文件.........................................................................................................................................................109 4.5.1 功能描述.................................................................................................................................................... 109 4.5.2 文件注释.................................................................................................................................................... 109 4.6 utils_codec.c 文件................................................................................................................................................. 110 4.6.1 功能描述.................................................................................................................................................... 110 4.6.2 文件注释.................................................................................................................................................... 110 4.7 imgconvert_template.h 文件.................................................................................................................................123 4.7.1 功能描述.................................................................................................................................................... 123 4.7.2 文件注释.................................................................................................................................................... 123 4.8 imgconvert.c 文件................................................................................................................................................. 145 4.8.1 功能描述.................................................................................................................................................... 145 4.8.2 文件注释.................................................................................................................................................... 145 4.9 msrle.c 文件...........................................................................................................................................................188 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第 4 页 共 234 页 4.9.1 功能描述.................................................................................................................................................... 188 4.9.2 文件注释.................................................................................................................................................... 188 4.10 turespeech_data.h 文件....................................................................................................................................... 196 4.10.1 功能描述.................................................................................................................................................. 196 4.10.2 文件注释.................................................................................................................................................. 196 4.11 turespeech.c 文件................................................................................................................................................ 200 4.11.1 功能描述.................................................................................................................................................. 200 4.11.2 文件注释.................................................................................................................................................. 200 第五章 ffplay 剖析...........................................................................................................................................................210 5.1 文件列表............................................................................................................................................................... 210 5.2 berrno.h 文件.........................................................................................................................................................210 5.2.1 功能描述.................................................................................................................................................... 210 5.2.2 文件注释.................................................................................................................................................... 210 5.3 ffplay.c 文件.......................................................................................................................................................... 212 5.3.1 功能描述.................................................................................................................................................... 212 5.3.2 文件注释.................................................................................................................................................... 212 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第 5 页 共 234 页 前 言 古有"民以食为天",今有"民以玩为天",当今各种各样的电子产品的影音娱乐功能越来越强悍,或者说影音 娱乐功能推着各种各样的电子产品大踏步前进,于是很多有心人开始研究学习当今世界上开源多媒体领域的老祖 宗和超级王者 ffmpeg。Linux 平台上就不用说了,ffmpeg 一统天下,虽然也有一些其他的类似产品问世,但都是 使用 ffmpeg 的内核,外挂包装层或外挂界面层的系统架构,无一例外。Windows 平台上虽然有其他的类似产品, 但是使用 ffmpeg 内核的知名产品也不少,还有一些不幸上了 ffmpeg 的耻辱名单。 站在巨人的肩膀上,自然看得更高看得更远,但是 ffmpeg 是一个非常庞大的系统,几乎实现了当今世界上 所有的多媒体编码解码,通吃所有的影音娱乐媒体文件,自然而然地,fmpeg 定义的结构繁多,并且定义的结构 多半都是超级复杂,想要透彻理解并站上 ffmpeg 的肩膀非常的不容易。 虽然在网上可以找到一些开发参考资料,但是多半仅停留在源代码的编译步骤,API 的使用介绍,简单的移 植方法,还有一些原理性的介绍。当然有总比没有强,但是看着那些资料,总是一种隔靴搔痒的感觉,虽然也可 以编译成功,也可以播放一些影音媒体文件,或者还可以做一个调用 ffmpeg dll 文件或者 exe 文件的客户端,做 来做去最多也就仅仅只做一个简单的外包装。仅停留在外包装层面上,对 ffmpeg 本身的实现代码并没有什么深 入理解。 本书深入 ffmpeg 的内核,在源代码的实现水平上来理解它,是目前国内第一本详细讲解 ffmpeg 源代码方面 的书,填补这方面的空白。由于 ffmpeg 的体系结构过于庞大,并且很多视音频编码解码算法都归各商业公司私 有,从公共的途径很难获得相关资料,因此本书精挑细选只保留一个视频算法和一个音频算法,其他的视音频算 法都删掉,并且只关注解码而删掉编码相关的代码。这样瘦身处理后, ffmpeg 是相当的苗条,除了视音频编解 码算法的具体实现外,其他的都保留,仍不失其完整性。这样不仅可以学习理解 ffmpeg 的精华,还大大降低了 学习的门槛,可以节省相关工程师 6 个月到 3 个月的研习时间。 附带的源代码在 VS2005 和 VC6 上编译通过,但注意不要开启 VC6 的优化功能或者打 VC6 的补丁。 附带的测试文件因为原始媒体文件分辨率为 321x321 太怪怪,是作者经过比较复杂的流程转压缩转压缩 为 320x320 分辨率(对此媒体文件,常规的转压缩方法失真太大)。 本书为准备研究学习 ffmpeg 的读者而写,需要读者了解一些播放器相关的概念,了解 C 语言,一些阅读源 码的功底。本书不严格区分 ffmpeg 和 ffplay,ffplay 有时特指瘦身后的 ffmpeg,有时候混用。 由于作者才学疏浅,ffmpeg 超级庞大复杂,理解难免有误,还请各位网友热心指正。 杨书良 20110110 上海 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第 6 页 共 234 页 版权说明 作者保留本电子书修改和正式出版的所有权利。最终读者可以自由复制和传播本电子书,但 不得修改其内容 , 并且要保证内容的完整性,注明出处是一个值得鼓励的好习惯。 版权所有(C), 2011 杨书良 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第一章 概述 ffplay 1.11.11.11.1 ffplay ffplay 文件概览文件概览文件概览文件概览 ffplay 第 7 页 共 234 页 首先我们来暴增一下研习信心。 ffmpeg 经作者瘦身处理后的,但保持了原有的架构和完整性,经统计仅包 括 26 个.h 和.c 文件,约 5600 行代码,总大小约 176k,相对于原来约十兆的源码包,那可是不一般的小巧,研 习的信心是不是超级暴增? 我们再来扫描一下所有目录和所有文件,目录结构和原来的一样,只是每个目录下的文件删减了很多,如下 图所示,右边是对每个文件的简单描述。由此,对 ffmpeg 有一个整体的感官,其实 ffmpeg 也可以很小巧,走捷 径研习也可以很简单,并不是想象中的那么难。 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
FFMPEG/FFPLAY 源码剖析 第 8 页 共 234 页 1.21.21.21.2 播放器一般原理 播放器一般原理 播放器一般原理 播放器一般原理 再接再厉,我们开始学习解码器通用的一些原理性知识,用 Windows DirectShow 的工具 GraphEdit 打开附 带的测试文件,可以直观的看到播放这个媒体文件的基本模块,七个模块按广度顺序:读文件模块,解复用模块 , 视频解码模块,音频解码音频,颜色空间转换模块,视频显示模块,音频播放模块。 按照 DirectShow 的术语,一个模块叫做一个 filter(过滤器),模块的输入输出口叫做 pin(管脚),有 input pin 和 output pin 两种;第一个 filter 叫做 Source filter,每种媒体最后一个 filter 叫做 Sink filter,象下图所示连成串的所 有 filter 组成一个 Graph。媒体文件的数据就像流水一样在 Graph 中流动,各个相关的 filter 各负其责,最后我们 就看到了视频,也听到了声音。 DirectShow 中和播放器有关的 filter 粗略的分为五类,分别是 Source filer, Demux flter, Decoder filter, Color Space converter filter,Render filter,各类 filter 的功能与作用简述如下: Source filter 源过滤器的作用是为下级 demux filter 以包的形式源源不断的提供数据流。在通常情况下,我们 有多种方式可以获得数据流,一种是从本地文件中读取,一种是从网上获取,Sourcefilter 另外一个作用就是屏蔽 读本地文件和获取网络数据的差别,在下一级的 demux filter 看来,本地文件和网络数据是一样的。 Demux filter 解复用过滤器的作用是识别文件类型,媒体类型,分离出各媒体原始数据流,打上时钟信息后 送给下级 decoder filter。为识别出不同的文件类型和媒体类型,常规的做法是读取一部分数据,然后遍历解复用 过滤器支持的文件格式和媒体数据格式,做匹配来确定是哪种文件类型,哪种媒体类型;有些媒体类型的原始数 据外面还有其他的信息,比如时间,包大小,是否完整包等等。 demux filter 解析数据包后取出原始数据,有些 类型的媒体不管是否是完整包都立即送往下级 decoder filter,有些类型的媒体要送完整数据包,此时可能有一些 数据包拼接的动作;当然时钟信息的计算也是 demux filter 的工作内容,这个时钟用于各媒体之间的同步。在本 感恩的心,感谢生命中的每一个人! mcodec.cnblogs.com tslking@tom.com
分享到:
收藏