MediaMTX流媒体服务器完整部署指南:从入门到实践

2025-05-07 05:30:26 / c罗世界杯图片

引言

在当今数字时代,流媒体服务已成为众多应用场景的刚需。无论是视频直播、安防监控还是远程教育,都需要一个稳定高效的流媒体服务器。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/macOSLinuxCPU双核四核+内存1GB4GB+

基础安装配置

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

浏览器拉流

WebRTC方式: http://your-ip:8889/streamkey

HLS方式: http://your-ip:8888/streamkey

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提供了一个功能完整、易于部署的流媒体服务器解决方案。通过本文的配置指南,您可以快速搭建起支持多协议的专业级流媒体系统,满足直播、监控等多种应用场景的需求。

参考资源

MediaMTX GitHub仓库

FFmpeg官方文档