FFmpeg开发笔记搭建Linux系统的开发环境

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

不过考虑到刚开始仅仅调用FFmpeg的API,不会马上去改FFmpeg的源码,因此只要给系统安装编译好的FFmpeg动态库,即可着手编写简单的FFmpeg程序。比如这个网站https://github.com/BtbN/FFmpeg-Builds/releases提供了已经编译通过的FFmpeg开发包,囊括Linux、Windows等系统环境的开发版本。对该网站提供的Linux版FFmpeg安装包而言,需要事先安装不低于2.22版本的glibc库,否则编译FFmpeg程序会报错"undefined reference to `_ZGVdN4vv_pow@GLIBC_2.22'"。下面介绍在Linux系统安装已编译的FFmpeg详细步骤。

一、安装glibc

1、到这个网址下载2.23版本的glibc源码包http://ftp.gnu.org/gnu/glibc/。注意:虽然要求glibc版本不低于2.22,但是不宜安装过高版本的glibc,因为较高版本的glibc依赖于python,去整python环境又得费一番功夫,所以弄个比2.22稍高一点的2.23版就够了,也就是下载这个压缩包[http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz](http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz "http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz")。

2、先解压glibc源码包,再进入glibc源码目录,然后创建build目录并进入该目录,也就是依次执行以下命令:

|---------|-----------------------------------------------------------------------|
| 1 2 3 4 | tar zxvf glibc-2.23.tar.gz cd glibc-2.23 mkdir build cd build |

3、在build目录下依次执行以下命令配置、编译与安装glibc:

|-------|----------------------------------------------------|
| 1 2 3 | ../configure --prefix=/usr make make install |

安装成功后,会在/usr/lib64目录下找到最新的libc.so(还有libc.so.6和libc-2.23.so和libmvec.so还有libmvec.so.1和libmvec-2.23.so)等库文件。

二、安装FFmpeg

1、到这个网址下载Linux环境编译好的FFmpeg安装包https://github.com/BtbN/FFmpeg-Builds/releases,比如ffmpeg-master-latest-linux64-gpl-shared.tar.xz。

2、把下载好的FFmpeg安装包解压到/usr/local/ffmpeg目录,也就是依次执行以下命令:

|-------|------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | cd /usr/local tar xvf ffmpeg-master-latest-linux64-gpl-shared.tar.xz mv ffmpeg-master-latest-linux64-gpl-shared ffmpeg |

3、输入cd命令回到当前用户的初始目录,使用vi打开该目录下的.bash_profile,也就是依次执行以下命令:

|-----|-------------------------|
| 1 2 | cd vi .bash_profile |

4、把光标移动到文件末尾,按下a键进入编辑模式,然后在文件末尾添加下面四行环境变量配置:

|---------|------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | PATH=$PATH:/usr/local/ffmpeg/bin export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib export LD_LIBRARY_PATH |

接着保存并退出文件,也就是先按下Esc键退出编辑模式,再按下冒号键,接着输入wq再按回车键,即可完成修改操作。

5、执行以下命令加载最新的环境变量:

|---|------------------------|
| 1 | source .bash_profile |

接着运行下面的环境变量查看命令:

|---|-------------------|
| 1 | env | grep PATH |

发现控制台回显的PATH串包含/usr/local/ffmpeg/bin,同时LD_LIBRARY_PATH串包含/usr/local/ffmpeg/lib,说明FFmpeg的bin目录和lib目录都加载进了环境变量。

三、编写测试程序

1、创建C代码文件名叫hello.c,填入下面的代码内容:

|-----------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | #include <libavutil/avutil.h> int main(``int argc, ``char``* argv[]) { ``av_log(NULL, AV_LOG_INFO, ``"hello world\n"``); } |

2、保存并退出该文件,执行以下命令编译hello.c:

|---|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | gcc hello.c -o hello -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm |

3、运行编译好的hello程序,也就是执行以下命令:

|---|-----------|
| 1 | ./hello |

发现控制台回显日志信息"hello world",表示测试程序运行正常,说明FFmpeg开发环境已经成功搭建。

4、刚才的测试程序hello.c采用C语言编写,并且使用gcc编译。若要采用C++编程的话,则需改成下面的hello.cpp代码:

|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 | #include <iostream> // 因为FFmpeg源码使用C语言编写,所以在C++代码中调用FFmpeg的话,要使用标记"extern "C"{......}"把FFmpeg的头文件包含进来 extern "C" { #include <libavutil/avutil.h> } int main(``int argc, ``char``* argv[]) { ``av_log(NULL, AV_LOG_INFO, ``"hello world\n"``); } |

鉴于C++代码采用g++编译,于是hello.cpp的编译命令变成下面这样:

|---|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | g++ hello.cpp -o hello -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/bin -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm |

编译完毕,同样生成名叫hello的可执行程序,如此就实现了C++代码集成FFmpeg函数的目标了。

相关推荐
杨云龙UP23 分钟前
mysqldump逻辑备份文件恢复总结:全库恢复、单库恢复,一篇讲明白
linux·运维·服务器·数据库·mysql·adb
舰长11526 分钟前
linux系统服务器加固1、中风险 未设置登录失败处理功能和登录连接超时处理功能。2、中风险 未限制默认账户的访问权限。3、中风险 未实现管理用户的权限分离。
linux·运维·服务器
Wilber的技术分享42 分钟前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
mounter6251 小时前
Linux 7.0 重磅更新:详解 nullfs 如何重塑根文件系统挂载与内核线程隔离
linux·运维·服务器·kernel
愚昧之山绝望之谷开悟之坡1 小时前
合格境外投资者
笔记
色空大师1 小时前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
A.A呐3 小时前
【Linux第十三章】缓冲区
linux·服务器
寒秋花开曾相惜3 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap3 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
cccccc语言我来了4 小时前
Linux(9)操作系统
android·java·linux