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

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。

对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给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
2、先解压glibc源码包,再进入glibc源码目录,然后创建build目录并进入该目录,也就是依次执行以下命令:

tar zxvf glibc-2.23.tar.gz
cd glibc-2.23
mkdir build
cd build

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

../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目录,也就是依次执行以下命令:

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,也就是依次执行以下命令:

cd
vi .bash_profile

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

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、执行以下命令加载最新的环境变量:

source .bash_profile

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

env | grep PATH

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

三、编写测试程序

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

#include <libavutil/avutil.h>

int main(int argc, char* argv[]) {
   
    av_log(NULL, AV_LOG_INFO, "hello world\n");
}

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

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程序,也就是执行以下命令:

./hello

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

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

#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的编译命令变成下面这样:

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函数的目标了。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

目录
相关文章
|
23天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
93 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
30天前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
48 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
135 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
27天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
75 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
9天前
|
缓存 监控 Linux
|
12天前
|
Linux Shell 数据安全/隐私保护
|
13天前
|
域名解析 网络协议 安全
|
1天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
10 3
|
1天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
8 3

热门文章

最新文章