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
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函数的目标了。

原文链接:https://www.cnblogs.com/aqi00/p/17323833.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:FFmpeg开发笔记(一)搭建Linux系统的开发环境 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 根据json字符串生成Html的一种方式

    根据json字符串生成Html是前端常见操作之一,以下是一种实现方式: 步骤一:解析json字符串 使用JavaScript中提供的JSON.parse()方法,将json字符串解析成对应的JavaScript对象。 const jsonString = ‘{"name": "Joe", "age"…

    C 2023年5月23日
    00
  • windows无法访问指定设备路径或文件详细解决方案

    Windows无法访问指定设备路径或文件详细解决方案 在使用Windows电脑时,我们有时可能会遇到“Windows无法访问指定设备路径或文件”这样的错误提示,这通常是由于一些权限或路径错误引起的。本文将介绍一些可行的解决方案。 方案一:检查文件或路径权限 这种错误通常是由于您缺少对文件或路径的访问权限导致的,因此您需要检查并更改相关权限设置,如下所示: 右…

    C 2023年5月24日
    00
  • Win32应用程序(SDK)设计原理详解

    Win32应用程序(SDK)设计原理详解 Win32应用程序是指运行在Windows操作系统上的应用程序。Win32应用程序的设计原理包括了应用程序的整体架构、窗口管理、消息通信、资源管理、多线程等核心技术。在本文中,我们将详细讲解Win32应用程序的设计原理及其相关技术。 应用程序的整体架构 Win32应用程序的整体架构由程序入口函数、消息循环、窗口回调函…

    C 2023年5月23日
    00
  • Win8.1系统打开应用程序提示错误代码0xc000007b的解决方法

    针对Win8.1系统打开应用程序提示错误代码0xc000007b的问题,以下是完整攻略的步骤说明: 步骤一:检查系统文件 打开电脑的命令提示符:在桌面空白处单击鼠标右键,选择“新建”-“快捷方式”; 在快捷方式的文本框中输入“cmd.exe”,点击“下一步”; 输入“命令提示符”作为快捷方式的名称,点击“完成”; 右键单击刚刚创建的“命令提示符”快捷方式,选…

    C 2023年5月24日
    00
  • C语言中如何进行代码规范化?

    在C语言中,代码规范化非常重要,它可以提高我们编写代码的效率,降低出错的概率,并使代码更加易于维护。下面我将给出一些C语言代码规范化的攻略。 文件命名 文件名应以小写字母命名,单词之间用下划线连接。如:my_first_program.c 缩进 为了使代码易于阅读,应该使用缩进。对于每个缩进层次,使用4个空格。不要使用制表符。 if (x == y) { p…

    C 2023年4月27日
    00
  • C语言中的时间函数clock()和time()你都了解吗

    当我们需要对程序运行时间进行控制和统计时,就需要使用C语言中的时间函数。其中,clock() 和 time() 函数都可以获取程序执行的时间信息,但它们的用途略有不同。 clock() clock() 函数返回的是程序的 CPU 时间,即程序执行消耗的总时间。 使用方法为:在程序执行前调用 clock() 函数,记录程序的开始时间,程序执行完毕后再次调用 c…

    C 2023年5月22日
    00
  • C语言 循环

    C语言循环的使用攻略 在C语言编程中,循环结构是一类非常重要的语法工具。它能够帮助程序员快速高效地处理重复性质的任务,以及操作数组等数据结构。本文将详细介绍C语言中的循环结构,包括语法、使用技巧、常见应用场景以及示例说明。 语法实现 C语言的循环结构有三种:for、while和do…while,它们的语法实现分别如下: for循环 for(循环变量的初始…

    C 2023年5月9日
    00
  • 利用C#远程存取Access数据库

    利用C#远程存取Access数据库攻略 在这个攻略中,我们将会探讨如何使用C#编写程序并远程存取Access数据库。 1. 准备工作 在开始编写程序之前,我们需要下面的准备工作: 安装Access数据库或者Microsoft Office。 熟悉C#编程语言基础知识。 安装Visual Studio开发环境。 2. 创建一个.NET项目 我们首先需要打开Vi…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部