C++音视频02:环境搭建

阿里云服务器
系统:centos7.9—>centos stream9
工具:cmake

安装必备工具

sudo yum update
sudo yum groupinstall "Development Tools" -y
sudo yum install gcc gcc-c++
sudo yum install cmake
sudo yum install gdb
sudo yum install nasm
sudo yum install -y opus opus-devel
sudo yum install libvpx libvpx-devel

配置git

git config --global user.name "name"
git config --global user.email "xxx@qq.com"
git config --global core.editor vi
git config --list # 查看配置

添加SSH密钥到github

ssh-keygen -t rsa -b 4096 -C "xxx@qq.com"
cat ~/.ssh/id_rsa.pub # 拷贝输出结果到github的ssh keys里

编译nasm(2.16.01)

压缩包
可以选择在/etc/yum.repos.d下新增nasm.repo,从而用yum 安装

[nasm]
name=The Netwide Assembler
baseurl=http://www.nasm.us/pub/nasm/stable/linux/
enabled=1
gpgcheck=0[nasm-testing]
name=The Netwide Assembler (release candidate builds)
baseurl=http://www.nasm.us/pub/nasm/testing/linux/
enabled=0
gpgcheck=0[nasm-snapshot]
name=The Netwide Assembler (daily snapshot builds)
baseurl=http://www.nasm.us/pub/nasm/snapshots/latest/linux/
enabled=0
gpgcheck=0

由于最新版本的nasm需要更新glibc,选择用2.16.01

wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz
tar -xzf nasm-2.16.01.tar.gz
cd nasm-2.16.01
./autogen.sh
./configure
make
sudo make install

编译libfdk-aac

git clone https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv  # 生成配置文件
./configure --disable-shared  # 配置为静态编译,避免与共享库的冲突
make  # 编译库
sudo make install  # 安装库pkg-config --modversion fdk-aac # 编译完后确认一下是否找得到
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashsrc # 如果找不到,则将路径加到pkgconfig的环境变量中
source ~/.bashrc

编译libmp3lame

源码tar.gz

sudo yum install lame lame-devel # 必须安装lame-devel,不然没有头文件

在centos7.9可以这样安装,但是centos stream9中没有lame-devel,所以只能自己编译

wget https://zenlayer.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar -xvf lame-3.100.tar.gz
cd lame-3.100
./configure
make
sudo make install

由于默认是没有pc文件,所以pkg-config找不到libmp3lame,所以自己在/usr/local/lib/pkgconfig创建一个lame.pc

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/includeName: LAME
Description: LAME MP3 Encoder
Version: 3.100
Libs: -L${libdir} -lmp3lame 
Libs.private: 
Cflags: -I${includedir}/lame

这些信息根据自己的系统自己调整

编译libopus

由于最新版的ffmpeg需要用到的opus1.1版本中引入的opus_multistream_surround_encoder_create函数,而yum install 安装的版本过低,导致一直编译不过,因此只能自己编译libopus
官方下载

wget https://ftp.osuosl.org/pub/xiph/releases/opus/opus-1.5.2.tar.gz
tar -xzf opus-1.5.2.tar.gz
./configure
make
make install

编译x264

centos自带的x264版本太低了

git clone http://code.videolan.org/videolan/x264.git
./configure --enable-shared --disable-asm
make
make install

编译x265

git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git/build/linux
bash make-Makefiles.bash # 执行这个用于生成makefile脚本,默认选项直接按g退出即可
make install

编译SDL2

git clone https://github.com/libsdl-org/SDL.git
cd SDL
# 由于master默认是SDL3,所以需要切换分支
git checkout -b release-2.30.x origin/release-2.30.x
mkdir build
cd build
cmake ..
make 
sudo make install

中途如果报错没有X11或者Wayland则用yum安装X11

sudo yum install libX11-devel			# X11的核心库
sudo yum install libXext-devel		# 拓展库
sudo yum install libXrandr-devel		# 开启对X resize and Rotate拓展的支持,允许动态调整屏幕的分辨率和方向等

运行时报错则安装以下库

# 找不到音频设备
sudo yum install alsa-lib-devel pulseaudio-libs-devel
# 找不到合适的硬件加速渲染器, GPU相关的库
sudo yum install mesa-libGL-devel mesa-libGLU-devel

安装ffmpeg

一种方式是借助第三方库安装,但是24年10月实测安装出来的版本是3.4.13

sudo yum install epel-release -y
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
sudo yum install ffmpeg ffmpeg-devel -y

所以我选择删除yum安装的,自己重新编译

sudo yum remove ffmpeg ffmpeg-devel
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# 切换自己想要的版本分支
git checkout -b 6.0 origin/release/6.0./configure --enable-gpl --enable-nonfree --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libopus --enable-libmp3lame --enable-sdl2
# 如果需要ffplay 加上--enable-gpl和--enable-sdl2make -j 4sudo make install# 将下面的export命令写入~/.bashrc,因为默认路径找不到对应的共享库
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

ffplay播放注意事项

阿里云服务器通常没有声卡,因此使用ffplay时,可能会报错SDL_OpenAudio (2 channels, 44100 Hz): Couldn’t set hardware audio parameters: Operation not permitted
需要安装一个虚拟声卡来模拟音频设备

sudo modprobe snd-dummy

项目搭建

创建项目结构

mkdir ALIVEPLAYER
cd ALIVEPLAYER
mkdir src

编写C++代码

在src目录创建文件main.cpp

#include <iostream>
using namespace std;int main() {std::cout << "hello world" << std::endl;return 0;
}

创建CMakeLists.txt

在主目录创建CMakeLists.txt文件,用于构建项目

# 设置最低CMake版本
cmake_minimum_required(VERSION 2.8)# 设置项目名称
project(ALIVEPLAYER)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)# 添加源文件
add_executable(ALIVEPLAYER src/main.cpp)

配置并生成构建文件

在主目录创建build目录,并执行cmake命令用于生成Makefile或其他构建文件

mkdir build
cd build 
cmake ..

编译项目

在build目录下编译项目

make

编译成功后会在build目录下生成可执行文件

运行项目

在build目录下运行可执行文件

./ALIVEPLAYER

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457888.html

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

相关文章

Node.js 模块化

1. 介绍 1.1 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化其中拆分出的 每个文件就是一个模块 &#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用 1.2 什…

Stable Diffusion视频插件Ebsynth Utility使用方法

在Stable Diffusion中安装完Ebsynth Utility后&#xff0c;就可以开始试用了。 启动Stable Diffusion后&#xff0c;出面画面&#xff1a; 1、步骤1&#xff1a;视频分帧及生成蒙板帧 填入工程目录&#xff0c;选择上传所用的视频文件&#xff1a;注意对目录命名的要求-不能有…

尽管加密货币被禁,中国仍是比特币挖矿巨头!不过主导地位正在转向美国?

尽管中国政府全面禁止了加密货币交易和挖矿活动&#xff0c;但中国依然在比特币挖矿领域保持着全球领先地位。然而&#xff0c;随着美国在该领域的快速崛起&#xff0c;中国在比特币挖矿主导地位方面正面临来自美国的强劲竞争。根据最新的市场数据和行业分析&#xff0c;中国的…

华为:高级ACL 特定ip访问特定ip命令

网络拓扑图&#xff1a; 网络环境&#xff1a; 全网互通即可 1.创建一个名为test的高级ACL acl name test advance 2.添加规则 ##拒绝所有ip访问 rule 10 deny ip source any destination 192.168.1.10 0.0.0.0 只允许特定ip访问特定ip rule 5 permit ip source 192.168.2.10…

计算机网络:网络层 —— IPv4 地址的应用规划

文章目录 IPv4地址的应用规划定长的子网掩码变长的子网掩码 IPv4地址的应用规划 IPv4地址的应用规划是指将给定的 IPv4地址块 (或分类网络)划分成若干个更小的地址块(或子网)&#xff0c;并将这些地址块(或子网)分配给互联网中的不同网络&#xff0c;进而可以给各网络中的主机…

Oracle CONNECT BY、PRIOR和START WITH关键字详解

Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中&#xff0c;CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据&#xff0c;例如…

web3对象如何连接以太网络节点

实例化web3对象 当我们实例化web3对象&#xff0c;我们一般开始用本地址&#xff0c;如下 import Web3 from web3 var web3 new Web3(Web3.givenProvider || ws://localhost:5173)我们要和以太网进行交互&#xff0c;所以我们要将’ws://localhost:5173’的本地地址换成以太…

循序渐进丨openGauss / MogDB 数据库内存占用相关SQL

一、内存总体分布 数据库总体内存使用分布 select * from gs_total_memory_detail; 当dynamic_used_memory大于max_dynamic_memory就会报内存不足&#xff1b;如果此时dynamic_used_memory小于max_dynamic_memory&#xff0c;而dynamic_peak_memory大于max_dynamic_memory表…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

【书籍推荐】使用 MATLAB 算法进行合成孔径雷达信号处理【附MATLAB代码】

简介 介绍了合成孔径雷达 &#xff08;SAR&#xff09; 波前重建信号理论及其数字实现的最新分析。随着快速计算和数字信息处理技术的出现&#xff0c;SAR 技术变得更加强大和准确。使用 MATLAB 算法进行合成孔径雷达信号处理解决了这些最新发展问题&#xff0c;提供了对 SAR …

【随手笔记】远程升级之如何平衡下载包大小与速率?

1. 远程升级基本信息 使用NB_BC26模组&#xff0c;通过AT指令使用TCP的协议与公司后台交互升级的固件为BIN文件&#xff0c;使用原始固件包升级&#xff0c;未使用差分方式原始固件包有110K,大小左右&#xff0c;固件的存储为外置的FLASH W25Q16,w25q16最小存储单位为页&#…

git命令笔记(速查速查)

git命令功能总结 1.创建git的本地仓库2. 配置本地仓库(name和email地址)3. 工作区、版本库、暂存区、对象区3.1 add, commit3.2 打印提交日志3.2 修改文件 4.版本回退&#xff08;git reset&#xff09;5. 撤销修改&#xff08;在push之前撤销&#xff09;6.删除版本库中的文件…

C++——string的模拟实现(上)

目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…

微信小程序版本更新管理——实现自动更新

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

查找总价格为目标值的两个商品----双指针算法

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码编写 vector<int> twoSum(vector<int>& price, int target) {vector<int> ret;int left 0, right price.size()-…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

centos安装指定版本的jenkins

打开jenkins镜像包官网&#xff0c;找到自己想要安装的版本&#xff0c;官网地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable 下载指定版本安装包&#xff1a; wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.452.…

Vue3学习:汇率计算器案例中event.target与event.currentTarget比较

今天从一本vue.js书中学习了《汇率计算器》的案例&#xff0c;这个案例的效果如下&#xff1a; 案例可以查询人民币、日元、港元、美元、欧元之间的汇率关系&#xff0c;代码中定义了一个汇率表rate&#xff0c;包含了每种货币对其他5种货币的汇率。其中还有一个功能是点击下方…

从零到一:如何使用直播美颜SDK开发视频美颜平台

今天&#xff0c;小编将为大家详细讲解如何从零开始&#xff0c;利用直播美颜SDK进行开发视频美颜平台。 一、了解直播美颜SDK 选择合适的SDK是开发视频美颜平台的第一步&#xff0c;市场上有多种SDK可供选择。选择时应考虑SDK的功能、性能、稳定性以及开发者社区的支持。 二…

STM32实现毫秒级时间同步

提起“时间同步”这个概念&#xff0c;大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题&#xff0c;让多个传感器同时采集数据。 打个比方。两个人走路&#xff0c;都是100毫秒走一步&#xff08;频率相同是前提&…