使用 OBS Studio 通过 RTSP 拉流播放 MediaMTX 实时视频流
2026/9/13 4:04:57 网站建设 项目流程

使用 OBS Studio 通过 RTSP 拉流播放 MediaMTX 实时视频流

【免费下载链接】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(本项目)是支持 RTSP、RTMP、SRT、WebRTC、HLS 等多种协议的实时流媒体服务器,而 OBS Studio 作为免费开源的直播推流与录播软件,可以借助其内置的媒体源(Media Source)直接通过 RTSP 协议读取服务器上的音视频流。本文将以 docs/4-read/11-obs-studio.md 为骨架,完整讲解在 OBS 中配置 RTSP 拉流的每一步操作,并结合本仓库源码与配置文件,深入说明 RTSP 服务端的监听地址、传输协议、加密方式与常见排错方法,让读者能独立完成"MediaMTX 出流 → OBS 观看"的完整链路。

前置准备:确认 MediaMTX 正在提供 RTSP 流

在使用 OBS 拉流之前,需要确认两件事:RTSP 服务端已启动、目标流名称真实存在。

MediaMTX 的 RTSP 服务器默认监听在:8554(TCP/RTSP),该地址由配置文件 mediamtx.yml 中的rtspAddress参数控制:

# Enable the RTSP server, which allows to publish and read streams with the RTSP protocol. rtsp: true # Enabled RTSP transport protocols. The handshake is always performed with TCP. rtspTransports: [udp, multicast, tcp] # Use secure protocol variants (RTSPS, SRTP, SRTCP). # Available values are "no", "strict", "optional". rtspEncryption: "no" # Address of the TCP/RTSP listener. This is needed only when encryption is "no" or "optional". rtspAddress: :8554

对应到源码层面,RTSP 服务端在 internal/servers/rtsp/server.go 中基于gortsplib构建,初始化时根据配置创建 TCP/RTSP、UDP/RTP、UDP/RTCP 以及可选的多播监听器。默认的完整监听地址可通过rtspAddress(8554 端口)、rtpAddress(8000)、rtcpAddress(8001)查看,详见 mediamtx.yml。

流必须处于"在线"状态(已有推流端向服务器发布),OBS 才能读取。可以先用仓库文档中列出的其他 RTSP 客户端验证流是否可用,例如 FFmpeg、GStreamer 或 VLC,也可以参考 RTSP 客户端读取说明 了解 RTSP 拉流的基本 URL 格式:

rtsp://localhost:8554/mystream

OBS 添加 RTSP 媒体源:分步操作

在确认服务器与流就绪后,按以下步骤在 OBS Studio 中添加 RTSP 拉流源(对应原文档的完整操作流程):

  1. 打开 OBS Studio;
  2. 在底部"来源"(Sources)面板中点击添加来源(Add Source)
  3. 在列表中选择媒体源(Media source),点击确定(OK)
  4. 在媒体源属性窗口中,取消勾选"本地文件(Local file)"
  5. 输入(Input)文本框中填入 RTSP 地址;
  6. 点击确定(OK),媒体源即开始拉流播放。

其中"输入"框应填写如下格式的地址(假设服务器运行在本机、流名为stream):

rtsp://localhost:8554/stream

地址由三部分组成:协议rtsp、主机与端口localhost:8554(即配置中的rtspAddress)、流路径/stream(路径名与推流端使用的路径一致,可在 mediamtx.yml 的paths段中配置静态来源或由推流端动态创建)。

RTSP 拉流支持哪些编码格式

OBS 通过 RTSP 读取的流由 MediaMTX 服务器按源流的原始编码格式直接透传,不对视频进行转码。根据 RTSP 客户端读取说明,MediaMTX 的 RTSP 服务端支持的编码格式如下:

类别支持的编码
视频AV1、VP9、VP8、H265、H264、MPEG-4 Video(H263、Xvid)、MPEG-1/2 Video、M-JPEG
音频Opus、MPEG-4 Audio(AAC)、MPEG-1/2 Audio(MP3)、AC-3、G726、G722、G711(PCMA、PCMU)、LPCM
其他KLV、MPEG-TS、以及任意 RTP 兼容编码

常见的摄像头/推流端组合(H.264 + AAC)都在支持范围内,OBS 无需额外转码即可直接解码播放。

深入原理:OBS 与 RTSP 服务端的交互链路

理解底层交互有助于排查"画面黑屏""无法连接"等问题。从源码结构看,MediaMTX 的 RTSP 服务端处理流程如下(见 internal/servers/rtsp/server.go):

  1. TCP 握手:客户端建立 TCP 连接后,服务端通过OnConnOpen创建连接对象,OnRequest/OnResponse处理请求与响应;
  2. DESCRIBE:OBS 发送DESCRIBE请求查询流描述,服务端通过OnDescribe返回 SDP(会话描述协议)信息;
  3. SETUP:客户端通过OnSetup协商具体的数据传输通道与端口;
  4. PLAY:客户端发送PLAY请求开始接收数据,服务端通过OnPlay启动流推送;
  5. 数据接收OnPacketsLostOnDecodeErrorOnStreamWriteError等回调负责处理丢包、解码错误与写流异常,并向日志输出相应信息。

OBS 在这一链路中扮演 RTSP 客户端角色,只要服务器日志中出现来自 OBS 的连接与 PLAY 记录,即说明拉流会话已建立。

连接不上?先检查传输协议(Transport)

RTSP 会话分为两部分:握手始终走 TCP,而媒体数据传输协议由客户端在握手时协商选择。默认情况下多数客户端选择 UDP,但 UDP 需要客户端能访问服务器上的额外 UDP 端口,在 NAT/防火墙环境下经常被阻断。

根据 RTSP 专属特性说明,可选传输协议如下:

  • UDP:性能最好,但要求客户端能访问服务器额外的 UDP 端口(默认rtpAddress: :8000rtcpAddress: :8001),跨 NAT/防火墙时经常不可用;
  • UDP-multicast:局域网内多客户端场景可节省带宽,服务器只向固定多播地址发送一次数据(默认多播范围multicastIPRange: 224.1.0.0/16);
  • TCP:通用性最强,无需额外 UDP 端口,跨网络环境最可靠。

MediaMTX 服务端默认开启全部三种传输协议(rtspTransports: [udp, multicast, tcp]),因此只需在客户端侧指定使用 TCP 即可。OBS 的媒体源没有直接暴露-rtsp_transport tcp这样的参数,但在跨网络拉流失败时,可参考同一服务器上的其他客户端做法:FFmpeg 使用-rtsp_transport tcp,VLC 使用--rtsp-tcp标志(详见 RTSP 专属特性说明)。若服务器日志显示客户端反复尝试 UDP 端口失败,优先考虑在 OBS 所在网络放通 8000/8001 UDP 端口,或改用支持指定 TCP 传输的客户端工具。

加密场景:使用 RTSPS(rtsps://)拉流

如果服务器的 RTSP 服务启用了加密(将rtspEncryption设为strictoptional),则所有 RTSP 子协议会替换为安全变体(RTSPS、SRTP、SRTCP),此时必须使用rtsps协议与8322端口拉流,而不是普通的rtsp://

rtsps://localhost:8322/stream

对应的服务端配置如下(见 mediamtx.yml):

rtspEncryption: "optional" rtspServerKey: server.key rtspServerCert: server.crt

证书可通过 OpenSSL 生成:

openssl genrsa -out server.key 2048 openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650

需要注意,OBS 使用自签名证书时会校验失败。这与 GStreamer 的情况类似——GStreamer 在读取加密流时需要显式设置tls-validation-flags=0跳过证书校验(见 RTSP 专属特性说明)。OBS 媒体源对自签名证书的兼容性取决于其底层 FFmpeg 构建,若拉流被证书校验阻断,建议先以rtspEncryption: "no"确认链路可用,再启用加密并导入受信任的证书。

常见问题速查

  • 画面一直加载/黑屏:确认推流端仍在发布该路径的流;检查服务器日志中是否有 OBS 的 DESCRIBE/SETUP/PLAY 记录;尝试在服务器端把rtspTransports调整为仅[tcp]排除 UDP 干扰。
  • 连接被拒绝:确认rtspAddress端口(默认 8554)未被防火墙拦截,且 OBS 填写的端口与配置一致。
  • URL 拼写错误:流路径必须与推流路径完全一致(含大小写),例如推流到stream就应填写rtsp://localhost:8554/stream
  • 认证失败:若服务器配置了rtspAuthMethods(如basic),需要在 URL 中携带凭据,如rtsp://user:pass@localhost:8554/stream,具体认证机制参见 认证配置文档。

总结

借助 OBS Studio 的媒体源,只需一个rtsp://localhost:8554/stream格式的地址即可完成 MediaMTX 实时流的拉取与播放,无需任何插件。本文从原文档的四步操作出发,扩展了 RTSP 服务端配置(mediamtx.yml)、支持的编码格式(RTSP 客户端读取说明)、传输协议与加密机制(RTSP 专属特性说明)以及底层交互原理(RTSP 服务端实现),覆盖了从"成功连上"到"排错恢复"的完整实战路径。对于需要更多 RTSP 读取客户端的场景,可继续阅读 FFmpeg、GStreamer 与 VLC 等文档。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询