2. 推流环境搭建:FFmpeg编译与安装、Live555服务器搭建、VLC播放器配置
做RTSP推流调试,第一步就是把实验环境搭起来。很多新手喜欢直接apt-get install,图省事。但我个人习惯——能自己编译就自己编译。为什么?因为生产环境里你永远不知道会遇到什么奇葩的编解码器版本问题。
这一章,我们就把三件套搞定:FFmpeg(推流工具)、Live555(RTSP服务器)、VLC(播放验证)。
核心逻辑:FFmpeg负责把视频源推给Live555,Live555作为RTSP Server分发流,VLC拉流播放验证。这三者构成了最基础的RTSP推流调试链路。
2.1 FFmpeg编译与安装
FFmpeg是推流的主力。我建议你从源码编译,而不是用系统包管理器。为什么?因为包管理器里的FFmpeg往往不带libx264、libx265这些编码器,推流时你会被各种"encoder not found"搞疯。
2.1.1 下载源码
# 克隆官方仓库
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
嗯,这里要注意:如果你在墙内,git clone可能会很慢。我一般用国内镜像,或者直接下载release包。
2.1.2 安装依赖
编译FFmpeg前,先把依赖装好。少了哪个,编译时就会报错。我个人习惯一次性装全:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
build-essential \
yasm \
nasm \
libx264-dev \
libx265-dev \
libvpx-dev \
libfdk-aac-dev \
libmp3lame-dev \
libopus-dev \
libssl-dev
⚠️ 我曾经踩过的坑:libfdk-aac-dev在Ubuntu默认源里可能没有。你需要先添加multiverse源:sudo add-apt-repository multiverse。否则编译出来的FFmpeg不支持AAC编码,推流时音频会出问题。
2.1.3 配置与编译
配置这一步很关键。我一般这样配:
./configure \
--prefix=/usr/local \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libopus \
--enable-openssl \
--enable-version3
make -j$(nproc)
sudo make install
这里解释几个关键参数:
--enable-gpl:必须开,libx264需要GPL许可--enable-nonfree:libfdk-aac需要这个,否则编译不过--enable-libx264:H.264编码器,RTSP推流最常用--enable-openssl:如果你后面要做SRTP或HTTPS,这个必须带
2.1.4 验证安装
ffmpeg -version
# 查看编码器支持
ffmpeg -encoders | grep -E "libx264|libx265|libfdk"
如果能看到libx264和libfdk_aac,说明编译成功了。我记得有一次帮同事排查,他编译了三次都没带libx264,推流时一直报错——其实就是configure参数漏了。
💡 小技巧:编译完成后,建议把FFmpeg加到PATH里。我习惯在~/.bashrc里加一行:export PATH=/usr/local/bin:$PATH。这样终端里直接敲ffmpeg就能用。
2.2 Live555服务器搭建
Live555是RTSP服务器的经典实现。它轻量、稳定,很多商业产品都在用。但说实话,它的代码风格有点老,编译方式也比较原始。不过没关系,我们一步步来。
2.2.1 下载源码
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar -xzf live555-latest.tar.gz
cd live
你想想看,Live555的官网这么多年都没怎么变过界面,但代码一直在更新。这就是开源项目的魅力——实用至上。
2.2.2 编译
Live555的编译方式很特别,它没有configure脚本,而是直接修改config文件:
# 查看可用的配置文件
ls config.*
# 我一般用这个
cp config.linux-with-shared-libraries config.linux
# 然后编译
make -j$(nproc)
如果你用的是macOS,需要用config.macosx。Windows用户嘛...我建议用WSL或者Cygwin。
2.2.3 启动RTSP服务器
Live555自带了一个测试服务器live555MediaServer,可以直接用:
# 启动服务器,默认端口554
./live555MediaServer
# 如果你想指定端口
./live555MediaServer -p 8554
启动后,它会自动扫描当前目录下的媒体文件,并提供RTSP服务。比如你有一个test.h264文件,客户端就可以通过rtsp://你的IP:554/test.h264来拉流。
⚠️ 注意:默认端口554需要root权限。如果你不想用sudo,就改成8554或其他高位端口。我在项目中就遇到过因为端口权限问题导致服务器起不来的情况,排查了半天才发现是端口被占用了。
2.2.4 验证服务器
# 查看进程
ps aux | grep live555
# 测试端口
netstat -an | grep 554
如果看到LISTEN状态,说明服务器跑起来了。
2.3 VLC播放器配置
VLC是验证RTSP流最方便的工具。它支持几乎所有的流媒体协议,而且跨平台。我个人电脑上常年挂着VLC,调试时随手就能用。
2.3.1 安装VLC
安装方式很简单,根据你的系统来:
| 系统 | 安装命令 |
|---|---|
| Ubuntu/Debian | sudo apt-get install vlc |
| macOS | brew install --cask vlc |
| Windows | 官网下载exe安装包 |
2.3.2 配置VLC拉流
打开VLC,按Ctrl+N(macOS是Cmd+N),输入RTSP地址:
rtsp://192.168.1.100:554/test.h264
点击播放,如果能看到画面,说明整个链路通了。
💡 调试技巧:如果VLC播放黑屏,可以打开"工具 → 消息"(Ctrl+M),查看VLC的调试日志。我经常在这里看到"connection timeout"或者"codec not found"之类的关键信息。
2.3.3 VLC高级配置
有时候默认配置不够用,比如你需要调整缓存大小:
# 在VLC中设置网络缓存(毫秒)
工具 → 偏好设置 → 输入/编解码器 → 网络缓存(默认为1000ms)
# 或者命令行启动时指定
vlc --network-caching 300 rtsp://192.168.1.100:554/test.h264
为什么要调缓存?说白了,网络不稳定时,缓存大一点能减少卡顿。但缓存太大又会增加延迟。这个平衡点,我在项目中调了无数次。
2.4 环境联调验证
三件套都装好了,我们来做个完整的联调测试:
- 启动Live555服务器:
./live555MediaServer -p 8554 - 准备测试视频:随便找一个MP4文件,或者用FFmpeg生成一个:
ffmpeg -f lavfi -i testsrc2=duration=30:size=1280x720:rate=30 test.mp4 - 用VLC拉流:打开VLC,输入
rtsp://127.0.0.1:8554/test.mp4
如果能看到测试画面,恭喜你——环境搭建成功了。
🎯 验证清单:
- FFmpeg能正常编码H.264 + AAC
- Live555服务器监听在指定端口
- VLC能成功拉流并播放
- 网络防火墙没有阻挡RTSP端口
嗯,到这里环境就搭好了。后面我们会用这套环境做各种流控调试——码率控制、丢包模拟、延迟优化,这些才是真正的硬核内容。