FFmpeg不仅提供了ffmpeg、ffplay和ffprobe三个可执行程序,还提供了八个工具库,使得开发者能够调用库里面的函数,从而实现更精准的定制化开发需求。这八个库的名字是avcodec、avdevice、avfilter、avformat、avutil、postproc、swresample、swscale,下面分别对这些库展开介绍。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

1、avcodec

avcodec是FFmpeg的音视频编解码库,它包含了各种音频的编码库和解码库,以及各种视频的编码库和解码库。通过avcodec可以将原始的音视频数据编码为符合某种码流规则的数据压缩包,也可以将数据压缩包按照指定的码流规则解压为原始的音视频数据。尽管avcodec内置了大部分的音视频编解码库,可是有些码流需要集成第三方的编解码库,比如视频格式h264要求集成第三方的x264,视频格式h265要求集成第三方的x265,音频格式mp3要求集成第三方的mp3lame等等,libavcodec目录下的诸多lib***.c代码就是用来集成第三方编解码库的。

2、avdevice

avdevice是FFmpeg的音视频设备库,它包含了音视频的各种输入输出设备库,其中输入设备指的是采集音视频信号的设备,输出设备指的是渲染音视频画面的设备。当然FFmpeg不会直接操作设备硬件,而是通过第三方的软件包去实现,比如采集媒体信号用到了Windows平台的VFW捕捉器(VFW全称Video for Windows),以及VFW的升级版DirectShow捕捉器;渲染媒体画面用到了Windows平台的GDI接收器(GDI全称Graphics Device Interface),以及跨平台的SDL2媒体开发库(SDL全称Simple DirectMedia Layer)。当然,FFmpeg也支持音效处理库OpenAL(全称Open Audio Library)和图形处理库OpenGL(全称Open Graphics Library)。

3、avfilter

avfilter是FFmpeg的音视频滤镜库,它包含了加工编辑音频和视频的各种滤镜包,其中音频滤镜的源码文件名形如af_***.c,视频滤镜的源码文件名形如vf_***.c。音频滤镜多用于调整参数、混合音频等处理,视频滤镜多用于变换视频、特效画面、添加部件等处理。

4、avformat

avformat是FFmpeg的音视频格式库,它包含了各类媒体文件格式库,以及各种网络通讯协议库。其中格式库不仅包含视频格式mp4、avi、mov、rm等,音频格式mp3、wav、aac、pcm等,还包含图像格式比如jpeg、gif、png、yuv等等。协议库不仅包含文件协议file,常规的通讯协议http、ftp、tcp、udp等,还包含流媒体传输协议比如rtsp、rtmp、hls、srt等等。

5、avutil

avutil是FFmpeg的音视频工具库,它包含了常见的通用工具和各类算法库,其中通用工具包括字典操作、日志记录、缓存交互、线程处理,以及加解密库aes、md5、sha、base64、等;各类算法包括排队算法fifo、排序算法qsort、哈希表hash、二叉树tree等等。除此以外,avutil也囊括了色彩空间、音频采样等方面的公共函数。

6、postproc

postproc是FFmpeg的音视频后期效果处理库,它主要用于进行后期的效果处理,如果代码中使用了滤镜,编译时就要链接这个库,因为滤镜用到了postproc的一些基础函数。

7、swresample

swresample是FFmpeg的音频重采样库,它主要用于音频重采样的相关功能,比如把音频从单声道变为多声道,变更音频的采样频率,转换音频的数据格式等等。

8、swscale

swscale是FFmpeg的视频图像转换库,它主要用于图像缩放、色彩空间转换等功能,其中色彩空间转换有时也被称作像素格式转换,比如把视频帧从YUV格式转换为RGB格式。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

FFmpeg开发笔记(四)FFmpeg的动态链接库介绍的更多相关文章

  1. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  2. FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

    前言   本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8.   FFmpeg简介   FFmpeg是领先的多媒体框架,能够解码 ...

  3. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  5. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  6. Django开发笔记四

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...

  7. FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库.不过考虑到刚开始仅仅调用 ...

  8. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. ffmpeg学习笔记-初识ffmpeg

    ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...

  10. FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...

随机推荐

  1. 从零开始的react入门教程(十一),react ref 详解,三种写法与 ref 转发(传递)

    壹 ❀ 引 在前面的文章中,我们介绍了react的状态提升,随之引出了redux以及context,其实都说到底都是为了方便管理react的状态,让数据交互与组件通信变得更为简单.我们知道,react ...

  2. JS leetcode 反转字符串 题解分析

    壹 ❀ 引 今天做的一道题非常简单,原题来自leetcode第344题反转字符串,题目如下: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外 ...

  3. ORACLE ROLLUP和CUBE介绍

    http://blog.csdn.net/wanghai__/article/details/4817920 ------------------ ROLLUP,是GROUP BY子句的一种扩展,可以 ...

  4. 《系列二》-- 5、单例bean缓存的获取

    目录 1 判断bean是否完成整个加载流程 2 判断当前bean是否被加载过,是否已作为提前暴露的bean 关于循环依赖 阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内 ...

  5. windbg 分析 32 位进程的 64 位转储文件

    场景: x86 的项目在 x64 的 windows 机器上运行时出现未响应的情况,使用任务管理器创建该进程的转储文件 因为项目是 32 位的,所以使用 x86 的 windbg 来调试 dmp 文件 ...

  6. 循环掌控:深入理解C语言循环结构,高效实现重复性任务

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 引言 前面贝蒂带大家了解了选择结构,今天就来为大家介绍循环结构,也就是我们熟悉的while ...

  7. Linux驱动开发笔记(三):基于ubuntu的helloworld驱动源码编写、makefile编写以及驱动编译加载流程测试

    前言   前面学习了驱动的基础框架,上一篇编译了gcc7.3.0,那么为了方便很好的熟悉流程,本篇,将使用ubuntu18.04,直接编译ubuntu18.04的驱动,然后做好本篇文章的相关实战测试. ...

  8. 【Azure 环境】调用Azure RunCommand 的REST API 设置虚拟机的环境变量(SetEnvironmentVariable)

    问题描述 在Azure VM的门户页面中,可以通过 RunPowerShellScript来执行PowerShell脚本,如下图: 那么,如何使用REST API 在Azure VM中执行PowerS ...

  9. GenAI助力DevOps,塑造软件工程的未来

    自 2022 年以来,GenAI 无疑已成为一种普遍的技术趋势.在本文中,我们将探索 DevOps 中令人兴奋的 GenAI 领域,讨论其潜在优势.局限性.新兴趋势和最佳实践,深入了解 AI 支持的 ...

  10. 自定义ConditionalOnXX注解(二)

    一.前言 在之前的文章<自定义ConditionalOnXX注解>中,介绍了Conditional注解的实现原理和实现自定义Conditional注解的基础方法,但是有些场景我们需要用一个 ...