使用 MediaMTX 和 RTSP 协议搭建低延迟直播服务器
服务端部署
服务端采用MediaMTX,可以在Release页面中下载最新版本,目前官方支持arm架构的linux和x64版本的linux和Windows。
- 下载后解压,会获得一个可执行文件和一个yaml配置文件,首先修改yaml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 此处仅展示需要修改的项
# Protocols 修改为仅tcp
protocols: [tcp]
# Username required to publish.
# 限制推流用户名
publishUser: "lxnchan"
# Password required to publish.
# 限制推流密码,也可以用"sha256:xxxxx"使用sha256
publishPass: "lxnchan1234"
# IPs or networks (x.x.x.x/24) allowed to publish.
# 也可以直接限制推流IP地址,留空不限制
publishIPs: [] - 启动主程序记下其中一行输出:
1
./mediamtx
1
2024/01/17 10:12:47 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
直播端推流
目前来说我这边推流使用OBS Studio,但OBS并不支持直接向服务器推RTSP流,因此我们这里采取曲线救国的方法,通过录像到URL的形式来推流。
- 打开OBS Studio,选择“文件”-“设置”-“输出”-“输出模式”更改为“高级”-切换到“录像”选项卡,下方“类型”选择“自定义输出”
- 下方“输出类型”选择“输出到URL”,随后URL按照如下格式填写:其中用户名和密码是上面设置的,服务器地址是你的服务器地址,端口是你的服务器端口(上面记录的那行日志中
1
rtsp://用户名:密码@服务器地址:端口/流id
TCP
的所在端口),流ID随意填写但不要和实例内别人重复。
示例:1
rtsp://lxnchan:lxnchan1234@192.168.10.12:8554/live1
- 容器格式选择
rstp
- 视频码率和关键帧间隔根据实际情况调整,通常是越大质量越好,但对服务器和带宽要求更高,带机量相对更低。
- 视频编码器设置按如下填写
1
-preset:v llhq -tune:v zerolatency -profile veryfast
-preset:v llhq
: 使用高质量低延迟预设(仅限显卡编码)-tune:v zerolatency
: 使用低延迟模式-profile veryfast
: 启用veryfast预设
- 保存设置后直接开始录制即开始推流。
客户端播放
这里采用VLC做播放介质。
打开VLC,选择“媒体”-“打开网络串流”,输入如下格式的URL:
1 | rtsp://read用户名:read密码@IP地址:端口号/流id |
例如:
1 | rtsp://user:passw0rd@192.168.10.12:8554/live1 |
如果没设置read用户名密码可以直接去掉前半部分。
其他问题
报WARN:write queue is full
长时间推流需要先关一下或者提高配置文件中writeQueueSize
的值。注意,提高该值会导致内存占用提高。