MediaMTX流媒体服务器完整部署指南:从入门到实践
· 7 min read
引言
在当今数字时代,流媒体服务已成为众多应用场景的刚需。无论是视频直播、安防监控还是远程教育,都需要一个稳定高效的流媒体服务器。MediaMTX(原rtsp-simple-server)作为一个功能强大的开源流媒体服务器,提供了多协议支持和灵活的部署方案。
本文将详细介绍如何部署和使用MediaMTX,帮助您快速搭建专业级流媒体系统。
💡 如果你需要搭建支持多协议的流媒体服务器,MediaMTX是一个理想的选择。
为什么选择MediaMTX?
在众多流媒体服务器方案中,MediaMTX具有以下优势:
- 🚀 零依赖部署,单文件运行
- 💾 支持多种流媒体协议
- 🔄 自动协议转换
- 🛠️ 支持录制和回放
- 🔒 内置认证机制
- 📊 Prometheus监控支持
- 🌐 支持多平台(Linux/Windows/macOS)
MediaMTX核心特性
MediaMTX提供了丰富的功能特性:
支持的发布协议
- ✨ SRT (支持H.265/H.264等编码)
- 🌐 WebRTC (支持WHIP)
- 📡 RTSP (支持UDP/TCP/RTSPS)
- 🔄 RTMP (支持RTMPS)
- 📺 HLS (支持低延迟HLS)
- 📹 UDP/MPEG-TS
支持的播放协议
- 🎥 SRT
- 🖥️ WebRTC (支持WHEP)
- 📱 RTSP
- 💻 RTMP
- 🌍 HLS
环境要求
在开始部署之前,请确保您的系统满足以下要求:
要求项 | 最低配置 | 推荐配置 |
---|---|---|
操作系统 | Linux/Windows/macOS | Linux |
CPU | 双核 | 四核+ |
内存 | 1GB | 4GB+ |
基础安装配置
1. 使用Docker部署
创建 docker-compose.yml
文件:
version: '3'
services:
mediamtx:
image: bluenviron/mediamtx:latest
container_name: mediamtx
network_mode: host # 推荐使用host网络模式
volumes:
- ./mediamtx.yml:/mediamtx.yml
restart: unless-stopped
2. 启动服务
docker-compose up -d
3. 验证安装
访问 http://localhost:9997/v3/paths/list
查看API是否正常响应。
核心功能配置
基础配置示例
创建 mediamtx.yml
配置文件:
# API配置
api: yes
apiAddress: :9997
# RTSP配置
rtspAddress: :8554
protocols: [tcp, udp]
rtspsAddress: :8322
# RTMP配置
rtmpAddress: :1935
rtmpsAddress: :1936
# HLS配置
hlsAddress: :8888
hlsAlwaysRemux: yes
hlsSegmentCount: 3
hlsSegmentDuration: 1s
认证配置
启用基于用户的认证:
authInternalUsers:
- user: admin
pass: admin123
permissions:
- action: publish
- action: read
录制功能
配置流录制:
pathDefaults:
record: yes
recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S-%f
## 可以为 mp4 也可以是 mpegts 即 ts分片
recordFormat: fmp4
实用场景配置
1. 安防监控接入
paths:
cam1:
source: rtsp://admin:[email protected]/stream1
sourceOnDemand: yes
2. 推流直播
paths:
live:
runOnInit: ffmpeg -re -i source.mp4 -c copy -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
runOnInitRestart: yes
3. 协议转换
paths:
convert:
source: rtsp://original-source
# 自动转换为其他协议(RTMP/HLS/WebRTC)
推拉流示例
SRT协议推拉流
SRT(Secure Reliable Transport)是一种开源的视频传输协议,特别适合在不稳定网络下传输低延迟的视频流。
基础格式
# SRT URL格式
srt://host:port?streamid=publish/read:streamname:username:password&pkt_size=1316
推流示例
# 使用FFmpeg推送视频文件
ffmpeg -re -i input.mp4 -c:v h264 -c:a aac -f mpegts \
"srt://localhost:8890?streamid=publish:s1001&pkt_size=1316"
# 带认证的推流
ffmpeg -re -i input.mp4 -c:v h264 -c:a aac -f mpegts \
"srt://localhost:8890?streamid=publish:s1001:admin:password&pkt_size=1316"
拉流示例
# 使用FFplay播放
ffplay "srt://localhost:8890?streamid=read:s1001&pkt_size=1316"
# 使用FFmpeg拉流并转码
ffmpeg -i "srt://localhost:8890?streamid=read:s1001&pkt_size=1316" \
-c:v h264 -c:a aac output.mp4
RTSP协议推拉流
RTSP是最常用的流媒体协议之一,特别适合安防监控场景。
推流示例
# 循环推送视频文件
ffmpeg -re -stream_loop -1 -i input.mp4 -c:v copy -c:a aac \
-f rtsp rtsp://localhost:8554/live
# 推送摄像头画面
ffmpeg -f v4l2 -i /dev/video0 -c:v h264 -f rtsp \
rtsp://localhost:8554/camera1
拉流示例
# 使用FFplay播放
ffplay rtsp://localhost:8554/live
# 使用VLC播放
vlc rtsp://localhost:8554/live
WebRTC推拉流
WebRTC支持通过浏览器进行低延迟的视频传输。
OBS推流配置
- 打开OBS Studio最新版
- 添加新的推流服务器
- 选择WHIP协议
- 服务器URL填写:
http://your-ip:8889/streamkey/whip
浏览器推流
- 访问
http://your-ip:8889/streamkey/publish
- 允许浏览器使用摄像头和麦克风
- 点击”Start Publishing”开始推流
拉流方式
- OBS拉流
- 使用RTSP协议:
rtsp://your-ip:8554/streamkey
- 使用RTSP协议:
- 浏览器拉流
- WebRTC方式:
http://your-ip:8889/streamkey
- HLS方式:
http://your-ip:8888/streamkey
- WebRTC方式:
RTMP推拉流
RTMP仍然是直播平台最常用的协议之一。
推流示例
# 使用FFmpeg推流
ffmpeg -re -i input.mp4 -c:v h264 -c:a aac -f flv \
rtmp://localhost:1935/live/stream1
# OBS推流配置
服务器: rtmp://localhost:1935/live
串流密钥: stream1
拉流示例
# FFmpeg拉流
ffplay rtmp://localhost:1935/live/stream1
# VLC播放
vlc rtmp://localhost:1935/live/stream1
多协议转换示例
MediaMTX支持自动在不同协议间转换,配置示例:
paths:
live:
# 支持所有协议访问同一个流
source: rtsp://camera-source/streamkey
# 可通过以下方式访问:
# RTSP: rtsp://localhost:8554/streamkey
# RTMP: rtmp://localhost:1935/streamkey
# HLS: http://localhost:8888/streamkey
# WebRTC: http://localhost:8889/streamkey
💡 提示:实际使用时请将localhost替换为您的服务器IP地址。
性能优化
1. 系统参数调优
# 提高并发性能
readBufferSize: 4096
writeQueueSize: 4096
udpMaxPayloadSize: 1472
2. 网络优化
# 启用TCP模式提高稳定性
protocols: [tcp]
# WebRTC优化
webrtcICEServers2:
- url: stun:stun.l.google.com:19302
监控与维护
1. Prometheus监控
启用metrics接口:
metrics: yes
metricsAddress: :9998
2. 日志配置
logLevel: info
logDestinations: [stdout]
常见问题解决
1. 流无法播放
- 检查网络连接
- 确认协议支持
- 验证认证信息
- 查看服务日志
2. 性能问题
- 调整缓冲区大小
- 使用TCP协议
- 优化网络配置
- 监控系统资源
最佳实践建议
- 使用host网络模式部署Docker
- 启用TLS加密保护流安全
- 配置适当的缓冲区大小
- 实施访问控制
- 定期备份录制文件
总结
MediaMTX提供了一个功能完整、易于部署的流媒体服务器解决方案。通过本文的配置指南,您可以快速搭建起支持多协议的专业级流媒体系统,满足直播、监控等多种应用场景的需求。