Home

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

· 7 min read
img of MediaMTX流媒体服务器完整部署指南:从入门到实践

引言

在当今数字时代,流媒体服务已成为众多应用场景的刚需。无论是视频直播、安防监控还是远程教育,都需要一个稳定高效的流媒体服务器。MediaMTX(原rtsp-simple-server)作为一个功能强大的开源流媒体服务器,提供了多协议支持和灵活的部署方案。

本文将详细介绍如何部署和使用MediaMTX,帮助您快速搭建专业级流媒体系统。

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/macOSLinux
CPU双核四核+
内存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推流配置

  1. 打开OBS Studio最新版
  2. 添加新的推流服务器
  3. 选择WHIP协议
  4. 服务器URL填写: http://your-ip:8889/streamkey/whip

OBS WebRTC配置

浏览器推流

  1. 访问 http://your-ip:8889/streamkey/publish
  2. 允许浏览器使用摄像头和麦克风
  3. 点击”Start Publishing”开始推流

浏览器推流

拉流方式

  1. OBS拉流
    • 使用RTSP协议: rtsp://your-ip:8554/streamkey
  2. 浏览器拉流
    • 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协议
  • 优化网络配置
  • 监控系统资源

最佳实践建议

  1. 使用host网络模式部署Docker
  2. 启用TLS加密保护流安全
  3. 配置适当的缓冲区大小
  4. 实施访问控制
  5. 定期备份录制文件

总结

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

参考资源