2. 环境搭建:FFmpeg安装与配置、VLC播放器安装、RTSP服务器搭建(Live555/Mediamtx)

做流媒体开发,说白了就是跟三样东西打交道:推流工具、播放器、流媒体服务器。这三样搭好了,后面的实验才能跑起来。

我刚开始学RTSP的时候,光装环境就折腾了两天。不是版本冲突,就是编译报错。后来我总结了一套「稳如老狗」的安装流程,今天全部分享给你。

本章目标:在你的电脑上搭建一套完整的RTSP推流实验环境,包括FFmpeg、VLC、以及两款主流的RTSP服务器(Live555和Mediamtx)。

2.1 FFmpeg:推流与转码的瑞士军刀

FFmpeg是音视频开发者的标配。推流、拉流、转码、截图,它全都能干。我个人习惯把它放在系统PATH里,这样在任何目录下都能直接调用。

2.1.1 Windows下的安装

  1. 下载编译好的二进制包:去FFmpeg官网的Download页面,选择Windows builds。我推荐用gyan.dev的版本,稳定且更新及时。
  2. 解压:把压缩包解压到 C:\ffmpeg 或者你喜欢的路径。
  3. 配置环境变量:把 C:\ffmpeg\bin 添加到系统PATH里。
  4. 验证安装:打开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 本章知识体系

下面这张图帮你理清三个工具之间的关系:

RTSP推流实验环境架构 FFmpeg(推流端) RTSP 服务器 VLC(播放端) RTSP Push RTSP Pull Live555 Mediamtx 核心流程 FFmpeg 通过 RTSP 协议将音视频数据推送到服务器 VLC 作为客户端从服务器拉取 RTSP 流进行播放

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去研究底层实现。

嗯,环境搭好了,接下来就可以开始真正的推流实战了。