ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Monibuca RTSP协议全解析:从设备推流到多协议分发的完整流程

Monibuca RTSP协议全解析:从设备推流到多协议分发的完整流程 Monibuca RTSP协议全解析从设备推流到多协议分发的完整流程【免费下载链接】monibucaMonibuca简称 m7s是一款纯 Go 开发的开源流媒体服务器开发框架。项目地址: https://gitcode.com/langhuihui/monibucaMonibuca简称 m7s是一款纯 Go 开发的开源流媒体服务器框架其 RTSP 插件完整实现了 RFC 2326/RFC 7826 协议标准。本文将用通俗的方式带你走通一条 RTSP 流的完整生命周期摄像头如何推流进服务器、服务器如何调度分发、又如何一键转换成 RTMP、HLS、WebRTC 等多种协议输出。如上图所示Monibuca 采用核心 插件的架构RTSP、RTMP、HLS、WebRTC 等协议只是插件层的一员它们共享同一个核心媒体调度系统。理解这一点就能理解一进多出分发为何如此简单。一、RTSP 在 Monibuca 中的位置Monibuca 的 RTSP 能力全部由独立插件提供核心代码位于 plugin/rtsp/模块文件职责插件入口plugin/rtsp/index.go注册服务器、拉流器、推流器与代理RTSP 服务器plugin/rtsp/server.go处理 ANNOUNCE/DESCRIBE/SETUP 等信令网络连接plugin/rtsp/pkg/connection.go信令读写、认证、内存管理收发器plugin/rtsp/pkg/transceiver.goRTP 数据在 TCP/UDP 通道上的收发拉流代理plugin/rtsp/pkg/pull-proxy.go主动从远程拉 RTSP 流并自动重连推流代理plugin/rtsp/pkg/push-proxy.go把本地流推送到远程 RTSP 服务器更详细的配置说明可参考官方文档 plugin/rtsp/README_CN.md。二、设备推流进服务器一次完整的握手过程以摄像头或 FFmpeg 向rtsp://host:554/live/cam1推流为例整个过程分为四个阶段1. 声明身份ANNOUNCE宣告流推流端携带 SDP流的名片描述音视频编码、采样率等信息发送 ANNOUNCE 请求。服务器在 plugin/rtsp/server.go 中解析 SDP并向核心注册一个发布者Publisher——这一刻流正式进入 Monibuca。2. 建立通道SETUP协商传输双方在此协商数据走哪条路TCP 交织模式RTP 数据直接复用信令通道传输可靠且能穿透防火墙适合公网UDP 单播模式媒体走独立端口延迟更低适合局域网。服务器通过 plugin/rtsp/index.go 中的 UDP 端口池默认 20001-30000动态分配 RTP/RTCP 端口对并发多路流也互不干扰。 实用建议公网传输选 TCP局域网选 UDP。UDP 失败时还会自动回退 TCP见 plugin/rtsp/pkg/transceiver.go。3. 开始发送RECORD开始推流RECORD 响应后音视频帧按 RTP 打包持续流入服务器的环形缓冲区ring buffer由核心的 pub-sub 系统完成缓存与调度。4. 结束会话TEARDOWN优雅关闭任一方发送 TEARDOWN信令连接关闭端口、缓冲区等资源全部回收。若开启了username/password认证服务器会在首个信令请求时校验 HTTP Basic 凭据未通过则返回 401。配置示例见 plugin/rtsp/README_CN.md。三、从单路 RTSP 到多协议分发一进多出这是 Monibuca 最香的机制流只推一次其余协议全部由核心自动转换分发。摄像头把 RTSP 流推入live/cam1核心将流拆解为标准的音视频帧序列各协议插件按需取帧并封装成自己的格式输出协议对应插件典型场景RTSPplugin/rtsp/NVR、VLC、专业客户端RTMPplugin/rtmp/直播 CDN、OBS 拉流FLVplugin/flv/浏览器低延迟播放HLS/LL-HLSplugin/hls/大并发点播/直播WebRTCplugin/webrtc/网页秒开、超低延迟也就是说同一路摄像头流NVR 走 RTSP 回看、网页走 WebRTC 实时观看、CDN 走 RTMP 分发三端同时在线也只需一条上行链路。四、反向链路把远程 RTSP 拉进来除了被动接收推流RTSP 插件还内置了客户端能力可主动从远程设备取流拉流代理在global.pullproxy中配置远程地址如rtsp://admin:123456192.168.1.100/streamplugin/rtsp/pkg/pull-proxy.go 会每 5 秒巡检一次连接状态断线自动重连pullonstart: true时随服务启动即拉流推流代理在global.pushproxy中配置目标地址plugin/rtsp/pkg/push-proxy.go 将本地流实时推给远端 RTSP 服务器同样具备心跳与重连能力。也支持通过 API 动态管理无需改配置重启curl -X POST http://localhost:8080/api/stream/pull \ -d {protocol:rtsp,streamPath:cam1,remoteURL:rtsp://admin:123192.168.1.100/stream}五、常见问题速查症状排查方向连接被拒绝554 为特权端口尝试改端口如 8554检查防火墙有声音无画面核对两端编解码兼容性查看日志中的 SDP 信息UDP 丢包严重扩大udpport范围或切换 TCP 传输播放卡顿局域网改 UDP检查带宽与码率匹配更多非标准设备非标 RTSP 实现的兼容说明见 plugin/rtsp/BAD_DEVICE.md完整方法列表与编解码支持范围见 plugin/rtsp/README_CN.md。六、总结协议层RTSP 插件实现了标准信令全流程OPTIONS/ANNOUNCE/DESCRIBE/SETUP/PLAY/RECORD/TEARDOWN兼容 FFmpeg、VLC、OBS 及 ONVIF 设备架构层推流只是把帧送入核心环形缓冲区之后的多协议分发、录制、转发全部由 pub-sub 系统统一调度运维层拉/推流代理自带心跳与自动重连配合 REST API 可实现完全动态的流媒体编排。对于新手而言记住一句话就够了把流推进来或拉进来剩下的一切——RTMP、HLS、WebRTC 输出——Monibuca 都替你自动完成。【免费下载链接】monibucaMonibuca简称 m7s是一款纯 Go 开发的开源流媒体服务器开发框架。项目地址: https://gitcode.com/langhuihui/monibuca创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表