环境准备:操作系统选择与基础依赖安装

好,咱们正式开始动手。这一章说白了就是「搭窝」——把工地的脚手架先立起来。我见过太多人一上来就急着配编码参数、调推流地址,结果编译个依赖报一堆错,回头发现是系统环境没弄干净。嗯,咱们别走那个弯路。

为什么选 Ubuntu 22.04 LTS?

你可能要问:CentOS 不行吗?Debian 不行吗?当然行。但我个人习惯用 Ubuntu 22.04 LTS 做推流管线的基础系统,原因有三:

  • 软件源新:FFmpeg、x264、x265 这些核心库的官方 PPA 和社区包,对 22.04 支持最好。我在项目中遇到过 CentOS 7 上编译 x264 需要手动打补丁的情况,折腾了大半天。
  • 内核版本适中:5.15 LTS 内核,对网卡驱动、io_uring 这些新特性的支持很稳。太新的内核有时反而会引入 regressions。
  • 社区活跃:你遇到的大部分编译报错,在 Stack Overflow 上搜 Ubuntu 22.04 基本都有现成答案。
我的建议:如果你在虚拟机或云服务器上装,尽量选 Server 版,别带桌面。推流管线不需要 GUI,省下那几百兆内存给编码器不香吗?

基础依赖安装

系统装好之后,第一件事就是装编译工具链。别想着「我后面用到再装」——推流管线涉及的第三方库,十有八九需要从源码编译。先把家伙备齐。

打开终端,执行:

sudo apt update
sudo apt upgrade -y
sudo apt install -y \
  build-essential \
  gcc \
  g++ \
  make \
  cmake \
  git \
  vim \
  pkg-config \
  autoconf \
  libtool \
  yasm \
  nasm

这里面有几个关键角色,我简单说一下:

工具 作用 我的备注
gcc/g++ C/C++ 编译器 Ubuntu 22.04 默认是 gcc 11,够用
make 构建自动化工具 别用系统自带的旧版,apt 装的就是最新
cmake 跨平台构建系统 FFmpeg 和一些现代库都用它
git 版本控制 拉取源码、切分支、打补丁全靠它
yasm/nasm 汇编器 x264/x265 的汇编优化需要它们
注意:我曾经在一台新机器上忘了装 pkg-config,结果编译 FFmpeg 时死活找不到 libx264 的路径。折腾了两小时才发现是 pkg-config 没装。这玩意儿虽然小,但缺了它你寸步难行。

验证安装

装完之后,快速验证一下:

gcc --version
g++ --version
make --version
cmake --version
git --version
yasm --version

每一条都应该正常输出版本号。如果哪条报错,回头检查一下 apt 安装过程有没有报红。

网络与防火墙配置

推流管线说白了就是「收流 → 处理 → 发流」。网络不通,后面全是白搭。咱们先理清推流场景下常用的端口:

协议 默认端口 用途
RTMP 1935 推流/拉流(最常见)
SRT 9710 低延迟推流(公网场景)
HLS 80/443 拉流分发(HTTP)
WebRTC UDP 10000-20000 实时互动

我个人习惯先关掉防火墙,等管线搭好再按需开放端口。但如果你在生产环境,千万别这么干。咱们现在是在学习环境,可以这样操作:

# 查看防火墙状态
sudo ufw status

# 如果开启,先允许 SSH(防止自己被锁在外面)
sudo ufw allow ssh

# 然后开放推流相关端口
sudo ufw allow 1935/tcp   # RTMP
sudo ufw allow 9710/tcp   # SRT
sudo ufw allow 80/tcp     # HLS
sudo ufw allow 443/tcp    # HTTPS HLS

# 最后启用防火墙
sudo ufw enable
一个小技巧:如果你在云服务器上操作,除了 ufw,还要去云控制台的安全组/防火墙规则里开放对应端口。我遇到过好几次「本地 ufw 配好了,但云平台安全组没放行」的坑,排查了半天才发现是云平台的问题。

本章知识体系

下面这张图把咱们这章的核心逻辑串起来了。你一看就明白:

环境准备核心流程 Ubuntu 22.04 LTS 基础依赖:gcc / make / cmake / git / vim 网络与防火墙配置 验证:版本号 + 端口连通 为什么要先做环境准备? 避免编译时缺依赖 避免网络不通导致推流失败 统一开发环境,减少踩坑 我的经验 gcc 版本别太新 云服务器记得配安全组 pkg-config 一定要装

避坑指南

  • gcc 版本问题:我曾经在 Ubuntu 20.04 上编译新版 FFmpeg,默认 gcc 9 对某些内联汇编支持不够好,得手动升到 gcc 10。22.04 的 gcc 11 目前没遇到这个问题。
  • 防火墙别乱关:如果你在公网服务器上操作,关掉防火墙等于裸奔。至少保证 SSH 端口是放行的。
  • apt 源慢怎么办:换国内镜像源,比如清华、阿里、中科大。具体方法网上搜「Ubuntu 22.04 换源」,一分钟搞定。