首页 > 系统相关 >FFmpeg开发笔记(一)搭建Linux系统的开发环境

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

时间:2023-04-16 19:11:32浏览次数:65  
标签:ffmpeg glibc 编译 开发 usr Linux hello 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,glibc,编译,开发,usr,Linux,hello,FFmpeg
From: https://www.cnblogs.com/aqi00/p/17323833.html

相关文章

  • kubebuilder开发kubernetes operator demo
    环境准备go环境配置wgethttps://golang.google.cn/dl/go1.19.8.linux-amd64.tar.gztarzxvfgo1.19.8.linux-amd64.tar.gzmvgo/usr/local/vim/etc/profile在最结尾添加exportHOME=/rootexportGOROOT=/usr/local/goexportGOPATH=/opt/idcus/goexportPATH=$PATH:......
  • golang语言下,在x86的linux平台上编译arm64二进制
    转载自:https://www.annhe.net/article-4542.html================== 编译etcd测试工具benchmark:CGO_ENABLED=0GOOS=linuxGOARCH=arm64gobuild.  概述有很多开源软件并没有提供arm安装包或者二进制,或者能通过包管理工具安装但是版本比较旧(比如Pandoc)。如果想......
  • linux 系统下的服务性能优化
    背景在我们服务运行环境由物理机切换到云上后,发现服务性能有大幅下降(时延有较大的上升)。分析首先是服务的性能变化和上云有关。然后分析对比物理机和云的参数对比。比如外部竞争;云的宿主机系统版本;perfstat分析内存情况等。1、外部竞争:因为云上容器是和其他容器混部,难免会受......
  • 安卓开发IDE(大一暑假)
    项目截图 这里可以打开你的项目,双击config.xml代码高亮(移植) 代码补全 项目编译我直接调用的命令compile.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){newThread(ne......
  • Air724UG开发板串口教程
    1、前言这块板子是毕业设计老师替选的,出自合宙。使用Lua5.1,包含部分外部lib包。缺点:官方宣传的Luat合宙全系列通用,在Air724ug上是无法使用的该开发板使用Lua5.1,缺少了较多常用的Api,需要外部lib补充,往往也很难查询开发板型号多种多样,官方教程使用开发板往往和你的不同......
  • 敏捷开发领域里的 Epic 以及和 User Story 的关联关系
    在敏捷软件开发领域,Epic(史诗)通常是指一个大型的、跨越多个迭代周期的用户需求或者业务功能。Epic通常包含多个相关的故事(UserStory),这些故事描述了Epic所包含的具体功能和需求。Epic是敏捷开发中用于管理大型需求和复杂业务的一种方式。它可以帮助团队更好地理解用户需求、制......
  • 什么是前端开发领域的 Cumulative Layout Shift 问题
    CLS是CumulativeLayoutShift(累计布局偏移)的缩写,它是一个用于度量网页稳定性的指标。CLSissue指的是网页在加载过程中存在的累计布局偏移问题,这些问题会导致网页元素在页面上闪烁或跳动,影响用户体验。在前端开发中,CLSissue是一个常见的问题,通常由于页面中的图片、视频或广......
  • How to use the Raspberry Pi to study the Linux kernel source code All In One
    HowtousetheRaspberryPitostudytheLinuxkernelsourcecodeAllInOne如何利用树莓派来研究Linux内核源码AllInOnehttps://github.com/torvalds/linux学习笔记在Linux系统中,一切皆文件!(......
  • 谈一谈我对协同开发的一些认识
    如今各互联网公司普通都使用敏捷开发,采用小步快跑的形式来进行项目开发。如果是小项目或者小需求,那一个开发可能就搞定了。但对于电商等复杂的系统,其功能多,结构复杂,一个人肯定是搞不定的,所以都是很多人来共同开发维护。以我曾经待过的商城团队为例,光是后端开发就有七十多人。为了......
  • 《Linux基础》07. 软件管理
    目录1:软件管理1.1:rpm1.1.1:查询1.1.2:卸载1.1.3:安装1.2:yum1.3:dpkg1.4:apt1.4.1:相关配置1.4.2:常用指令1.4.3:相关指令rpm、yum、apt。三剑客。1:软件管理一般来说,Linux系统基本上可分为两大类:RedHat系列:Redhat、Centos、Fedora等Debian系列:Debian、Ubuntu等而两个系列自......