内容提要
使用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 警告怎么办?
文章仅提及此警告,未给出具体解决方法。