2. 环境搭建与工具链准备:安装FFmpeg、OBS、Python及OpenCV
做流媒体开发,环境搭建是第一道坎。很多人觉得装个软件有什么难的?但我在项目里见过太多因为环境不一致导致的诡异问题——Windows上能跑,Linux上就崩;本地推流正常,服务器上就花屏。说白了,工具链的版本和配置,决定了你后面90%的调试效率。
这一章,我们就把四件套装好:FFmpeg(编码核心)、OBS(采集推流)、Python + OpenCV(图像处理)。我会把每个工具的坑都指出来,你跟着走一遍,后面30章基本不用再折腾环境。
核心原则:所有工具尽量用最新稳定版,但别追最新RC版。我吃过亏——有一次用FFmpeg nightly版,结果API变了,整个编码链全崩。
2.1 整体架构:工具链在链路中的位置
先看一张图,你就明白这四个工具各自负责什么。
嗯,这张图很关键。你想想看,OBS是前端采集,FFmpeg是后端编码引擎,Python+OpenCV是智能处理层。三个工具各司其职,但又能互相调用——比如OBS可以调用FFmpeg编码器,Python也能通过subprocess调用FFmpeg。
2.2 安装FFmpeg
FFmpeg是整个链路的核心。没有它,你连H.264都编不出来。我个人习惯用静态编译版,不依赖系统库,换机器也不怕。
2.2.1 Windows安装
- 去 gyan.dev 下载最新Windows builds(选full_build版本)
- 解压到
C:\ffmpeg - 把
C:\ffmpeg\bin加到系统PATH - 打开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会弹出自动配置向导。我建议你手动配置:
- 设置 → 输出 → 输出模式选「高级」
- 编码器选「硬件编码器」(如果有)或「软件x264」
- 视频 → 基础画布分辨率设1920x1080
- 推流 → 服务选「自定义」,后面章节会填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推流卡顿 | 编码器设置过高 | 降低分辨率或换硬件编码器 |
嗯,环境搭建这部分就到这里。工具链装好了,后面的事情就顺了。记住:版本一致性是流媒体开发的第一原则。我建议你把每个工具的版本号记下来,后面调试时能省很多时间。