FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库。

二、FFmpeg 组成

  • libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
  • libavcodec:用于各种类型声音/图像编解码;
  • libavutil:包含一些公共的工具函数;
  • libswscale:用于视频场景比例缩放、色彩映射转换;
  • libpostproc:用于后期效果处理;
  • ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
  • ffsever:一个 HTTP 多媒体即时广播串流服务器;
  • ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

三、FFmpeg包含类库说明

2.1 类库说明

  • libavformat - 用于各种音视频封装格式的生成和解析,包括获取解码所需信息、读取音视频数据等功能。各种流媒体协议代码(如rtmpproto.c等)以及音视频格式的(解)复用代码(如flvdec.c、flvenc.c等)都位于该目录下。
  • libavcodec - 音视频各种格式的编解码。各种格式的编解码代码(如aacenc.c、aacdec.c等)都位于该目录下。
  • libavutil - 包含一些公共的工具函数的使用库,包括算数运算,字符操作等。
  • libswscale - 提供原始视频的比例缩放、色彩映射转换、图像颜色空间或格式转换的功能。
  • libswresample - 提供音频重采样,采样格式转换和混合等功能。
  • libavfilter - 各种音视频滤波器。
  • libpostproc - 用于后期效果处理,如图像的去块效应等。
  • libavdevice - 用于硬件的音视频采集、加速和显示。

如果您之前没有阅读FFmpeg代码的经验,建议优先阅读libavformat、libavcodec以及libavutil下面的代码,它们提供了音视频开发的最基本功能,应用范围也是最广的。

2.2 常用结构

FFmpeg里面最常用的数据结构,按功能可大致分为以下几类(以下代码行数,以branch: origin/release/3.4为准):

1. 封装格式

  • AVFormatContext - 描述了媒体文件的构成及基本信息,是统领全局的基本结构体,贯穿程序始终,很多函数都要用它作为参数;
  • AVInputFormat - 解复用器对象,每种作为输入的封装格式(例如FLV、MP4、TS等)对应一个该结构体,如libavformat/flvdec.c的ff_flv_demuxer;
  • AVOutputFormat - 复用器对象,每种作为输出的封装格式(例如FLV, MP4、TS等)对应一个该结构体,如libavformat/flvenc.c的ff_flv_muxer;
  • AVStream - 用于描述一个视频/音频流的相关数据信息。

2.编解码

  • AVCodecContext - 描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息;
  • AVCodec - 编解码器对象,每种编解码格式(例如H.264、AAC等)对应一个该结构体,如libavcodec/aacdec.c的ff_aac_decoder。每个AVCodecContext中含有一个AVCodec;
  • AVCodecParameters - 编解码参数,每个AVStream中都含有一个AVCodecParameters,用来存放当前流的编解码参数。

3. 网络协议

  • AVIOContext - 管理输入输出数据的结构体;
  • URLProtocol - 描述了音视频数据传输所使用的协议,每种传输协议(例如HTTP、RTMP)等,都会对应一个URLProtocol结构,如libavformat/http.c中的ff_http_protocol;
  • URLContext - 封装了协议对象及协议操作对象。

4. 数据存放

  • AVPacket - 存放编码后、解码前的压缩数据,即ES数据;
  • AVFrame - 存放编码前、解码后的原始数据,如YUV格式的视频数据或PCM格式的音频数据等;

FFmpeg 学习(一):FFmpeg 简介相关推荐

  1. FFmpeg 学习:FFmpeg 学习整理总结

    一.FFmpeg 播放视频的基本流程整理 播放流程: video.avi(Container) -> 打开得到 Video_Stream -> 读取Packet -> 解析到 Fra ...

  2. 【FFmpeg学习】FFmpeg常见的结构体

    音视频播放的原理主要分为:解协议->解封装->解码->音视频同步->播放. 那 FFmpeg 的解码流程结构体也可以由以上流程进行分类: 解协议(http,rtsp,rtmp, ...

  3. 【FFmpeg学习笔记一】FFmpeg简介

    Fmpeg简介 一.FFmpeg简介 二.FFmpeg函数库 三.FFmpeg用例 四.相关链接 一.FFmpeg简介 FFmpeg是一款自由软件,核心功能就是音视频编解码,其中的"FF&q ...

  4. FFmpeg学习(音视频理论知识)

    文章目录 1. 音视频理论知识 1.1 基本概念 1.1.1 音视频必备的基本概念 常用的视频封装格式 常用的视频编码器 常用的音频编程器: 视频流 裸数据YUV 1.1.2 音视频常见处理 采集 处 ...

  5. FFmpeg学习之八(FFmpeg源码编译)

    FFmpeg学习之八(FFmpeg源码编译) Mac下 FFmpeg源码编译 安装 1. 使用终端安装FFmpeg 2. 手动编译 2.1 编译环境 - Xcode 2.2 安装依赖库 2.3 安装F ...

  6. FFmpeg学习(一)开篇

    文章目录 FFmpeg学习(一)开篇 为什么要学习FFmpeg 1. FFmpeg简介 2. FFmpeg能做什么 3. FFmpeg架构模块组成 3. 1 libavutil 3. 2 libavf ...

  7. linux服务器中学习使用FFmpeg命令overlay滤镜用法

    linux服务器中学习使用FFmpeg命令overlay滤镜用法 1.overlay技术简介 2.命令行用法 2.1 视频中叠加图标 2.1.1 直接叠加图标 2.1.2 延时叠加图标 2.2 视频中 ...

  8. FFmpeg学习之二 (yuv视频渲染)

    FFmpeg学习之二 (yuv视频渲染) yuv简介 1.yuv是什么 2.yuv采集方式 3.yuv存储方式 4.yuv格式 yuv视频渲染 1. iOS YUV视频渲染 1.1 IOS利用open ...

  9. FFmpeg学习(1)开篇

    FFmpeg学习(1)开篇 FFmpeg学习(2)源码编译,环境配置 为什么要学习FFmpeg 本人希望打算深入研究音视频领域,音视频领域的内容很多,我自己打算从几方面循序渐进:FFmpeg常用功能实 ...

  10. FFmpeg学习4:音频格式转换

    前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...

最新文章

  1. deepin系统中.txt文件图标显示内容问题_深度系统Deepin 20最新正式版发布:从DDE到应用全面升级-Deepin 20,深度系统 ——快科技(驱动之家旗下媒体)-...
  2. WebSocket In ASP.NET Core(二)
  3. 前端学习(1754):前端调试值之监控页面重绘的技巧
  4. exchange 2010 relay设定
  5. .Net 让网页列表的前3条显示New图标
  6. Amoeba-mysql开源项目高可用读写分离
  7. 从“运维”处谈OFO失败
  8. iconfont阿里矢量图标库使用说明
  9. 微软私有云分享(R2)9-SCVMM R2和SP1界面的不同
  10. signature=7bfc4e6c1dbcfddf5237122a73885e6d,Bending receiver using heat-shrinkable film
  11. 使用freemarker导出word含图片
  12. Beyong Compare3,4使用
  13. lt18i android 2.3.4典藏版,索尼LT18i一键ROOT教程工具 2.3.4已亲测成功
  14. 分赛区决赛见!2021eBay全国跨境电商创新创业大赛分赛区决赛晋级名单
  15. R语言入门第一集 R语言、RTools、RStudio的简介、安装与使用
  16. Sasha and a Bit of Relax K倍区间 (前缀和异或 前缀和计数 思维)
  17. TCP/IP网络编程(一)
  18. 非投机性的 Web3 用例
  19. 【编程书籍 大系】 计算机开放电子书汇总
  20. USACO 2018 January Contest Platinum A: Lifeguards 题解

热门文章

  1. 苹果笔记本包_扔掉丑不拉几电脑包!这款笔记本包轻薄、商务范,随身带没负担!...
  2. 浅谈需求分析的几个来源。
  3. 油溶性CdS量子点-深紫外发光光谱360nm-460nm
  4. Yii2 Codeception初探之Specify方法
  5. ListView刷新慢 注意点
  6. python输出当前时间戳_如何在Python中获取当前时间戳?
  7. 安装sql2000提示html,SQL Server2000安装时不出现安装界面,进程中存在解决
  8. Python,写校歌
  9. sonar是一款静态代码质量分析工具
  10. 奇怪问题:stray '\200' in program