FFmpeg开发笔记(四)FFmpeg的动态链接库介绍
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的动态链接库介绍的更多相关文章
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- Django开发笔记四
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...
- FFmpeg开发笔记(一)搭建Linux系统的开发环境
对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库.不过考虑到刚开始仅仅调用 ...
- SDL开发笔记(二):音频基础介绍、使用SDL播放音频
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- ffmpeg学习笔记-初识ffmpeg
ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...
- FFmpeg开发笔记(二)搭建Windows系统的开发环境
由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...
随机推荐
- 从零开始的react入门教程(十),快速上手react-redux,相对于redux它究竟简化了什么?
壹 ❀ 引 在前面两篇文章中,我们介绍了redux与context部分概念与基本用法,这里我们做个简单复习. redux属于应用数据流框架,主要用于应用状态的管理,比如react中的state.其数据 ...
- JS Leetcode 530. 二叉搜索树的最小绝对差 题解分析,再次了解中序遍历
壹 ❀ 引 本题来自LeetCode 783. 二叉搜索树节点最小距离,题目描述如下: 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例 1: 输入:root ...
- 深入理解Go语言(08):sync.WaitGroup源码分析
一.sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务 ...
- dpt-shell 抽取壳实现原理分析(加壳逻辑)
开源项目位置(为大佬开源精神点赞) https://github.com/luoyesiqiu/dpt-shell 抽取壳分为两个步骤 加壳逻辑: 一 对apk进行解析,将codeItem抽出到一个文 ...
- 【Android逆向】某小说网站签名破解
1. 豌豆荚下载v5.4的版本 2. 参考前面两篇文章进行反编译和重打包后,安装到手机发现会有验签失败的报错 抓取log 03-29 16:15:37.545 25910 26539 D KM-NAT ...
- Windows11补丁更新后无法使用Wifi和蓝牙
最近在我的ThinkPAD T14上更新了Windows 11补丁,重启后Wifi和蓝牙鼠标都不能使用了,无法连接Wifi网络,也无法添加蓝牙设备. 使用厂家自带的管理工具查看驱动都是最新的,一度不知 ...
- 如何渲染最原始的yuv视频数据?
一.整体思路 我们在用纹理增加细节那篇文章中提到过,要将图片渲染在屏幕上,首先要拿到图片的像素数组数据,然后将像素数组数据通过纹理单元传递到片段着色器中,最后通过纹理采样函数将纹理中对应坐标的颜色值采 ...
- django中的一些装饰器用法
1.require_http_methods() 1.要求视图只接受特定的请求方法 2.该装饰器允许传递多个请求方法参数,以列表的形式,请求方法名要大写 from django.views.decor ...
- java学生管理系统(界面版)
运行截图 项目说明: 本系统界面我个人就从简设计了,本来打算使用windowbuilder插件设计的,可想到使用windowbuilder插件之后导致代码冗余,会影响到代码可读性,可能对小白不友好.虽 ...
- 使用beyond compare或kompare作为git的对比、合并工具
两种方法 方法1: 直接使用命令 # 执行下面命令,参看支持对比合并工具名称,比如bc就是指beyond compare(收费软件,推荐使用开源的kompare) $ git difftool --t ...