FFMEPG
结构说明
1.1 》介绍
ffmpeg(Fast Forward Moving Pictures Experts Group) 是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是 libavcodec 库,是一个集录制、转换、音 / 视频编码解码功 能为一体的完整的开源解决方案。 ffmpeg 的开发是基于 Linux 操作系统,但是可以在大多数操作系统中编译和使用。 FFmpeg 支持 MPEG 、 DivX 、 MPEG4 、 AC3 、 DV 、 FLV 等 40 多种编码, AVI 、 MPEG 、 OGG 、 Matroska 、 ASF 等 90 多种解码 . TCPMP, VLC, MPlayer 等开源播放器都用到了 FFmpeg 。
ffmpeg 主目录下主要有 libavcodec 、 libavformat 和 libavutil 等子目录。其中
libavcodec 用于存放各个 encode/decode 模块, CODEC 其实是 Coder/Decoder 的缩写,也就是编码解码器;用于各种类型声音 / 图像编解码
libavformat 用于存放 muxer/demuxer 模块,对音频视频格式的解析 ; 用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
其中库 libavcodec , libavformat 用于对媒体文件进行处理,如格式的转换;
libavutil 集项工具,包含一些公共的工具函数;用于存放内存操作等辅助性模块,是一个通用的小型函数库,该库中实现了 CRC 校验码的产生, 128 位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能
libavdevice :对输出输入设备的支持;
libpostproc :用于后期效果处理;
libswscale :用于视频场景比例缩放、色彩映射转换;
ffmpeg :该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
fsever :一个 HTTP 多媒体即时广播串流服务器;
ffplay :是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示;
ffmpeg 软件包经编译过后将生成三个可执行文件, ffmpeg , ffserver , ffplay 。其中 ffmpeg 用于对媒体文件进行处理, ffserver 是一个 http 的流媒体服务器, ffplay 是一个基于 SDL 的简单播放器。
说明:
muxer/demuxer 和 encoder/decoder 的区别:
最大的差别是 muxer 和 demuxer 分别是不同的结构 AVOutputFormat 与 AVInputFormat ;
而 encoder 和 decoder 都是用的 AVCodec 结构。
muxer/demuxer 是分别保存在全局变量 AVOutputFormat *first_oformat 与 AVInputFormat *first_iformat 中的。 encoder/decoder 都是保存在全局变量 AVCodec *first_avcodec 中的。
muxer/demuxer 和 encoder/decoder 的相同之处:
都是在 main() 开始的 av_register_all() 函数内初始化的
都是以链表的形式保存在全局变量中的
都用函数指针的方式作为开放的公共接口
1.1 》介绍
ffmpeg(Fast Forward Moving Pictures Experts Group) 是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是 libavcodec 库,是一个集录制、转换、音 / 视频编码解码功 能为一体的完整的开源解决方案。 ffmpeg 的开发是基于 Linux 操作系统,但是可以在大多数操作系统中编译和使用。 FFmpeg 支持 MPEG 、 DivX 、 MPEG4 、 AC3 、 DV 、 FLV 等 40 多种编码, AVI 、 MPEG 、 OGG 、 Matroska 、 ASF 等 90 多种解码 . TCPMP, VLC, MPlayer 等开源播放器都用到了 FFmpeg 。
ffmpeg 主目录下主要有 libavcodec 、 libavformat 和 libavutil 等子目录。其中
libavcodec 用于存放各个 encode/decode 模块, CODEC 其实是 Coder/Decoder 的缩写,也就是编码解码器;用于各种类型声音 / 图像编解码
libavformat 用于存放 muxer/demuxer 模块,对音频视频格式的解析 ; 用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
其中库 libavcodec , libavformat 用于对媒体文件进行处理,如格式的转换;
libavutil 集项工具,包含一些公共的工具函数;用于存放内存操作等辅助性模块,是一个通用的小型函数库,该库中实现了 CRC 校验码的产生, 128 位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能
libavdevice :对输出输入设备的支持;
libpostproc :用于后期效果处理;
libswscale :用于视频场景比例缩放、色彩映射转换;
ffmpeg :该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
fsever :一个 HTTP 多媒体即时广播串流服务器;
ffplay :是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示;
ffmpeg 软件包经编译过后将生成三个可执行文件, ffmpeg , ffserver , ffplay 。其中 ffmpeg 用于对媒体文件进行处理, ffserver 是一个 http 的流媒体服务器, ffplay 是一个基于 SDL 的简单播放器。
说明:
muxer/demuxer 和 encoder/decoder 的区别:
最大的差别是 muxer 和 demuxer 分别是不同的结构 AVOutputFormat 与 AVInputFormat ;
而 encoder 和 decoder 都是用的 AVCodec 结构。
muxer/demuxer 是分别保存在全局变量 AVOutputFormat *first_oformat 与 AVInputFormat *first_iformat 中的。 encoder/decoder 都是保存在全局变量 AVCodec *first_avcodec 中的。
muxer/demuxer 和 encoder/decoder 的相同之处:
都是在 main() 开始的 av_register_all() 函数内初始化的
都是以链表的形式保存在全局变量中的
都用函数指针的方式作为开放的公共接口