2. 环境搭建与工具链准备:安装FFmpeg、OBS、Python及OpenCV

做流媒体开发,环境搭建是第一道坎。很多人觉得装个软件有什么难的?但我在项目里见过太多因为环境不一致导致的诡异问题——Windows上能跑,Linux上就崩;本地推流正常,服务器上就花屏。说白了,工具链的版本和配置,决定了你后面90%的调试效率。

这一章,我们就把四件套装好:FFmpeg(编码核心)、OBS(采集推流)、Python + OpenCV(图像处理)。我会把每个工具的坑都指出来,你跟着走一遍,后面30章基本不用再折腾环境。

核心原则:所有工具尽量用最新稳定版,但别追最新RC版。我吃过亏——有一次用FFmpeg nightly版,结果API变了,整个编码链全崩。

2.1 整体架构:工具链在链路中的位置

先看一张图,你就明白这四个工具各自负责什么。

数据采集到编码推流全链路 — 工具链角色 数据源 摄像头 / 屏幕 / 文件 OBS Studio 采集 / 场景 / 推流 FFmpeg 编码 / 转码 / 封装 推流目标 RTMP / HLS / SRT Python + OpenCV 图像预处理 / 帧分析 / 自动化测试 💡 说明:OBS 负责采集和初步推流,FFmpeg 负责深度编码处理,Python+OpenCV 做定制化图像分析。 三者可以独立使用,也可以组合成自动化流水线。

嗯,这张图很关键。你想想看,OBS是前端采集,FFmpeg是后端编码引擎,Python+OpenCV是智能处理层。三个工具各司其职,但又能互相调用——比如OBS可以调用FFmpeg编码器,Python也能通过subprocess调用FFmpeg。

2.2 安装FFmpeg

FFmpeg是整个链路的核心。没有它,你连H.264都编不出来。我个人习惯用静态编译版,不依赖系统库,换机器也不怕。

2.2.1 Windows安装

  1. 去 gyan.dev 下载最新Windows builds(选full_build版本)
  2. 解压到 C:\ffmpeg
  3. 把 C:\ffmpeg\bin 加到系统PATH
  4. 打开cmd,输入 ffmpeg -version 验证

我的经验:别用Windows商店版FFmpeg,那个版本阉割了很多编码器。我踩过坑——商店版不支持libx265,折腾半天才发现。

2.2.2 macOS安装

# 用Homebrew,简单粗暴
brew install ffmpeg

# 如果想带更多编码器
brew install ffmpeg --with-libx264 --with-libx265 --with-libvpx

2.2.3 Linux安装

# Ubuntu/Debian
sudo apt update
sudo apt install ffmpeg

# 验证
ffmpeg -encoders | grep h264

注意:Ubuntu官方源里的FFmpeg版本通常比较老。如果你需要最新的编码器支持,建议从源码编译,或者用static build。我曾经因为版本太老,导致H.264编码参数不兼容,推流端和播放端花了半天对参数。

2.2.4 验证安装

装好后,跑个简单的测试命令:

ffmpeg -i input.mp4 -c:v libx264 -preset medium -b:v 2M output.mp4

如果没报错,说明FFmpeg已经能正常工作了。我个人习惯把常用编码器的参数记下来,后面章节会反复用到。

2.3 安装OBS Studio

OBS是采集端的王者。我见过很多团队自己写采集程序,最后都换回了OBS——它稳定、插件多、社区活跃。

2.3.1 下载与安装

平台 安装方式 备注
Windows 官网下载exe安装包 建议选安装版,别用便携版
macOS brew install --cask obs 需要授予屏幕录制权限
Linux sudo apt install obs-studio Ubuntu 20.04+ 直接可用

2.3.2 初始配置

安装后第一次启动,OBS会弹出自动配置向导。我建议你手动配置:

  1. 设置 → 输出 → 输出模式选「高级」
  2. 编码器选「硬件编码器」(如果有)或「软件x264」
  3. 视频 → 基础画布分辨率设1920x1080
  4. 推流 → 服务选「自定义」,后面章节会填RTMP地址

避坑:OBS默认的音频采样率是44.1kHz,但很多流媒体服务器要求48kHz。我曾经因为这个原因,直播时音频一直不同步。记得在设置→音频里改成48kHz。

2.4 安装Python与OpenCV

Python+OpenCV是流媒体链路的「瑞士军刀」。你可以用它做帧分析、图像预处理、甚至写自动化测试脚本。

2.4.1 安装Python

# 推荐用pyenv管理版本,避免系统Python污染
# macOS/Linux
curl https://pyenv.run | bash
pyenv install 3.10.12
pyenv global 3.10.12

# Windows 直接去python.org下载安装包
# 记得勾选「Add Python to PATH」

我个人习惯用Python 3.10,兼容性最好。3.11以上有些库还没完全适配。

2.4.2 安装OpenCV

# 用pip安装,一行搞定
pip install opencv-python

# 如果需要更多功能(比如视频编码支持)
pip install opencv-contrib-python

# 验证
python -c "import cv2; print(cv2.__version__)"

注意:OpenCV的pip包默认不带FFmpeg支持。如果你需要OpenCV直接读写视频文件,建议从源码编译OpenCV,开启WITH_FFMPEG=ON。否则你会遇到cv2.VideoWriter写不出mp4的尴尬——我当年调试了整整一个下午才发现是这个问题。

2.4.3 安装其他依赖

# 后面章节会用到的库,一次性装好
pip install numpy matplotlib pillow
pip install pyaudio  # 音频采集
pip install requests # HTTP推流辅助

2.5 验证全链路

四个工具都装好后,我们来个快速验证。写一个简单的Python脚本,调用OpenCV读取摄像头,再用FFmpeg编码推流:

import cv2
import subprocess

# 打开摄像头
cap = cv2.VideoCapture(0)

# FFmpeg推流命令
ffmpeg_cmd = [
    'ffmpeg',
    '-y',
    '-f', 'rawvideo',
    '-vcodec', 'rawvideo',
    '-pix_fmt', 'bgr24',
    '-s', '640x480',
    '-r', '30',
    '-i', '-',
    '-c:v', 'libx264',
    '-preset', 'ultrafast',
    '-f', 'flv',
    'rtmp://localhost/live/test'
]

proc = subprocess.Popen(ffmpeg_cmd, stdin=subprocess.PIPE)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    proc.stdin.write(frame.tobytes())

cap.release()
proc.stdin.close()
proc.wait()

这个脚本虽然简单,但已经覆盖了采集→编码→推流的完整链路。如果它能跑通,说明你的环境搭建成功了。

关键检查点:

  • FFmpeg能识别libx264编码器
  • OpenCV能打开摄像头
  • Python能调用subprocess启动FFmpeg
  • 推流地址能连接(本地测试可以用srs或nginx-rtmp)

2.6 常见问题与解决

问题 原因 解决方案
ffmpeg: command not found PATH没配置 检查安装路径,重新配置环境变量
OpenCV无法打开摄像头 权限问题或驱动缺失 macOS需授权摄像头;Linux装v4l-utils
FFmpeg报错Unknown encoder 'libx264' 编译时没开启x264支持 重新安装带x264的版本,或用static build
OBS推流卡顿 编码器设置过高 降低分辨率或换硬件编码器

嗯,环境搭建这部分就到这里。工具链装好了,后面的事情就顺了。记住:版本一致性是流媒体开发的第一原则。我建议你把每个工具的版本号记下来,后面调试时能省很多时间。