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

devtools/2024/10/19 18:52:21/

测试环境 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/devtools/127078.html

相关文章

构建可扩展的高校学科竞赛平台:SpringBoot案例分析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

spring底层原理

本文参考黑马程序员的spring底层讲解,想要更详细的可以去看视频。 另外文章会每日更新,大概持续1个月!!!每天更新一讲 这部分比较抽象,要经常复习!!! 一、BeanFactory与A…

用map实现el-table全选

<el-button size"small" type"primary" click"searchProxy">查询</el-button><el-checkbox v-model"selectAll" change"changeSelectAll" >全选</el-checkbox><el-table:data"taskList&…

什么是回调地狱,如何避免?

概念 回调地狱&#xff08;Callback Hell&#xff09;&#xff0c;也称为金字塔之痛&#xff08;Pyramid of Doom&#xff09;&#xff0c;指的是在 JavaScript 中处理多个嵌套异步操作时&#xff0c;由于回调函数的层层嵌套而导致的代码结构复杂且难以阅读的情况。 回调地狱…

【C语言】指针与函数:传值与传址

函数在使用的时候&#xff0c;给到的形式参数属于局部变量&#xff0c;仅在函数体内部有效。 传值&#xff0c;对于两个值的交换&#xff0c;不影响函数调用之前的数值&#xff0c;也就是不会改变main函数或其他函数中的值。这个就是传值&#xff0c;传递的是实参。传址&#…

985研一学习日记 - 2024.10.16

一个人内耗&#xff0c;说明他活在过去&#xff1b;一个人焦虑&#xff0c;说明他活在未来。只有当一个人平静时&#xff0c;他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部&#xff0c;明天练胸和三头 3、LeetCode刷了3题 旋转图像&#xff1a…

单片机探秘:从理论到应用

单片机探秘:从理论到应用 在这个科技飞速发展的时代,单片机的应用如同一颗璀璨的星星,照亮了我们生活的方方面面。今天,让我们一同深入探讨单片机的原理与应用,揭开这个技术领域的神秘面纱。 1. 单片机概述 1.1 什么是单片机 你可曾想过,生活中很多自动化设备是如何工…

FreeRTOS:任务通知

目录 一、简介 二、相关API 1.发送任务通知的API 2.获取任务通知的API 三、使用场景 1.代替消息队列 2.代替二值信号量 3.代替计数信号量 4.代替事件组 一、简介 FreeRTOS的任务通知&#xff08;Task Notifications&#xff09;是一个轻量级、快速的机制&#xff0c;用于…