十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

用 go2rtc 快速搭建摄像头统一接入方案:5 分钟跑通,一个地址看全所有品牌画面

用 go2rtc 快速搭建摄像头统一接入方案:5 分钟跑通,一个地址看全所有品牌画面 用 go2rtc 快速搭建摄像头统一接入方案5 分钟跑通一个地址看全所有品牌画面【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtcgo2rtc 是一款开源的零依赖流媒体网关专门解决摄像头品牌杂、协议多、浏览器看不了、延迟高的接入难题。如果你手里同时有 RTSP、ONVIF、Tapo 等不同协议的摄像头又不愿意给每个品牌单独装一个 App这篇文章会带你从头把它跑起来并一路打通多设备接入、浏览器低延迟查看和稳定运行。先给结论你缺的是一个能收、能发、能转码的中间层摄像头接入的痛点通常不是摄像头本身而是每台设备各说各的话大华和海康走 RTSPTP-Link Tapo 走私有协议老设备只剩 MJPEG而你想在浏览器里看的流往往和设备的输出格式对不上号。go2rtc 的思路很简单在摄像头和你之间放一个中间层它负责把各路输入统一收进来再根据谁在看、用什么设备看自动选择最合适的输出。三个看家本领值得先记住输入广RTSP/RTSPs、ONVIF、RTMP、MJPEG以及 Tapo、Tuya、Wyze、小米等私有协议都能直接当源。输出自动匹配同一个流浏览器用 WebRTC 拿低延迟手机 Safari 自动切 HLS老播放器走 RTSP它自己会协商。按需转码只有编码对不上时才调 FFmpeg 转码平时零转码零拷贝转发。这意味着配置好之后你看监控不再需要记一串 IP 和端口只需要记住一个 go2rtc 的地址。第一步5 分钟跑通第一路摄像头最小可用配置这个步骤解决的是先看到画面再说的问题。go2rtc 启动后默认开三个服务Web 管理界面和 HTTP API 在 1984 端口RTSP 服务在 8554 端口WebRTC 在 8555 端口TCP/UDP。最快的方式是用 Docker 起一个容器docker run -d \ --name go2rtc \ --network host \ --restart unless-stopped \ -v ~/go2rtc:/config \ alexxit/go2rtc这段配置做了两件事--network host让 WebRTC、HomeKit 这类需要多端口/UDP 的协议不被端口映射卡住-v ~/go2rtc:/config把配置目录挂出来方便你在 Web 界面里直接改文件。不想用 Docker 的话下载对应平台的二进制Linux 桌面用go2rtc_linux_amd64树莓派用go2rtc_linux_arm64chmod x后直接运行即可它会在当前目录找go2rtc.yaml。接下来创建配置文件只放一条流streams: hall-camera: rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0这条配置声明了一个叫hall-camera的流指向你家那台大华摄像头的 RTSP 地址。保存后打开http://localhost:1984点击hall-camera就能看到实时画面。新手常见坑1984 是 Web 界面8554 是 RTSP 服务8555 是 WebRTC 端口。如果局域网内另一个软件占了 8554RTSP 起不来日志里会直接报listen :8554错误改成别的端口即可。另外 WebRTC 需要 UDP防火墙别只放行 TCP。看图重点理解配置不用手写命令行Web 界面里这个 YAML 编辑器自带语法检查和保存重启按钮改完点一下Save Restart就生效。第二步从 1 路到 N 路让不同品牌摄像头共用一套配置看到第一路画面后你自然会想那把家里那几台也接进来。这一步的收益是以后所有摄像头共用一套配置、一个页面不用再记住每个品牌各自的访问方式。接入新摄像头时先判断它支持什么协议再写对应的源streams: hall-camera: - rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0 hik-camera: - rtsp://admin:password192.168.1.124/Streaming/Channels/101 tapo-camera: - tapo://admin:password192.168.1.125 old-webcam: - http://192.168.1.126/video.mjpeg这段配置里四台设备用了四种完全不同的话术两台标准 RTSP、一台 TP-Link Tapo 私有协议、一台只有 MJPEG 的老网络摄像头。但在 go2rtc 里它们都是平等的流前端看监控时完全无差别。看图重点理解输入层把 RTSP、ONVIF、Tapo、MJPEG、FFmpeg 管道等全部收拢到中心输出层再按需分发成 RTSP、WebRTC、MSE/MP4、HLS 等中间还能挂双向音频。这就是一个网关接所有的形态。这里有个需要权衡的选择能直连的优先直连转码只当备胎。标准 RTSP 摄像头直接写 URL 即可零开销Tapo、Tuya 这类没有标准 RTSP 的品牌用它的私有协议前缀让 go2rtc 原生解析只有实在接不进来的老设备才考虑用ffmpeg:http://...包一层。如果你把多个源写进同一个流名下go2rtc 会把它们都当作该流的候选源这为下一步的编解码协商埋下了伏笔。关于各协议的具体写法可以在internal/streams/README.md里查到各品牌摄像头的参考 URL。第三步让浏览器零延迟看流靠的是编解码自动协商走到这一步你会发现一个尴尬浏览器里画面黑屏但 VLC 能放。原因十有八九是编码对不上——摄像头输出 H.265你用的浏览器不支持或者音频是 AAC浏览器 WebRTC 只认 OPUS/PCMU/PCMA。go2rtc 的解法是多源协商同一个流可以挂两个源一个直连原始流保证画质一个走 FFmpeg 转出浏览器能吃的编码看流时它自动按需取用streams: dahua: - rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0 - ffmpeg:rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0#audioopus这段配置的核心是第二行它把同一路源交给 FFmpeg只把音频转成 OPUS。平时看视频走第一行的原始流一旦浏览器要音频而编码不匹配就自动从第二个源取。这就是 go2rtc 宣传的多源双向编解码协商也是它区别于普通 RTSP 中转的关键能力。关于延迟可以直接给结论浏览器里 WebRTC 最优MSE/MP4 居中HLS 最差但最稳。所以 go2rtc 的前端播放器默认优先级是 WebRTC MSE HLS它会探测你的浏览器支持什么就自动用什么。你基本不用手动干预。新手常见坑iPhone 的 Safari 不支持 HTTP 渐进式播放老系统连 MSE 都不支持。如果你是苹果用户又遇到画面出不来在播放地址里强制指定 HLS 模式通常是最后的兜底手段。第四步让接入更稳预加载 硬件加速 可视化监控多路画面都正常了接下来是稳定性。三个动作各解决一类问题。预加载解决看的时候才拉流响应慢。有些摄像头启动要好几秒等你去点画面才拉流体验很差。在配置里声明预加载服务一启动就把流拉起来preload: hall-camera: gate-camera: video默认预加载音视频全轨gate-camera只预载视频轨。省流的场景比如只想留个缩略图可以只预载视频。硬件加速解决转码吃满 CPU。如果你确实需要转码优先让 FFmpeg 走 GPU。在ffmpeg源后面加#hardwarestreams: high-res: - rtsp://admin:password192.168.1.127/stream - ffmpeg:${input}#videoh264#audioaac#hardware#hardware会让 go2rtc 自动探测本机可用的硬件加速Intel、AMD、树莓派都覆盖具体到你的显卡需要什么参数以internal/ffmpeg/README.md和硬件文档为准。可视化监控解决不知道哪里卡。点开 Web 界面的net页面能看到当前所有活跃连接的拓扑哪个摄像头在推流、每个连接传输了多少字节、走的什么协议一目了然。看图重点理解节点颜色区分设备、流、编码和传输协议连线上的数字是实时吞吐量。排查为什么这路画面卡时先来这里看是不是带宽已经打满再决定要不要加转码或降码率。第五步给服务上锁认证和端口收敛一个都不能少这一步解决的是设备裸奔问题。默认情况下 go2rtc 三个端口对局域网全开放同网段任何人都能直接看你的摄像头画面甚至通过 API 操作服务。对家庭网络信任度高可以不管但一旦要暴露到公网必须加固。最省事的加固方式是加认证 把管理端口收到本机api: listen: 127.0.0.1:1984 username: admin password: ${GO2RTC_PASSWORD} rtsp: listen: 127.0.0.1:8554listen: 127.0.0.1把 Web 界面和 RTSP 服务收回到本机局域网内不再直接可达WebRTC 的 8555 端口只传输加密媒体数据保持开放没问题。密码用${GO2RTC_PASSWORD}从环境变量读取别明文写死在配置文件里。如果要在公网看监控正确姿势是API 只监听本机外面用带 HTTPS 的反向代理Nginx/Caddy 都行转发 1984 端口认证交给代理层处理。go2rtc 官方安全建议里特别提醒过API 一旦被攻破攻击者可能通过 echo/exec 这类源拿到服务器执行权限所以不要图省事直接对公网裸奔 1984这句话值得记牢。最后接入失败时按这张自检清单逐项排查如果哪一路画面迟迟出不来别急着怀疑是 bug。90% 的情况都在下面这张表里症状大概率原因先查什么点开画面一直转圈摄像头地址或账号密码错先用 VLC 直接拉原始 RTSP 验证有画面没声音音频编码浏览器不支持给该流加ffmpeg:...#audioopus备用源延迟明显偏高走了 HLS 或 MP4 兜底确认浏览器支持 WebRTC检查网络环境局域网内偶尔断流UDP 端口未放行确认 8555 的 TCP 和 UDP 都通CPU 飙高触发了不必要的转码检查是否有ffmpeg:源确认能否直连公网看不了NAT/防火墙问题先本地看是否正常再检查端口映射排查顺序永远是先本地、后网络、再转码本地 VLC 能放说明源没问题本地 WebUI 能看说明服务没问题剩下的就是网络和编码层面的事。回到开头那个痛点多品牌摄像头、多种协议、浏览器看不了、延迟高——这套方案跑下来你会发现 go2rtc 并没有发明什么新协议它只是把收、发、协商、转码四件事做对并打包在了一起。从第一路摄像头的 5 分钟上线到全屋设备的统一接入再到浏览器零延迟查看和稳定运行整个链路在一份 YAML 文件里就能完成。如果你的需求更进一步比如给摄像头播放音频、推流到直播平台internal/streams/README.md里还有publish和双向音频的现成用法接上就能用。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表