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

测试环境 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.rhkb.cn/news/451970.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数字图像处理】第5章 图像空域增强方法

上理考研周导师的哔哩哔哩频道 我在频道里讲课哦 目录 5.1 图像噪声 相关概念 ①图像噪声的产生 ② 图像噪声分类 ③ 图像噪声特点 5.2 图像增强方法分类 ①图像增强概念 ②图像增强目的 ③图像增强技术方法: 5.3 基于灰度变换的图像增强 1. 概述: 2. 灰度变换…

HCIP open-Euler学习文档

第一期 操作系统基础,web基础 OpenEuler 目录 学习系统常用应用(Apache Nginx DNS MySQL)服务器集群架构(HAProxy, Nginx, LVS,keepalived)存储管理(GlusterFS,NAS,SAN)自动化基础(Ansible,SaltStack)Shell脚本基础(变量,语法,函数&…

推荐一个处理数据非常好用的在线工具

推荐一个处理数据非常好用的在线工具 只要你的工作用到了电脑,经常需要处理数据的话,那么你肯定会遇到数据各种各样的问题,比如去重,对比,统计,排序等等 身为一名后端程序员,每天就是和数据打…

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Python案例小练习——小计算器

文章目录 前言一、代码展示二、运行展示 前言 这是用python实现一个简单的计器。 一、代码展示 def calculate(num1, op, num2):if op "":return float(num1) float(num2)elif op "-":return float(num1) - float(num2)elif op "*":return…

vue3--通用 popover 气泡卡片组件实现

背景 在日常开发中,我们一般都是利用一些诸如:element-ui、element-plus、ant-design等组件库去做我们的页面或者系统 这些对于一些后台管理系统来说是最好的选择,因为后台管理系统其实都是大同小异的,包括功能、布局结构等 但是对于前台项目,比如官网、门户网站这些 …

Ubuntu如何显示pcl版本

终端输入: apt-cache show libpcl-dev可以看到,Ubuntu20.04,下载的pcl,应该都是1.10版本的

dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

一、 为什么要用日期格式化 因为在开发项目过程中,会遇到各种各样的日期格式,有的显示完整的年-月-日 时:分:秒,而有的场景就只显示月-日等格式,还有就是显示当前时间和注册时间的间隔时长等,场景非常多,如…

Docker部署Kamailio,并使用LinPhone实现网络通话

前提条件 准备一个路由器,一个服务器,两个终端设备(手机或电脑) docker部署安装 我使用的是windows系统,docker desktop 先启动Docker desktop打开cmd,输入docker命令docker run --name kamailio --rm…

【MySQL】多表查询——内连接,左/右连接

目录 准备工作 1.多表查询 2.INNER JOIN(内连接) 2.1.笛卡尔积 1.2.笛卡尔积的过滤 1.3.INNER JOIN(显式内连接) 1.4.SELF JOIN(自连接) 3. LEFT JOIN(左连接) 3.1.一个例子…

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键 文章目录 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键1. 进入BIOS快捷键2. 快速进入BIOS设置界面3. 快速进入启动项选择界面 1. 进入BIOS快捷键 进入BIOS设置界面的快捷键为F2快速进入启动项选择界面的快捷键为F12 2. 快速进…

asyn queueRequest使用实例

使用queueRequest读写端口驱动的示例&#xff0c;驱动驱动程序使用一个基于asyn实现了asynCommon和asynOctet的驱动程序-CSDN博客中编写的驱动程序&#xff0c;本程序的C代码如下&#xff1a; #include <stdlib.h> #include <stdio.h> #include <string.h>#…

Sqli-labs less-27

Sqli-labs less-27 过滤union\select绕过方式 ### 1. 逻辑绕过 例&#xff1a; 过滤代码 union select user,password from users 绕过方式 1 && (select user from users where userid1)‘admin’### 2.十六进制字符绕过 select ——> selec\x74 union——>un…

nacos的使用

nacos的使用 本专栏的上一篇文章已经部署好了nacos&#xff0c;我们就可以使用nacos做配置中心和注册中心了。 一、配置中心 有了nacos&#xff0c;我们在微服务项目的配置文件里只需要做一些简单的配置就行了&#xff1a;服务名、服务端口、nacos的地址。其余的配置都可以用…

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

如意控物联网项目(二)-ML307R模组软件调试之MQTT+硬件接口调试笔记

目录 概要 1、 操作系统----RTOS kernel CMSIS-RTOS2 2、 程序API文档 3、 MQTT调试记录-2024年10月9日 4、 ML307_APP_DEMO_SDK使用指南 5、 MQTT登录onenet平台成功 6、 ML307R链接onenet平台成功-接收数据成功 7、 timer定时器调试 8、 操作系统--OS程序学习 1. 事件…

【实战指南】Vue.js 介绍组件数据绑定路由构建高效前端应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

G1 GAN生成MNIST手写数字图像

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 G1 GAN生成MNIST手写数字图像 1. 生成对抗网络 (GAN) 简介 生成对抗网络 (GAN) 是一种通过“对抗性”学习生成数据的深度学习模型&#xff0c;通常用于生成…

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是可控的&#xff0c;并且参数会带入到数据库中执行&#xff0c;导致…