FFmpeg 4.3 音视频-多路H265监控录放C++开发二 : 18.04ubuntu安装,linux 下build ffmpeg 4.3 源码 并测试

server/2024/10/21 19:15:49/

测试环境 ubuntu 18.04 64 位,安装vmware and ubuntu

安装后调整 分辨率:

让windows 可以和 linux 互相复制黏贴

sudo apt-get autoremove open-vm-tools

sudo apt-get update

sudo apt-get install open-vm-tools-desktop
一直Y

reboot

依赖安装

sudo apt update

sudo apt-get install make cmake g++ nasm yasm diffutils pkg-config -y
sudo apt install autoconf     编译fdk-aac时用到 

sudo apt-get install libtool   编译fdk-aac时用到 

关于 configure,make ,make install 的知识点

源码的安装一般由三个步骤组成:配置(configure)、编译(make)、安装(make install)。这些都是典型的使用GNU的AUTOCONFAUTOMAKE产生的程序的安装步骤。

configure:对即将安装的软件进行配置,检查当前环境是否满足安装软件的依赖关系。生成Makefile文件。

make:从Makefile中读取指令,然后编译成可执行文件

make install:从Makefile中读取指令,安装到指定位置(二进制文件)。

一、configure

1、前言

configure命令用于配置和准备软件包的自动化安装过程。通常用于源代码安装(即wget+tar的方式)的软件包,通过configure命令可以根据系统环境用户需求进行自定义配置(并生成编译make所需的Makefile),以保证软件包能够在特定的系统上正确安装和运行。

configure可以生成Makefile,为下一步的编译做准备。

2、用法

./configure [选项]

必须用./configure,不能进入目录后用configure,以python安装为例,在python目录中,就存在configure文件,这个文件就是之后配置所要用的configure脚本。

3、选项

configure脚本有很多配置选项,可以通过./configure --help看到所有可用的配置项。

选项
说明
--prefix=路径

软件包的安装路径默认/usr/local

--help其他选项可以通过help查看 

说明

如果指定了prefix,例如--prefix=/usr,那么各种文件就在该目录下建立对应的文件夹:

  • 可执行文件:/usr/bin
  • 资源文件:/usr/share
  • ……

如果不指定prefix,那么各种文件会有一些默认的路径:

  • 可执行文件:/usr/local/bin
  • 库文件:/usr/local/lib
  • 配置文件:/usr/local/etc
  • 其他资源文件:/usr/local/share

4、例子

1)指定安装路径

./configure --prefix=/opt/software

将软件包安装到/opt/software目录下

二、make和make install

make和make install命令用于使用.tar.gz安装文件的情形下。它们分别实现对源码的编译和安装

在用./configure --prefix指定了路径的情况下,编译和安装会正确输出到目标路径中。

make:命令工具,对程序进行编译
make install:将编译好的程序安装到系统中,这样可以在命令行中输入程序名来运行它;
make clean:将编译生成的文件删除,包括中间文件和可执行文件

make uninstall(make的目录下):卸载

说明

卸载软件时,如果configure时指定了目标路径,那么直接删除该目录即可。也可以在make所在目录下用make uninstsall。

make install

安装时可以用 PREFIX=路径DESTDIR=路径 安装到指定目录下。

这样,会在指定目录下生成一个bin目录,并在bin目录中存在可执行二进制文件

make PREFIX=/usr/local/redis install 
make DESTDIR=/install/directory install 

指定路径非必须,因为在make时就已经编译出可执行文件了,make install只是为了安装到Linux系统中常用位置上,因为从默认安装目录下运行程序可能有点不方便。

make install中的PREFIX与configure中的--prefix

本节内容学习自:Linux命令详解./configure、make、make install 命令_爱吃牛肉的大老虎的博客-CSDN博客

假设运行了以下指令

./configure --prefix=/usr/local/nginx

那么,会在/usr/local/nginx目录下,生成bin、lib、etc、share目录。

由于configure已经指定了安装位置,因此后续make install PREFIX不会生效

make install PREFIX只生效于 解压缩后没有configure文件,有Makefile或makefile的情况。

编译x264

1.解压

tar -xvf x264-master.tar.bz2

2.配置为 动态库的形式,然后configure ,build出来的位置放在 /usr下,放在/usr 下是因为 linux 的执行程序在加载 动态库的时候,和 windows有区别。

windows 加载动态库,会先从 可执行程序exe 的当前路径下找,然后再找环境变量

linux 加载动态库,直接从/usr中找,当然我们也可以配置,但是总是麻烦一些

./configure --enable-shared --prefix=/usr/

--enable-shared表明是生成 动态库文件

3 make -j16

make是一个常用的构建工具,可以帮助我们编译、链接和打包软件代码。make可以读取一个叫做makefile的文件,makefile中定义了编译和链接的规则,以及需要编译的文件和目标文件等信息。通过执行make命令,make会读取makefile文件并根据其中的规则来执行编译和链接操作,生成最终的可执行文件或库文件。 

make 命令是生成 动态库

4 sudo make install

hunandede@hunandede-virtual-machine:~/software/x264-master/x264-master$ sudo make install
[sudo] hunandede 的密码: 
install -d /usr//bin
install x264 /usr//bin
install -d /usr/share/bash-completion/completions
install -m 644 -T ./tools/bash-autocomplete.sh /usr/share/bash-completion/completions/x264
install -d /usr//include /usr//lib/pkgconfig
install -m 644 ./x264.h x264_config.h /usr//include
install -m 644 x264.pc /usr//lib/pkgconfig
install -d /usr//lib
ln -f -s libx264.so.161 /usr//lib/libx264.so
install -m 755 libx264.so.161 /usr//lib

为什么要用sudo 呢?这是因为我们要给 /usr/ 中写数据,也就是说会将生成的 x264

编译x265

编译x265和264不同,x265提供了在不同平台下的 bash 脚本,用来生成makefile文件

1.解压

tar -xvf x265.tar.bz2

2.进入到bash目录 执行 ./make-Makefiles.bash

cd x265/build/linux

./make-Makefiles.bash

3 make -j16

在make 完成后,可以看到

4 sudo make install

可以看到,我们在没有执行 --prefix,默认会安装在 /usr/local/lib下

hunandede@hunandede-virtual-machine:~/software/x265_20200330/x265/build/linux$ sudo make install
[ 63%] Built target common
[ 85%] Built target encoder
[ 86%] Built target x265-static
[ 87%] Built target x265-shared
[100%] Built target cli
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libx265.a
-- Up-to-date: /usr/local/include/x265.h
-- Installing: /usr/local/include/x265_config.h
-- Installing: /usr/local/lib/libx265.so.191
-- Up-to-date: /usr/local/lib/libx265.so
-- Installing: /usr/local/lib/pkgconfig/x265.pc
-- Installing: /usr/local/bin/x265
-- Set runtime path of "/usr/local/bin/x265" to ""

编译fdk-acc

0.安装 autoconf  和 libtool

sudo apt update
sudo apt install autoconf
sudo apt-get install libtool原文链接:https://blog.csdn.net/weixin_44114797/article/details/132402381

1.解压

unzip fdk-aac.zip

2.进入fdk-aac文件夹 执行./autogen.sh   生成 configure 文件

./autogen.sh 

3.执行configure

./configure --enable-shared --prefix=/usr/

4.  make -j16

5.  sudo make install 

编译ffmpeg

1.解压缩

tar -xvf ffmpeg.

2.进入到ffmepg 目录

3.开始build 

./configure --prefix=/usr/ --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265

4. make -j32

5. sudo make install

编写测试程序makefile

 为了简单期间,我们先将 windows这边之前写的代码 拷贝到 linux 

删除 window这边带过去的debug等文件,编写makefile文件

vim makefile, 需要指定 在编译时候 链接的 lib库,因此有  -lavcodec

first_ffmpeg:first_ffmpeg.cppg++ $^ -o $@ -lavcodec

然后make ,之后执行,执行时会有问题,原因linux找不到动态库,linux找动态库是在/usr/lib下找,而我们的libx265 在make install 的时候,都是放在默认linux 安装文件夹里面的(也就是在/usr/local/lib下),因此我们还要执行一次 拷贝 ,将x265的库文件放在 /usr/lib下

 sudo cp /usr/local/lib/libx265.* /usr/lib

执行  ./first_ffmpeg

hunandede@hunandede-virtual-machine:~/code/h265project$ ./first_ffmpeg
debug start
--prefix=/usr/ --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265
debug end 
hunandede@hunandede-virtual-machine:~/code/h265project$ 


http://www.ppmy.cn/server/133699.html

相关文章

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14目录1. Are Large Language Models State-of-the-art Quality Estimators for Machine Translation of User-generated Conten…

形式架构定义语言(ADL)

简介 形式规范 多年来,学术界一直在试图通过使用与测试截然不同且更加主动的方法来确保程序语义的正确执行:形式化方法。研究者们认为这种方法通过更加精确、无二义性的描述来达到让程序绝对地按照设计者的思想执行的目的。这种思想早期体现在Floyd在1…

京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?

京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?云主机就是云服务器的意思,是京东云给自家云服务器取的名字,阿里云叫云服务器ECS,腾讯云叫云服务器CVM,京东云服务器叫云主机,京…

Lua脚本的原子性

Lua脚本之所以被认为是原子性的,主要源于Redis的内部实现机制和Lua脚本的执行方式。以下是对Lua脚本原子性的详细解释: 一、Redis的单线程模型 Redis是一个基于内存、可基于Key-Value等多种数据结构的存储系统,它使用单线程模型来处理客户端的请求。这意味着在任何给定的时…

代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和

代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和 242.有效的字母异位词思路步骤 349. 两个数组的交集思路步骤 202. 快乐数思路步骤 1. 两数之和思路步骤 242.有效的字母异位词 思路 使用暴力解法时间复杂度为O(n^2)这道题需要判断…

【机器学习基础】全连接层

1. 定义: 每一个节点都跟其后面所有的神经元相连两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部也就是跟传统的神经网络神经元的连接方式是一样的 2. 作用: 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、…

IP- guard产品版本升级指引详解

一、IP-guard服务器升级步骤 1、下载升级包(IPgUpgrade版本号.zip) 到IP-guard服务器 2、解压升级包,右键以管理员身份运行 (1)“升级包”解压 (2)右键以管理员身份运行“升级包” ࿰

第十五届蓝桥杯Java大学b组(解)

1.报数游戏 思路: 第1-10个: 20 24 40 48 60 72 80 96 100 120 第11-20个:140 144 160 168 180 192 200 216 220 240 第21-30个:260 264 280 288 300 312 320 336 340 360 第31-40个:380 384 400 408 420 432 440 …