在音视频开发、直播系统搭建、摄像头接入以及流媒体转发等场景中,推流和拉流服务几乎是绕不开的一环。无论是 RTSP 摄像头转 Web 播放,还是 RTMP、HLS、WebRTC 等协议之间的转换,一个稳定、私有、易部署、可维护的流媒体服务都能大大降低开发和运维成本。

本文主要推荐三款常见的开源流媒体服务:MediaMTXZLMediaKitSRS。它们各自有不同的定位和优势:有的轻量简单,适合快速搭建和测试;有的功能丰富,适合复杂的音视频业务场景;也有的在直播、低延迟和协议支持方面表现突出。

文章主要为介绍如何快速安装搭建以及简单实现推拉流方法,不需要复杂的协议底层原理知识,只需跟着步骤就能直简单上手起来。同时下面也会介绍各种协议之间的区别和如何选择,文章采用OBS的推流方法来列举推流链接格式。

软件共有的重要特性:

  • 同时推拉多条流媒体
  • 自动转换协议-协议自动桥接
    (推流一般建议rtmp比较稳,拉流需要看情况所以需要有协议转换)

常见流媒体协议特性对比:

协议底层协议主要用途延迟优点缺点常见场景
SRTUDP低延迟远程传输抗丢包能力强、弱网优化好、支持加密配置相对复杂、生态不如 RTMP 普及跨公网传输、远程导播、运营商专线替代
WebRTCUDP(主要)实时音视频通信极低(毫秒级)超低延迟、浏览器原生支持、互动能力强NAT 穿透复杂、服务部署难度高视频会议、连麦直播、实时互动
RTSPTCP / UDP摄像头流控制与传输IPC/NVR 兼容性高、控制能力强浏览器不直接支持安防监控、摄像头接入
RTMPTCP直播推流较低稳定、成熟、推流生态完善Flash 被淘汰后浏览器支持弱OBS 推流、直播平台推流入口
HLSHTTP(TCP)视频分发与点播CDN 兼容性强、浏览器支持好延迟高点播、直播观看、大规模分发
MPEG-TSUDP / TCP音视频封装格式中低兼容性强、传输稳定只是封装格式,不是完整业务协议DVB、直播流封装、TS 切片
RTPUDP(常见)实时媒体传输轻量、实时性好不保证可靠性RTSP、WebRTC、VoIP 底层媒体传输

*具体描述可在这个帖子查看

协议端口介绍:

前缀协议默认端口协议底层传输URL 前缀说明
1935RTMPTCPrtmp:// rtmps://RTMP 默认端口,常用于直播推流与拉流。如果使用默认端口,URL 中通常可以省略端口号。
554RTSPTCPrtsp:// rtsps://RTSP 默认端口,主要用于摄像头、NVR 等设备的视频流传输。使用默认端口时一般可省略端口号。
8000RTP / RTCP / WebRTC / RTSPUDP(通常无固定前缀)常用于 RTSP 的 UDP 模式数据传输(RTP/RTCP),同时也常作为 WebRTC 的 UDP 媒体传输端口。
(须手动加) SRTUDPsrt://SRT 默认服务端口之一,用于低延迟、弱网环境的视频传输。由于协议本身没有固定默认端口,通常需要手动在域名后面加端口号。
80HTTP / 信令TCPhttp://默认 Web 服务端口,常用于后台管理页面、HTTP API,以及 WebRTC 的 HTTP 信令交换。默认情况下可省略端口号。
443HTTPS / WSSTCPhttps:// wss://TLS/SSL 默认端口,用于 HTTPS 页面访问及加密 WebSocket 通信。默认情况下可省略端口号。
30000-30500WebSocket 动态端口TCPws:// wss://WebSocket 建立连接后,部分服务会动态分配该范围内端口用于后续数据通信。具体端口范围通常可在配置文件中修改。
  • RTSP 既支持 TCP,也支持 UDP:

    • TCP 模式更稳定
    • UDP 模式延迟更低
  • WebRTC 通常会同时使用:

    • HTTP/HTTPS 做信令交换
    • UDP 做真实音视频传输
  • wss:// 本质上是:

    • WebSocket + TLS(类似 HTTPS 和 HTTP 的关系)

很多流媒体服务(如 ZLMediaKit、SRS、MediaMTX)默认都会同时监听多个协议端口,因此部署时要注意防火墙和端口占用。

使用前缀协议+默认端口就不用手动在域名后添加,但是如果有问题连不上先看看配置文件,各个平台的配置端口可能不一样,再检查网络问题。

OBS配置设置:

根据推荐的三个平台配置填入参数,此为OBS推流通用配置

通用推流设置

  • 启动OBS并转到文件 – 设置 – 直播,配置如下:

    • 服务: 自定义...
    • 服务器: rtmp://(IP、域名、本地)/(任意字母数字)
    • 推流码: (可选,会加到字母文本后面就像rtmp://localhost/(任意字母数字)/(推流码))
  • 如果要同时推webRTC转到设置 – 输出 – 录制,配置如下:

    • FFmpeg 输出类型: 输出到URL
    • 保存路径或URL: rtsp://(IP、域名、本地):8554(同时输入避免端口占用)/(任意字母数字)
    • 封装格式: rtsp
    • 检查 显示所有编解码器(即使可能不兼容)
    • 视频编码器: h264_nvenc (libx264)
    • 视频编码器设置 (如有): bf=0
    • 音轨: 2
    • 音频编码器: libopus

    OBS推WebRTC

  • 启动OBS并转到文件 – 设置 – 直播,配置:

    • 服务: WHIP
    • 服务器: http://(IP、域名、本地):8889/(任意字母数字)/whip

接下来开始安装和介绍三个不同的服务软件

一、MediaMTX

简介

最先推荐 MediaMTX 一个非常轻量级的流媒体服务器,主打“开箱即用”。它是单二进制程序(构建好了的单可执行文件),没有复杂依赖不用配置环境,下载好后双击即可自动运行,非常适合本地调试或小型项目。
支持协议:SRT、WebRTC、RTSP、RTMP、HLS、MPEG-TS、RTP
支持特性:认证、转发、API控制、录制流
  • 满足推拉流的基本功能,不花里胡哨。

安装方式

(Win):

# 下载
https://github.com/bluenviron/mediamtx/releases/latest/download/mediamtx_windows_amd64.zip

# 右键解压可得mediamtx.exe
双击mediamtx.exe启动

#附带配置文件可自行打开配置
mediamtx.yml

(Linux/Mac):

# 下载
wget https://github.com/bluenviron/mediamtx/releases/latest/download/mediamtx_linux_amd64.tar.gz

# 解压
tar -xvf mediamtx_linux_amd64.tar.gz

# 启动
./mediamtx

启动后默认监听多个协议(RTSP、RTMP、HLS、WebRTC 等),无需额外配置即可使用。

启动后会显示当前激活协议占用的端口
启动后会显示当前激活协议占用的端口

推流示例

RTMP
服务:自定义...
服务器:rtmp(s)://(IP、域名、本地)/(任意字母数字)
推流码:(推流码任意字母数字)

WebRTC
服务:WHIP
服务器:http://(IP、域名、本地):8889/(任意字母数字)/whip

拉流示例

#注意这个平台配置默认rstp端口为8554需手动添加端口后缀,如不想添加可在配置修改为855即可
rtsp(s)://(IP、域名、本地):8554/(你的字母数字)/(推流码)
rtmp(s)://(IP、域名、本地)/(你的字母数字)/(推流码)
srt://(IP、域名、本地):8890?streamid=read:(你的字母数字);key=(推流码)

HLS
http://(IP、域名、本地):8888/(你的字母数字)/(推流码)
http://(IP、域名、本地):8888/(你的字母数字)/(推流码)/index.m3u8

WebRTC
http://(IP、域名、本地):8889/(你的字母数字)
或
http://(IP、域名、本地):8889/(你的字母数字)/whep

二、ZLMediaKit

简介

明天继续填坑。。。