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

阿里云服务器

系统:centos7.9--->centos stream9

工具:cmake

安装必备工具

shell 复制代码
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

shell 复制代码
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

shell 复制代码
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 安装

repo 复制代码
[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

shell 复制代码
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

shell 复制代码
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

shell 复制代码
sudo yum install lame lame-devel # 必须安装lame-devel,不然没有头文件

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

shell 复制代码
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

shell 复制代码
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: 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
官方下载

shell 复制代码
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版本太低了

shell 复制代码
git clone http://code.videolan.org/videolan/x264.git
./configure --enable-shared --disable-asm
make
make install

编译x265

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

编译SDL2

shell 复制代码
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

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

运行时报错则安装以下库

shell 复制代码
# 找不到音频设备
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

shell 复制代码
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安装的,自己重新编译

shell 复制代码
sudo yum remove ffmpeg ffmpeg-devel
shell 复制代码
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-sdl2

make -j 4

sudo 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

需要安装一个虚拟声卡来模拟音频设备

shell 复制代码
sudo modprobe snd-dummy

项目搭建

创建项目结构

shell 复制代码
mkdir ALIVEPLAYER
cd ALIVEPLAYER
mkdir src

编写C++代码

在src目录创建文件main.cpp

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    std::cout << "hello world" << std::endl;
    return 0;
}

创建CMakeLists.txt

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

cmake 复制代码
# 设置最低CMake版本
cmake_minimum_required(VERSION 2.8)

# 设置项目名称
project(ALIVEPLAYER)

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)

# 添加源文件
add_executable(ALIVEPLAYER src/main.cpp)

配置并生成构建文件

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

shell 复制代码
mkdir build
cd build 
cmake ..

编译项目

在build目录下编译项目

shell 复制代码
make

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

运行项目

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

shell 复制代码
./ALIVEPLAYER
相关推荐
数据小爬虫@12 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.14 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy19 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader26 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默37 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
yuyanjingtao40 分钟前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_433618441 小时前
shell 编程(二)
开发语言·bash·shell
闻缺陷则喜何志丹1 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径