使用 MediaMTX + RTSP 搭建低延迟直播服务器

使用 MediaMTX + RTSP 搭建低延迟直播服务器

💡 原文中文,约1300字,阅读约需4分钟。
📝

内容提要

使用MediaMTX和RTSP协议搭建低延迟直播服务器。服务端部署时需修改配置文件,启动主程序后记下输出的监听端口。直播端使用OBS Studio通过录像到URL的方式推流,设置用户名、密码、服务器地址和端口。客户端使用VLC播放,输入URL即可。注意报错WARN:write queue is full。

🔎

延伸解读

OBS 推 RTSP 的变通方法与编码设置

OBS 本身不支持直接推 RTSP 流,文章采用“录像到 URL”的方式实现推流。在 OBS 输出设置中需将输出模式改为“高级”,并在录像选项卡中选择“自定义输出”和“输出到 URL”,容器格式选 rstp。视频编码器参数中,-preset:v llhq 和 -tune:v zerolatency 仅限显卡编码,-profile veryfast 则启用 veryfast 预设。这些设置旨在平衡画质与延迟,但具体效果需根据硬件条件调整。

推流地址的构成与流 ID 的唯一性

推流 URL 格式为 rtsp://用户名:密码@服务器地址:端口/流id,其中用户名和密码来自 MediaMTX 配置文件的 publishUser 和 publishPass,端口是启动日志中 TCP 监听端口(如 8554)。流 ID 可随意填写,但必须保证在同一 MediaMTX 实例内不与其他流重复,否则可能导致推流失败或冲突。示例中使用了 live1 作为流 ID,读者可自行替换。

播放端认证与地址简化

VLC 播放时需输入 rtsp://read用户名:read密码@IP地址:端口号/流id。如果 MediaMTX 配置中未设置 read 用户名和密码,则可以省略 URL 中的认证部分,直接使用 rtsp://IP地址:端口号/流id。文章示例中给出了带认证的完整地址,读者应根据服务端实际配置决定是否保留用户名密码字段,避免因多余认证信息导致播放失败。

注意 write queue is full 警告

文章末尾提到可能遇到 WARN:write queue is full 报错,但未展开具体原因和解决方法。这通常意味着服务器写入队列已满,可能与推流码率过高、网络带宽不足或服务器处理能力有限有关。读者在遇到此警告时,可参考文章前面关于视频码率和关键帧间隔的说明,适当降低推流质量以减轻服务器和带宽压力。

❓

Q&A

MediaMTX 支持哪些操作系统和架构?

MediaMTX 官方支持 arm 架构的 Linux、x64 版本的 Linux 和 Windows。

如何配置 MediaMTX 的 RTSP 推流用户名和密码?

在 MediaMTX 的 yaml 配置文件中设置 publishUser 和 publishPass 字段,例如 publishUser: "lxnchan" 和 publishPass: "lxnchan1234"。

OBS Studio 如何推 RTSP 流到 MediaMTX 服务器?

在 OBS 中打开“设置”-“输出”,将输出模式改为“高级”,在“录像”选项卡下将类型设为“自定义输出”,输出类型选“输出到URL”,URL 格式为 rtsp://用户名:密码@服务器地址:端口/流id,容器格式选 rstp,并设置视频编码器参数如 -preset:v llhq -tune:v zerolatency -profile veryfast,保存后开始录制即推流。

使用 VLC 播放 MediaMTX 的 RTSP 流时 URL 怎么写?

在 VLC 中选择“媒体”-“打开网络串流”,输入 URL 格式:rtsp://read用户名:read密码@IP地址:端口号/流id,例如 rtsp://user:passw0rd@192.168.10.12:8554/live1。如果未设置 read 用户名密码,可以省略前半部分。

MediaMTX 启动后如何确定 RTSP 监听端口?

启动主程序 ./mediamtx 后,查看输出日志中类似“INF [RTSP] listener opened on :8554 (TCP)”的行,其中 8554 即为 RTSP 的 TCP 监听端口。

推流时出现 WARN: write queue is full 警告怎么办?

文章仅提及此警告,未给出具体解决方法。

➡️

继续阅读