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的AUTOCONF和AUTOMAKE产生的程序的安装步骤。
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$
相关文章:

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 依赖安装 sud…...
将两张图片的不同标记出来
差异过于细微,阈值设置不当:您的差异可能是颜色或位置的微小变化,当前的阈值和处理方式可能不足以检测到这些细微差异。 图像配准不够精确:由于两张图片内容高度相似,特征点匹配可能存在误差,导致图像对齐…...

HarmonyOS开发(State模型)
一、State模型概述 FA(Feature Ability)模型:从API 7开始支持的模型,已经不再主推。 Stage模型:从API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、Wi…...
在 WPF 中使用 OpenTK:从入门到进阶
一、引言 WPF(Windows Presentation Foundation)是微软推出的用于创建丰富的桌面应用程序用户界面的框架。OpenTK 则为我们提供了强大的图形处理能力,包括 3D 图形渲染、数学计算等功能。将两者结合起来,可以在 WPF 应用程序中实…...

【最新华为OD机试E卷-支持在线评测】水仙花数(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

C# WinForm 用名字name字符串查找子控件
工作上遇到界面控件太多,需要对一些控件批量处理。虽然可以用代码批量控制,但要么是建立数组集合把所有要处理的控件放进去循环处理,要么是一个一个列出来修改属性。 但我大多数要求改的控件命名上是有规律的,所有只需要循环拼接字…...
Ubuntu下安装并初始化Git同时添加SSH密钥
在 Ubuntu 上可以使用以下命令安装git: sudo apt-get update sudo apt-get install git 在 Ubuntu 下安装好 Git 之后,接下来可以进行一些基本的配置和操作,以便更好地使用 Git。 1. 配置 Git 用户信息 在使用 Git 进行版本控制前&#x…...

好用的AI工具:探索智能生活的无限可能
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 一:常用AI工具 1. 语音助手(如Siri、小爱同学) 2. 智…...
-bash: conda: command not found
-bash: conda: command not found 说明当前的终端环境中没有找到 conda 命令,可能是因为 Conda 没有安装,或者当前的环境变量中没有包含 Conda 的路径。 解决方法 确保 Conda 已安装 确认 Conda 路径是否添加到环境变量 如果 Conda 已安装,…...

STM32-CubeIDE用串口通讯
USART串口通讯 一、轮询模式 1.设置所接引脚为UART异步模式 选择完成CTRLS保存。 2.编写测试代码(自动发送hello world) 在mian函数里面编写代码 原函数 调用函数,需要数据类型一致,使用函数通过串口发送数组里面的数据 打开串…...

FloodFill 算法(DFS)
文章目录 FloodFill 算法(DFS)图像渲染岛屿数量岛屿的最大面积被围绕的区域太平洋大西洋水流问题扫雷游戏衣橱整理 FloodFill 算法(DFS) 漫水填充(Flood Fi)算法是一种图像处理算法,在计算机图形学和计算机视觉中被广泛…...

计算机通信与网络实验笔记
1.LINUX通过版本号判断是否为稳定版本 2.计网基础 (CD),默认二层以太网交换机。 (10)物理层是均分(除以),数据链路层及以上是不除的。 3.传输介质: (1&…...
闲聊【干龙头】的重要性
市场面临转势,我们不知道谁会先涨,资金量大的操作必然会提前布局,而我们需要做的就是睁大眼睛,等待最强的那只股票出现,然后闭着眼睛进入就可以了。 追涨操作为什么都出现在大盘大涨情况下。原因简单,不能确…...

Ubuntu22.04安装RTX3080
Ubuntu22.04安装RTX3080 1 安装基础环境 更新依赖包 sudo apt-get update sudo apt-get upgrade2 安装驱动 (1)查看适合的显卡驱动 # 查看可用的驱动 sudo ubuntu-drivers devices# 返回值,推荐版本:nvidia-driver-550 ERROR…...

嵌入式学习-IO进程-Day04
嵌入式学习-IO进程-Day04 进程的函数接口 fork和Vfork 回收进程资源 wait waitpid 退出进程 获取进程号(getpid,getppid) 守护进程 守护进程的特点 创建步骤 exec函数族 线程 概念 线程和进程的区别 线程资源 线程函数接口 创建线程ÿ…...
RAII - 安卓中的智能指针
RAII - 安卓中的智能指针 概念 sp wp RefBase 是什么 system/core/libutils/RefBase.cpp system/core/libutils/include/utils/RefBase.hsystem/core/libutils/StrongPointer.cpp system/core/libutils/include/utils/StrongPointer.hAndroid在标准库之外,自定义…...

linux--库指令
ldd ldd 可执行文件路径 显示依赖的库的查找路径以及是否查找到了。...
展讯方案-内置多张开机logo
1. 开机图片的资源存放在logo分区中,这个分区中可以存放一个xx.bmp文件,也可以存放一个bin文件(1logo.bin,包含多张压缩的图片集合) 2.平台代码中logo.bin是由mk_1ogo_img.py脚本打包,具体如下(…...

Stable Diffusion模型资源合集(附整合包)
(模型资源在ComfyUI、WebUI以及ForgeUI中都通用) 之前的Stable Diffusion笔记受到了不少小伙伴的关注,很感谢大家的建议和支持。有很多小伙伴私信我问我一些AI绘画的模型资源在哪来下载,一般来说有两个网站比较常用,分…...

机器学习|Pytorch实现天气预测
机器学习|Pytorch实现天气预测 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#x…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...