第3章 Live555搭建:从源码到第一个RTSP流
Live555 这套库,圈内人都知道。它不是什么商业级产品,但做原型验证、学习 RTSP 协议、甚至跑一些小规模的内网流,完全够用。我最早接触流媒体时,第一个跑通的 RTSP 服务器就是它。说实话,当时看到 VLC 能拉出画面,还挺激动的。
这一章,我们就从零开始,把 Live555 的 MediaServer 跑起来。源码下载、编译、启动、测试,一步到位。
3.1 源码下载:选对版本很重要
Live555 的源码托管在官网,没有 Git 仓库,直接给 tar.gz 包。我个人习惯用 wget 拉下来,干净利落。
# 下载最新源码(2024年版本)
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
# 解压
tar -xzf live555-latest.tar.gz
cd live
解压后目录结构长这样:
live/
├── BasicUsageEnvironment/
├── groupsock/
├── liveMedia/
├── MediaServer/
├── testProgs/
├── UsageEnvironment/
└── config.* # 各平台的编译配置文件
嗯,这里要注意:MediaServer 目录就是我们最终要编译的目标。其他目录是依赖库,编译时会自动链接。
3.2 编译配置:跨平台其实不复杂
Live555 的编译系统很古老——没有 CMake,没有 autotools,就是纯 Makefile + 配置文件。我第一次用的时候还愣了一下,心想这年头还有人这么搞?但用顺手了发现,其实挺直接的。
编译前先看看你的操作系统,然后执行对应的配置脚本:
| 操作系统 | 配置命令 | 说明 |
|---|---|---|
| Linux (x86_64) | ./genMakefiles linux-64bit |
最常见,Ubuntu/CentOS 通用 |
| Linux (32-bit) | ./genMakefiles linux |
老机器或嵌入式环境 |
| macOS (Intel) | ./genMakefiles macosx |
注意 M1/M2 芯片需要额外处理 |
| macOS (Apple Silicon) | ./genMakefiles macosx-arm64 |
M1/M2 专用配置 |
| Windows (MSYS2) | ./genMakefiles mingw |
需要先装 MSYS2 环境 |
./genMakefiles linux,结果编译报错说找不到 clock_gettime。后来发现 64 位系统必须用 linux-64bit 配置。32 位配置默认没开 POSIX 时间函数。所以,64 位系统一定选 linux-64bit。
配置完成后,直接 make 就行:
make -j$(nproc)
编译过程大概 1-2 分钟。如果没报错,你会看到 MediaServer 目录下生成了 live555MediaServer 这个可执行文件。
3.3 MediaServer 启动:三行命令的事
启动 MediaServer 非常简单。它默认监听 8554 端口(不是 554,因为 554 需要 root 权限)。
cd MediaServer
./live555MediaServer
看到这行输出,就说明启动成功了:
LIVE555 Media Server version 1.11 (LIVE555 Streaming Media library version 2024.01.25)
Play streams from this server using the URL:
rtsp://192.168.1.100:8554/<filename>
它会自动打印出本机 IP 和 RTSP URL 格式。如果你有多个网卡,它默认选第一个。我个人习惯手动指定网卡,但 Live555 没提供这个参数——想要改的话得改源码,后面章节会讲。
-p 参数修改,比如 ./live555MediaServer -p 8555。但注意,如果改成 554,必须用 root 权限运行。
3.4 RTSP URL 格式:搞懂规则才能拉流
MediaServer 启动后,它会自动扫描当前目录下的媒体文件。你想想看,它其实就是一个文件服务器——你把视频文件丢到 MediaServer 目录下,它就能通过 RTSP 推出去。
URL 格式很简单:
rtsp://<服务器IP>:<端口>/<文件名>
举个例子:
| 文件位置 | RTSP URL |
|---|---|
./MediaServer/test.mp4 |
rtsp://192.168.1.100:8554/test.mp4 |
./MediaServer/subdir/video.h264 |
rtsp://192.168.1.100:8554/subdir/video.h264 |
./MediaServer/live.ts |
rtsp://192.168.1.100:8554/live.ts |
ffmpeg -i input.mp4 -movflags faststart output.mp4 转一下就好了。
3.5 客户端测试:验证你的服务器
服务器跑起来了,怎么验证?最常用的工具是 VLC 和 FFmpeg。我个人更推荐 FFmpeg,因为能看到详细的协议交互日志。
方法一:VLC 拉流
- 打开 VLC,点击「媒体」→「打开网络串流」
- 输入
rtsp://192.168.1.100:8554/test.mp4 - 点击「播放」
如果一切正常,VLC 会开始播放视频。如果卡在缓冲界面,八成是文件格式不兼容,或者防火墙没放行 8554 端口。
方法二:FFmpeg 拉流(推荐)
ffplay rtsp://192.168.1.100:8554/test.mp4
或者用 FFmpeg 转存到本地文件:
ffmpeg -i rtsp://192.168.1.100:8554/test.mp4 -c copy output.mp4
用 FFmpeg 的好处是,如果拉流失败,它会直接打印错误信息。比如:
[rtsp @ 0x7f8b1c000b80] method DESCRIBE failed: 404 Not Found
看到 404,说明文件名写错了,或者文件不在 MediaServer 目录下。
方法三:用 OpenRTSP 命令行测试
Live555 自带了一个测试工具 openRTSP,在 testProgs 目录下。编译完就有:
./testProgs/openRTSP -4 rtsp://192.168.1.100:8554/test.mp4
-4 参数表示只保存视频轨,不保存音频。它会生成一个 video-H264-1 文件,直接用 VLC 就能打开。
3.6 整体流程回顾
这一套流程走下来,其实就四步:下载 → 配置 → 编译 → 运行。但每一步都有小坑。我画了一张图,帮你把整个链路串起来:
3.7 避坑总结
最后,我把这些年踩过的坑列一下,你遇到类似问题可以直接翻:
- 编译报错找不到头文件:多半是
genMakefiles选错了平台配置。64 位系统用linux-64bit,别偷懒。 - 启动后客户端连不上:先
telnet 192.168.1.100 8554试试端口通不通。不通就去检查防火墙。 - VLC 播放卡住:文件格式问题。MP4 的话用
ffmpeg -i input.mp4 -movflags faststart output.mp4重新封装一下。 - 多网卡环境 IP 不对:Live555 默认选第一个网卡。想指定网卡得改源码,后面章节会讲怎么改。
- 端口被占用:用
lsof -i :8554查一下谁在占用,或者换个端口启动。
嗯,到这里,你的第一个 RTSP 流媒体服务器就跑起来了。虽然 Live555 功能简单,但作为学习 RTSP 协议的起点,它足够轻量、足够透明。后面我们会在这个基础上,一步步加功能、做优化。