版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.12.31 |
前言
FFMPEG
是一个多媒体转码、音视频流化传输的一个第三方开源框架,并且这个第三方库是基于C语言的。 iOS平台下的ffmpeg主要包括以下一些功能:影音的解码、编码、编码转换、混合、抽取、串流和滤镜。
Overview
这是一个为iOS和tvOS应用程序构建FFmpeg
库的shell
脚本。
FFmpeg在Linux
平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard
发起,2004年至2015年间由Michael Niedermayer
主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"
。
使用FFMPEG作为内核视频播放器:
Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...
使用FFMPEG作为内核的Directshow Filter:
ffdshow,lav filters...
使用FFMPEG作为内核的转码工具:
ffmpeg,格式工厂...
事实上,FFMPEG的视音频编解码功能确实太强大了,几乎囊括了现存所有的视音频编码标准,因此只要做视音频开发,几乎离不开它。
对于完全没有视音频技术背景的人来说,在学习FFmpeg之前最好先了解一下几种最基本的视音频数据的格式,可以参考下面的文章:
- [总结]视音频编解码技术零基础学习方法
- 视音频数据处理入门:RGB、YUV像素数据处理
- 视音频数据处理入门:PCM音频采样数据处理
- 视音频数据处理入门:H.264视频码流解析
- 视音频数据处理入门:AAC音频码流解析
- 视音频数据处理入门:FLV封装格式解析
- 视音频数据处理入门:UDP-RTP协议解析
感兴趣的可以参考下面这个大神的博客,我看了下,他总结的很全面很深入,想要学习的话可以关注他,我这里列出来的很多参考文章,也是他写的或者他来出来的。
相关结构体的研究
ffmpeg的结构体之间的关系参考文章
结构体中每个变量的分析,参考文章:
- FFMPEG结构体分析:AVFrame
- FFMPEG结构体分析:AVFormatContext
- FFMPEG结构体分析:AVCodecContext
- FFMPEG结构体分析:AVIOContext
- FFMPEG结构体分析:AVCodec
- FFMPEG结构体分析:AVStream
- FFMPEG结构体分析:AVPacket
Requirements
- https://github.com/libav/gas-preprocessor
- yasm 1.2.0
Usage
使用build-ffmpeg-tvos.sh
用于tvOS。
- To build everything:
./build-ffmpeg.sh
- To build arm64 libraries:
./build-ffmpeg.sh arm64
- To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
- To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
下载
您可以下载FFmpeg 3.4发行版的二进制文件https://downloads.sourceforge.net/project/ffmpeg-ios/ffmpeg-ios-master.tar.bz2
External libraries - 外部链接库
你应该加下面的库
libz.dylib
libbz2.dylib
libiconv.dylib
Influences
参考文章
1. [总结]FFMPEG视音频编解码零基础学习方法
2.《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频
3. 官方网站
4. ffmpeg参数中文详细解释
5. ffmpeg.exe详细的使用说明英文
6. ffplay的快捷键以及选项
7. ffplay英文详细使用说明
8. ffprobe.exe英文详细使用说明
ffmpeg库的配置
1. 下载地址
2. FFMPEG 库移植到 VC 需要的步骤
3. 最简单的基于FFMPEG+SDL的视频播放器
视频播放器
1. 100行代码实现最简单的基于FFMPEG+SDL的视频播放器
2. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)
3. 最简单的基于FFmpeg的解码器-纯净版(不包含libavformat)
4. ffmpeg函数介绍
5. SDL介绍
6. SDL GUIDE 中文译本
7. YUV播放器源代码
8. YUV Player Deluxe
音频播放器
1. 最简单的基于FFMPEG+SDL的音频播放器
2. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)
ffplay播放器
1. FFplay源代码分析:整体流程图
2. 100行代码实现最简单的基于FFMPEG+SDL的视频播放器
3. 如何用FFmpeg编写一个简单播放器
4. ffplay的快捷键以及选项
5. ffplay_vc2005
6. ffplay播放器移植VC的工程:ffplay for MFC
7. ffplay for mfc 代码备忘
8. ffplay.c函数结构简单分析(画图)
编码
ffmpeg编码我自己研究的不是很多,可以参考文章:
上面那篇文章是用的类库比较旧,新版类库的的使用可以参考下面几篇文章。
- 图像的编码可以参考:最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)
- 音频的编码可以参考:最简单的基于FFMPEG的音频编码器(PCM编码为AAC)
- 视频的编码可以参考:最简单的基于FFMPEG的视频编码器(YUV编码为H.264)
- HEVC(H.265)视频编码可以参考:最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))
上述编码器使用libavformat和libavcodec两个类库完成了视频的编码工作。实际上编码工作只需要libavcodec就可以了。因此更新了一个“纯净”的编码器。该编码器只使用libavcodec完成编码工作: 最简单的基于FFmpeg的编码器-纯净版(不包含libavformat)
转码
转码实际上是先解码然后编码。
不进行转码,只进行封装格式转换的程序可参考:最简单的基于FFMPEG的封装格式转换器(无编解码)
转码程序可参考:最简单的基于FFMPEG的转码程序
比较复杂的转码程序可以参考ffmpeg.c,它移植到MFC下的工程:ffmpeg转码器移植VC的工程:ffmpeg for MFC
ffmpeg.c函数结构简单分析:ffmpeg.c函数结构简单分析(画图)
ffmpeg源代码分析
【架构图】
FFmpeg源代码结构图 - 解码
FFmpeg源代码结构图 -编码
【通用】
FFmpeg源代码简单分析:av_register_all()
FFmpeg源代码简单分析:avcodec_register_all()
FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
FFmpeg源代码简单分析:avio_open2()
FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
FFmpeg源代码简单分析:avcodec_open2()
FFmpeg源代码简单分析:avcodec_close()
【解码】
图解FFMPEG打开媒体的函数avformat_open_input
FFmpeg源代码简单分析:avformat_open_input()
FFmpeg源代码简单分析:avformat_find_stream_info()
FFmpeg源代码简单分析:av_read_frame()
FFmpeg源代码简单分析:avcodec_decode_video2()
FFmpeg源代码简单分析:avformat_close_input()
【编码】
FFmpeg源代码简单分析:avformat_alloc_output_context2()
FFmpeg源代码简单分析:avformat_write_header()
FFmpeg源代码简单分析:avcodec_encode_video()
FFmpeg源代码简单分析:av_write_frame()
FFmpeg源代码简单分析:av_write_trailer()
【其它】
FFmpeg源代码简单分析:日志输出系统(av_log()等)
FFmpeg源代码简单分析:结构体成员管理系统-AVClass
FFmpeg源代码简单分析:结构体成员管理系统-AVOption
FFmpeg源代码简单分析:libswscale的sws_getContext()
FFmpeg源代码简单分析:libswscale的sws_scale()
FFmpeg源代码简单分析:libavdevice的avdevice_register_all()
FFmpeg源代码简单分析:libavdevice的gdigrab
【脚本】
FFmpeg源代码简单分析:makefile
FFmpeg源代码简单分析:configure
偏底层的libavcodec的源代码分析文章列表如下:
【解码- libavcodec H.264 解码器】
FFmpeg的H.264解码器源代码简单分析:概述
FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分
FFmpeg的H.264解码器源代码简单分析:解码器主干部分
FFmpeg的H.264解码器源代码简单分析:熵解码(EntropyDecoding)部分
FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
FFmpeg的H.264解码器源代码简单分析:环路滤波(LoopFilter)部分
【解码-libavcodec HEVC 解码器】
FFmpeg的HEVC解码器源代码简单分析:概述
FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分
FFmpeg的HEVC解码器源代码简单分析:解码器主干部分
FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTUDecode)部分-PU
FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU
FFmpeg的HEVC解码器源代码简单分析:环路滤波(LoopFilter)
后记
未完,待续~~~