2. 环境搭建:FFmpeg安装与配置、VLC播放器安装、RTSP服务器搭建(Live555/Mediamtx)
做流媒体开发,说白了就是跟三样东西打交道:推流工具、播放器、流媒体服务器。这三样搭好了,后面的实验才能跑起来。
我刚开始学RTSP的时候,光装环境就折腾了两天。不是版本冲突,就是编译报错。后来我总结了一套「稳如老狗」的安装流程,今天全部分享给你。
本章目标:在你的电脑上搭建一套完整的RTSP推流实验环境,包括FFmpeg、VLC、以及两款主流的RTSP服务器(Live555和Mediamtx)。
2.1 FFmpeg:推流与转码的瑞士军刀
FFmpeg是音视频开发者的标配。推流、拉流、转码、截图,它全都能干。我个人习惯把它放在系统PATH里,这样在任何目录下都能直接调用。
2.1.1 Windows下的安装
- 下载编译好的二进制包:去FFmpeg官网的Download页面,选择Windows builds。我推荐用gyan.dev的版本,稳定且更新及时。
- 解压:把压缩包解压到
C:\ffmpeg或者你喜欢的路径。 - 配置环境变量:把
C:\ffmpeg\bin添加到系统PATH里。 - 验证安装:打开CMD,输入
ffmpeg -version,看到版本信息就说明成功了。
我的经验:别用Windows Store里的FFmpeg,那个版本经常缺组件。直接下载官方编译包最省心。
2.1.2 macOS下的安装
macOS用户就简单多了。用Homebrew一行命令搞定:
brew install ffmpeg
Homebrew会自动处理依赖,包括x264、x265这些编码器。安装完记得跑一下 ffmpeg -encoders | grep h264,确认H.264编码器可用。
2.1.3 Linux下的安装
Ubuntu/Debian用户:
sudo apt update
sudo apt install ffmpeg
CentOS/RHEL用户:
sudo yum install epel-release
sudo yum install ffmpeg ffmpeg-devel
注意:Ubuntu官方源的FFmpeg版本可能比较旧。如果你需要最新的编码器支持,建议从源码编译,或者使用static builds。
2.1.4 验证FFmpeg的核心功能
安装完别急着走,先跑几个命令确认一下:
# 查看版本
ffmpeg -version
# 查看支持的编码器
ffmpeg -encoders
# 查看支持的协议(确认有rtsp)
ffmpeg -protocols | grep rtsp
如果 ffmpeg -protocols 里能看到 rtsp,说明你的FFmpeg支持RTSP推流和拉流。我曾经遇到过编译版本没带RTSP协议的情况,折腾了半天才发现是版本问题。
2.2 VLC:不只是播放器
VLC是个万能播放器,但它还能做流媒体测试。我经常用它来拉RTSP流,验证推流是否成功。
2.2.1 安装VLC
去VLC官网下载对应系统的安装包。Windows和macOS都有图形化安装器,一路Next就行。Linux用户用包管理器:
sudo apt install vlc # Ubuntu/Debian
sudo yum install vlc # CentOS/RHEL
2.2.2 用VLC拉RTSP流
安装完后,打开VLC,按 Ctrl+N(macOS是 Cmd+N),输入RTSP地址,比如:
rtsp://192.168.1.100:8554/live
点击播放,就能看到流了。如果黑屏,别慌,可能是推流端没启动,或者地址写错了。
小技巧:VLC的「媒体信息」窗口(Ctrl+I)能查看流的编码参数、帧率、码率。调试时特别好用。
2.3 RTSP服务器:Live555 vs Mediamtx
RTSP服务器是整个推流链路的核心。市面上有很多选择,但最经典的是Live555,最现代的是Mediamtx。我两个都讲,你根据场景选。
| 特性 | Live555 | Mediamtx |
|---|---|---|
| 开发语言 | C++ | Go |
| 部署难度 | 中等(需编译) | 简单(单二进制) |
| 协议支持 | RTSP/RTP/RTCP | RTSP/RTMP/HLS/WebRTC |
| 性能 | 高(底层C++) | 高(Go协程) |
| 配置方式 | 命令行参数 | YAML配置文件 |
| 适用场景 | 嵌入式、低延迟 | 多协议、快速原型 |
2.3.1 搭建Live555服务器
Live555是RTSP协议的参考实现。很多摄像头和编码器都内置了它。但它的配置方式比较「复古」。
下载与编译:
# 下载源码
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar -xzf live555-latest.tar.gz
cd live
# 编译
./genMakefiles linux
make
# 编译完成后,会在 live/testProgs 目录下生成 live555MediaServer
启动服务器:
cd testProgs
./live555MediaServer
默认监听端口是8554。把视频文件放到 live/testProgs 目录下,客户端就能通过 rtsp://你的IP:8554/<文件名> 来播放了。
踩坑记录:我曾经在CentOS上编译Live555,结果报错 socket() failed: Address family not supported by protocol。后来发现是IPv6没关。在 live555MediaServer.cpp 里把 IPv6 相关的代码注释掉就好了。
2.3.2 搭建Mediamtx服务器
Mediamtx(原名RTSP-Simple-Server)是后起之秀。它用Go写的,一个二进制文件搞定所有事。我个人非常推荐新手用这个。
下载与安装:
# 去GitHub Releases页面下载对应系统的二进制文件
# 或者用Docker
docker run --rm -p 8554:8554 -p 1935:1935 -p 8888:8888 \
-v $PWD/mediamtx.yml:/mediamtx.yml \
bluenviron/mediamtx:latest
配置文件(mediamtx.yml):
rtspAddress: :8554
rtmpAddress: :1935
hlsAddress: :8888
paths:
all:
source: publisher
启动服务器:
./mediamtx mediamtx.yml
启动后,任何客户端都能通过 rtsp://你的IP:8554/<任意路径> 来推流或拉流。
我的建议:学习阶段用Mediamtx,它配置简单、日志清晰。生产环境如果追求极致性能,再考虑Live555。
2.4 本章知识体系
下面这张图帮你理清三个工具之间的关系:
2.5 快速验证:推流与拉流
环境搭好了,我们来跑一个完整的流程,确保所有工具都能正常工作。
2.5.1 启动RTSP服务器
以Mediamtx为例:
./mediamtx mediamtx.yml
看到日志输出 listener opened on :8554,说明服务器启动成功。
2.5.2 用FFmpeg推流
推一个测试视频流:
ffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://localhost:8554/live/test
参数说明:
-re:以原始帧率读取(模拟实时推流)-i test.mp4:输入文件-c copy:不重新编码,直接复制流-f rtsp:输出格式为RTSP
注意:如果你没有测试视频,可以用FFmpeg生成一个:ffmpeg -f lavfi -i testsrc2 -f lavfi -i sine -t 30 test.mp4
2.5.3 用VLC拉流验证
打开VLC,按 Ctrl+N,输入:
rtsp://localhost:8554/live/test
如果一切正常,你应该能看到视频画面。如果只有声音没有画面,或者只有画面没有声音,检查一下编码格式是否兼容。
常见问题:
- 连接被拒绝:检查服务器是否启动,端口是否被防火墙拦截。
- 黑屏但有声音:视频编码格式VLC不支持,试试
-c:v libx264重新编码。 - 延迟很高:默认缓冲区较大,VLC里可以调低「网络缓存」值(工具→偏好设置→输入/编解码器→网络缓存,设为300ms)。
2.6 本章小结
到这步,你的RTSP实验环境就搭好了。FFmpeg负责推流,VLC负责拉流验证,Live555或Mediamtx作为中间桥梁。这三个工具的组合,能覆盖你后面90%的实验场景。
我个人建议你先把Mediamtx跑熟,它配置简单、日志清晰,适合快速验证想法。等后面需要深入RTSP协议细节时,再切换到Live555去研究底层实现。
嗯,环境搭好了,接下来就可以开始真正的推流实战了。