使用 OBS Studio 向 MediaMTX 推流:RTMP / RTMPS / WebRTC (WHIP) 完整实战指南
【免费下载链接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.项目地址: https://gitcode.com/GitHub_Trending/me/mediamtx
本文是一份面向直播推流者的 MediaMTX 实战指南,讲解如何用 OBS Studio 作为推流端,分别以 RTMP 与 WebRTC/WHIP 两种协议把音视频流发布到 MediaMTX 服务器,并覆盖单流、多轨视频(simulcast)、链路加密(RTMPS / HTTPS-WHIP)等进阶场景。读完本文,你将掌握 OBS 中每一处关键配置项的准确含义,理解推流 URL 与 MediaMTX 路径(path)的对应关系,并能独立完成从本地证书签发到加密推流上线的全流程。
推流方案总览
MediaMTX 是一个支持多协议推流与拉流的实时媒体服务器,OBS Studio 可以通过两种方式向它推流:
| 方案 | 底层协议 | OBS 中的 Service 类型 | 推流 URL 示例 |
|---|---|---|---|
| RTMP 客户端 | RTMP / RTMPS | Custom... | rtmp://localhost/mystream |
| WebRTC 客户端 | WebRTC / WHIP | WHIP | http://localhost:8889/mystream/whip |
官方推荐的方式是让 OBS 作为RTMP 客户端推流,这也是兼容性最好、最常用的路径。与此同时,较新版本的 OBS 也内置了WebRTC / WHIP支持,适合需要更低延迟或希望避开 RTMP 传统缺陷的场景。
无论采用哪种协议,推流 URL 中的最后一段路径(如mystream)都会成为 MediaMTX 上的路径名,推流成功后即可通过其他协议(RTSP、HLS、WebRTC、SRT 等)以相同路径读取该流。
OBS 作为 RTMP 客户端推流
标准推流配置
打开 OBS 的Settings -> Stream(设置 → 直播),也可以使用自动配置向导(Auto-configuration Wizard),填入以下参数:
- Service(服务):
Custom...(自定义) - Server(服务器):
rtmp://localhost/mystream - Stream key(串流密钥):留空
保存配置后点击Start streaming(开始直播)即可。
推流成功后,生成的流会在路径/mystream上可用,任何支持读取该路径的客户端都能立即看到。关于 RTMP 客户端支持的具体编码格式,可以参考 RTMP 客户端说明:
- 视频:AV1、VP9、H265、H264
- 音频:Opus、FLAC、MPEG-4 Audio(AAC)、MPEG-1/2 Audio(MP3)、AC-3、G711(PCMA、PCMU)、LPCM
也就是说,OBS 默认的 H.264 + AAC 组合(以及 x264/硬件编码器输出的 H.264)都能直接推流,无需额外转封装。
让流可以被 WebRTC 直接读取
默认情况下,RTMP 推上来的流并不一定具备 WebRTC 读取所需的编码形态。如果你希望生成的流可以直接用 WebRTC 读取,可以改用 OBS 的“录制到 URL”模式,让 OBS 以 RTSP 形式把流推给 MediaMTX(MediaMTX 侧会自动完成转码/转封装,使下游 WebRTC 读取可用)。
打开Settings -> Output -> Recording(设置 → 输出 → 录像),填入以下参数:
- FFmpeg output type(FFmpeg 输出类型):
Output to URL(输出到 URL) - File path or URL(文件路径或 URL):
rtsp://localhost:8554/mystream - Container format(容器格式):
rtsp - 勾选
show all codecs (even if potentially incompatible)(显示所有编解码器,即使可能不兼容) - Video encoder(视频编码器):
h264_nvenc (libx264) - Video encoder settings(视频编码器设置,如有):
bf=0(关闭 B 帧,降低编码延迟) - Audio track(音轨):
1 - Audio encoder(音频编码器):
libopus
配置完成后,点击Start Recording(开始录制)按钮开始推流,而不是Start Streaming。上述 URL 中的端口8554对应 MediaMTX 的 RTSP 监听端口,相关默认值可在 mediamtx.yml 的rtspAddress: :8554中确认。WebRTC 读取该流时要求视频为 H.264/VP8/VP9/AV1/H265、音频为 Opus/G711/G722,因此这里将视频编码为 H.264、音频编码为 Opus,正是为 WebRTC 读取场景做的准备。
多轨视频推流(Multitrack Video)
OBS Studio 31.0.0 及以上版本支持一次推流多个视频轨或不同档位(rendition),即simulcast。打开Settings -> Stream,按如下配置:
- Service(服务):
Custom... - Server(服务器):
rtmp://localhost/mystream - Stream key(串流密钥):留空
- 打开
Enable Multitrack Video(启用多轨视频) Maximum Streaming Bandwidth与Maximum Video Tracks保持Auto- 打开
Enable Config Override(启用配置覆盖) - 在
Config Override (JSON)中填入以下内容:
{ "encoder_configurations": [ { "type": "obs_x264", "width": 1920, "height": 1080, "framerate": { "numerator": 30, "denominator": 1 }, "settings": { "rate_control": "CBR", "bitrate": 6000, "keyint_sec": 2, "preset": "veryfast", "profile": "high", "tune": "zerolatency" }, "canvas_index": 0 }, { "type": "obs_x264", "width": 640, "height": 480, "framerate": { "numerator": 30, "denominator": 1 }, "settings": { "rate_control": "CBR", "bitrate": 3000, "keyint_sec": 2, "preset": "veryfast", "profile": "main", "tune": "zerolatency" }, "canvas_index": 0 } ], "audio_configurations": { "live": [ { "codec": "ffmpeg_aac", "track_id": 1, "channels": 2, "settings": { "bitrate": 160 } } ] } }上述 JSON 定义了两个视频档位:主档 1920×1080@30fps / 6000 kbps(H.264 High profile),副档 640×480@30fps / 3000 kbps(H.264 Main profile),以及一路双声道 AAC 音频(160 kbps)。其中:
framerate.numerator / framerate.denominator以分数形式表示帧率(30/1 即 30 fps);keyint_sec控制关键帧间隔(单位秒),较小的值有助于降低观看端起播延迟;tune: "zerolatency"让 x264 采用零延迟调优,适合直播场景;canvas_index指定该档位对应的画布序号。
该 JSON 可以按需调整。特别地,type字段用来指定视频编码器,MediaMTX 文档中列出的可用取值如下:
obs_nvenc_av1_tex:NVIDIA NVENC AV1obs_nvenc_hevc_tex:NVIDIA NVENC H265obs_nvenc_h264_tex:NVIDIA NVENC H264av1_texture_amf:AMD AV1h265_texture_amf:AMD H265h264_texture_amf:AMD H264obs_qsv11_av1:QuickSync AV1obs_qsv11_v2:QuickSync H264obs_x264:软件 H264
保存配置并点击Start streaming后,推流同样会落在路径/mystream上。多轨推流对接收端也有要求:需要接收端具备多轨(simulcast)读取能力才能享受多档位切换的好处,具体可参阅 MediaMTX 的读取端文档(如 WebRTC 读取说明)。
加密推流(RTMPS)
当通过 RTMP 向 MediaMTX 推流时,可以使用 RTMP 的加密变体RTMPS对传输链路加密。方法是在推流 URL 中改用rtmpsscheme 和 1936 端口:
rtmps://localhost:1936/mystream前提是 MediaMTX 已允许 RTMP 加密,即在 mediamtx.yml 中将rtmpEncryption设置为"optional"(取值可为no/strict/optional),同时配置rtmpServerKey、rtmpServerCert指向服务器密钥与证书:
rtmpEncryption: "optional" rtmpServerKey: server.key rtmpServerCert: server.crt rtmpsAddress: :1936RTMPS 相关的服务端实现位于 RTMP 服务器,其监听地址与加密开关直接对应上述配置项。
重要限制:OBS Studio 要求 MediaMTX 使用由公共证书颁发机构(CA)签发的 TLS 证书,并且会静默拒绝自签名证书。解决方案有两种:从公共 CA 购买证书,或者自建一个本地 CA,用它签发服务器证书,并在 OBS 所在机器上信任该 CA。下面是完整的本地 CA 流程:
第 1 步:创建本地 CA 的密钥对
openssl req \ -x509 \ -nodes \ -days 3650 \ -newkey rsa:4096 \ -keyout myca.key \ -out myca.crt \ -subj "/O=myca/CN=myca"第 2 步:用该密钥对签发服务器证书
将下面的localhost替换为 OBS Studio 连接服务器时使用的域名:
openssl req \ -newkey rsa:4096 \ -nodes \ -keyout server.key \ -CA myca.crt \ -CAkey myca.key \ -subj "/CN=localhost" \ -x509 \ -days 3650 \ -out server.crt注意:必须使用域名连接服务器,不能使用 IP 地址。如果没有域名,可以在 OBS 所在机器的
/etc/hosts文件中,把服务器 IP 关联到一个虚拟域名。
第 3 步:部署服务器证书
将刚生成的server.key与server.crt放到 MediaMTX 可执行文件所在目录,并确认 mediamtx.yml 中的rtmpServerKey/rtmpServerCert指向它们。
第 4 步:在 OBS 所在机器上信任本地 CA
Linux 系统可执行以下命令把myca.crt安装为系统 CA:
sudo mkdir -p /usr/local/share/ca-certificates sudo cp myca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates警告:如果 OBS Studio 是通过Flatpak安装的,上述方式仍然无效,因为 Flatpak 将 OBS 与宿主隔离,使其无法读取
ca-certificates目录。请改用 snap / ppa / .deb 等其他方式安装 OBS。
Windows 系统则使用如下命令将 CA 加入受信任根证书存储:
certutil -addstore "Root" myca.crt完成以上步骤后,OBS 即可通过rtmps://your-domain:1936/mystream加密推流。更完整的 RTMPS 背景与兼容性说明可参考 RTMP 专有特性文档。
OBS 作为 WebRTC 客户端推流
标准 WHIP 推流
较新版本的 OBS Studio 支持通过WebRTC / WHIP协议直接向服务器推流(WHIP 是 WebRTC 的一个扩展,允许用普通 URL 完成推流,无需经过网页)。打开Settings -> Stream,填入:
- Service(服务):
WHIP - Server(服务器):
http://localhost:8889/mystream/whip
保存配置并点击Start streaming,推流将落在路径/mystream上。
URL 中的8889是 MediaMTX 的 WebRTC 监听端口(见 mediamtx.yml 的webrtcAddress: :8889),路径mystream对应流名称,whip是协议端点标记。这一点可以从服务端源码得到印证:MediaMTX 的 WebRTC HTTP 服务器(internal/servers/webrtc/http_server.go)使用正则^/(.+?)/(whip|whep)$解析 URL,将/{path}/whip识别为 WHIP 推流端点。WHIP 端点同样支持 GET/OPTIONS/POST 等标准握手流程(RFC draft-ietf-whip),并在响应头中通过Link头下发 ICE 服务器信息。
WebRTC / WHIP 推流支持的编码格式请参考 WebRTC 客户端说明:
- 视频:AV1、VP9、VP8、H265、H264
- 音频:Opus、G722、G711(PCMA、PCMU)
因此 OBS 侧需要选择上述编解码器之一进行编码(WebRTC 场景下最常用的是 H.264 + Opus)。WebRTC 与浏览器/客户端的编码兼容性及跨网连通性问题,可进一步阅读 WebRTC 专有特性文档。
WHIP 多轨视频推流(Simulcast)
OBS Studio 32.1.0 及以上版本同样支持通过 WebRTC / WHIP 一次推送多个视频轨(simulcast)。打开Settings -> Stream,填入:
- Service(服务):
WHIP - Server(服务器):
http://localhost:8889/mystream/whip - Simulcast, Total Layers(总层数):
2(或更大)
需要说明的是:目前无法在 OBS 中修改各副档的分辨率、码率或画布,因为副档的质量被硬编码为主档的固定百分比。关于层数设置与质量比例的具体说明,可查阅 OBS 官方提供的 WHIP 推流指南(OBS documentation: WHIP streaming guide)。
保存配置并点击Start streaming后,流同样落在路径/mystream上。
WHIP 加密推流(HTTPS)
通过 WebRTC 推流时,可以使用 WHIP 基于 HTTPS 的变体来加密 WebRTC 握手(WebRTC 媒体面本身始终使用握手阶段协商出的密钥加密):
https://localhost:8889/mystream/whip前提是 MediaMTX 已启用 WebRTC 加密,即在 mediamtx.yml 中设置:
webrtcEncryption: true webrtcServerKey: server.key webrtcServerCert: server.crt与 RTMPS 一样,OBS Studio 要求证书由公共 CA 签发并会静默拒绝自签名证书。解决方式与上文 RTMPS 加密一节完全相同:要么购买公共 CA 证书,要么自建本地 CA 签发服务器证书并在 OBS 机器上安装信任,具体步骤请回看上文 加密推流(RTMPS) 一节的第 1~4 步(该流程对 WHIP/HTTPS 同样适用,只需把证书配置项换成webrtcServerKey/webrtcServerCert即可)。
小结与排障建议
把 OBS 推流到 MediaMTX 的核心要点归纳如下:
- 两种协议二选一:RTMP(
rtmp://host:1935/path,推荐,兼容性最好)或 WebRTC/WHIP(http://host:8889/path/whip,延迟更低);两种方式均支持多轨视频 simulcast。 - 路径即流名:URL 中的最后一段路径决定 MediaMTX 上的路径,所有协议共享同一命名空间,推流后即可用 RTSP / HLS / WebRTC / SRT 等任意协议读取。
- 编码格式要匹配:RTMP 侧 H.264 + AAC 开箱即用;若下游要用 WebRTC 读取,建议按上文“输出到 URL + RTSP”方式推送 H.264 + Opus。
- 加密推流需公共可信证书:RTMPS 与 HTTPS-WHIP 都要求 OBS 能验证服务器证书,自建本地 CA 时务必在 OBS 机器上正确安装根证书(注意 Flatpak 安装方式的隔离限制)。
常见的两类问题可以这样排查:推流后Start streaming立即报错,先检查 MediaMTX 对应协议的监听端口是否开启(rtmp/webrtc配置项是否为true)、URL 中的端口与路径是否与 mediamtx.yml 一致;连接建立但读取端看不到画面,则重点核对编码格式是否落在各协议支持的编解码器列表内,并检查关键帧间隔等编码参数。
【免费下载链接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.项目地址: https://gitcode.com/GitHub_Trending/me/mediamtx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考