ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

用Docker部署go2rtc:摄像头RTSP/WebRTC多协议统一接入实战

用Docker部署go2rtc:摄像头RTSP/WebRTC多协议统一接入实战 折腾过摄像头接入的兄弟肯定体会过那种被各家协议逼疯的感觉。海康的RTSP地址是一种写法大华换一套萤石又要先去平台开验证码小米不同型号还互不兼容。好不容易用VLC看到了画面想把这路视频推到NVR、NAS或者Home Assistant里又要面对新一轮的格式转换。直到我用Docker把 go2rtc 跑起来这个困局才算真正被解开。go2rtc 是一个用Go写的轻量级流媒体代理核心能力就是多协议转换与统一分发一段yaml配置就能把海康、大华、萤石、小米等各路摄像头接入进来再按需输出RTSP、RTMP、HLS、MJPEG或者低延迟的WebRTC流。这篇博文就从零开始讲讲我怎么用Docker部署 go2rtc把家里的摄像头整合成一个真正好用的多协议流媒体平台。不管你用的是千元级家用摄像头还是玩树莓派OV5647这种DIY板子这套流程都能直接套用。1. 为什么要用 go2rtc从摄像头接入困境说起1.1 摄像头协议为什么各家各话先说一个很奇怪但又很现实的现象摄像头这个行业大家明明都在用国际通用的RTSP标准可每个厂商做出来的接入地址就是不一样。海康威视的RTSP地址长这样rtsp://admin:密码192.168.1.64:554/Streaming/Channels/101大华的又是另一套rtsp://admin:密码192.168.1.108:554/cam/realmonitor?channel1subtype0萤石的如果不开通平台云存储还得去后台开启本地RTSP授权地址又变成rtsp://admin:验证码192.168.1.100:554/h264/ch1/main/av_stream你看端口有的是554有的是8554路径有的叫Streaming有的叫realmonitor还有的直接带了一长串query参数。如果家里同时装了三个不同品牌的摄像头光是记地址就得备一个小本子。更麻烦的是输出端。你需要把画面推到群晖NAS做录像需要让Home Assistant实时显示需要推到YouTube做直播可能还想在手机App里随时点开看。不同平台支持的协议不一样NAS录像要RTSP或者ONVIF网页端直接看要HLS或者WebRTC直播平台要RTMP。如果每一路都单独转一次码、单独配一套转发规则那配置量会直接爆炸。go2rtc就是来解决这个问题的。它相当于一个视频流的万能翻译器输入侧能接各种乱七八糟的协议输出侧能吐出任你挑选的格式而且所有配置都在一个yaml文件里完成。1.2 go2rtc 的核心能力拆解go2rtc这个名字里go指的是Go语言2rtc暗示它跟WebRTC有很深的渊源。实际上这个项目最早就是为智能家居场景设计的所以它有几个特别能打的能力第一输入协议支持全家桶。RTSP、RTMP、HTTP-FLV、HLS、MJPEG、ONVIF、WebRTC甚至直接读本地视频文件它都认。这意味着你的视频源可以是一个海康摄像头可以是一个树莓派CSI摄像头通过gstreamer推出来的流也可以直接是一个MP4文件。第二输出协议随心换。它默认把所有输入流统一成内部格式然后通过内置的RTSP服务、RTMP服务、HLS服务、MJPEG服务和WebRTC能力对外输出同一个视频源。你只需要告诉它给我一个HLS地址它就用这个摄像头源给你生成一个.m3u8链接。第三WebRTC低延迟是它的看家本领。传统HLS直播延迟少说三五秒做监控回看还能忍但如果要做门口对讲、实时操控无人机第一人称视角这种延迟就没法接受。go2rtc的WebRTC输出能轻松做到200到500毫秒延迟基本是所见即所拍的体验。第四跟Home Assistant的生态融合极好。HA官方推荐了好几个摄像头集成方案go2rtc就是很多人验证过最稳的那一类装好之后直接用WebRTC卡片把摄像头画面嵌到仪表盘里不用再搞录像机那种笨重的插件。1.3 用 Docker 部署的核心优势这是我觉得go2rtc最友好的地方不需要部署复杂的编译环境。有的人一看到GitHub上那些源码首先就怵了要装Go环境、要编译、要配依赖折腾半天。用Docker容器的话官方已经把二进制和运行环境都封装好了拉镜像、跑容器、挂配置三步走完。依赖隔离也更干净。go2rtc要用到FFmpeg做转码的话容器里自带不会跟你宿主机上装的版本冲突。升级的时候更简单拉一个新镜像、删掉旧容器重新起一个配置目录挂载在外面配置完全不受影响。要迁移到新服务器把配置目录和docker run命令搬过去就行。资源占用低也是实打实的优势。go2rtc进程本身只占几十MB内存多路1080P视频同时转发CPU占用也不高放在一台常年跑着NAS、软路由的小主机上完全不心疼。我实际在一台J4125的小主机上同时接了四路摄像头体验依旧流畅。2. Docker 部署 go2rtc从零到后台跑通2.1 部署前的三件准备工作动手之前先把这三件事确认好。第一确认Docker环境。在Linux服务器上执行docker --version如果没安装就去装一个。Windows环境的话Docker Desktop用起来也很方便Hyper-V或者WSL2后端随便选一个就行。这一步是基础如果Docker本身没跑起来后面全是白搭。第二规划一个配置目录。我习惯把go2rtc的配置统一放在一个独立目录里比如Linux的/opt/go2rtc或者NAS上的某个共享文件夹。这样配置、日志、录像和容器生命周期隔离得干干净净以后备份也方便。第三先确认摄像头的IP和RTSP地址。这里有个很实用的小技巧先用手机装上VLC或者带RTSP功能的播放器把摄像头地址粘贴进去如果能出画面说明地址没错。如果这一步都拉不到流那后面go2rtc接到这一路也大概率拉不起来问题得先定位在摄像头本身。2.2 一条命令启动 go2rtc确认好环境后在服务器上执行mkdir -p /opt/go2rtc docker run -d \ --name go2rtc \ --network host \ --restart unless-stopped \ -v /opt/go2rtc:/config \ alexxit/go2rtc装完之后直接浏览器访问http://服务器IP:1984如果看到go2rtc的Web管理后台就说明部署成功了。这里有个关于网络模式的关键决策我要重点讲一下。我上面用的是--network host也就是宿主机网络模式。这个模式在摄像头场景下几乎是必选项原因有三个第一go2rtc的WebRTC和RTSP服务大量依赖UDP端口通信host模式下端口直接暴露在宿主机网络上没有NAT转换这一层摄像头和播放端都能更直接地连通。第二如果你的摄像头在另一个VLAN或者网段host模式可以让容器跟宿主机共享路由表访问摄像头网络不用折腾跨网段NAT。第三省去一堆-p端口映射参数容器启动和排错都简单。如果你的环境实在没法用host模式比如用的是群晖Docker套件这种限制比较死的平台那只能退而求其次把端口映射出来docker run -d \ --name go2rtc \ -p 1984:1984/tcp \ -p 8554:8554/tcp \ -p 8555:8555/udp \ --restart unless-stopped \ -v /opt/go2rtc:/config \ alexxit/go2rtc但这种模式下WebRTC很可能因为端口映射和ICE协商问题出现打不开的情况排查起来会麻烦一些。2.3 用 docker-compose 管理更省心如果你跟我一样有多个容器需要一起管理我更推荐用docker-compose。在/opt/go2rtc目录下新建一个docker-compose.ymlservices: go2rtc: image: alexxit/go2rtc container_name: go2rtc network_mode: host restart: unless-stopped volumes: - /opt/go2rtc:/config然后执行docker compose up -d效果跟上面的docker run一样但后续更新和重启都方便很多。升级的时候执行docker compose pull docker compose up -d就完成了。第一次启动后如果你直接去看后台会发现界面空空如也。别急这说明配置还没填下一章就进入核心环节。2.4 认识 go2rtc 的后台界面go2rtc的Web管理界面走的是极简路线没有一堆花哨的图表。默认页面是一个视频播放器列表你配置好的每一路流都会显示在这里点一下就能直接播放。右上角有几个入口分别是Play、Config、Logs、API等页面。Play页面给每个视频流生成对应协议的播放地址比如HLS地址、WebRTC地址、MJPEG地址。Config页面会直接显示当前生效的配置文件内容如果是在后台修改并保存它会写回挂载的yaml文件。Logs页面是排查问题的重要工具拉不到流、转码报错都能在日志里看到。API入口则是给开发者或者集成方用的通过REST接口能实时查询和操作流。我之前第一反应是找添加摄像头的按钮结果发现后台界面上根本不需要点添加。你要做的是去改yaml配置文件。这也说明了go2rtc的一个设计理念配置即代码所有流定义都以文本形式存在版本管理和迁移非常方便。3. 核心配置接入你的第一路摄像头3.1 配置文件结构与流定义语法go2rtc的配置全部在一个yaml文件里默认路径就是之前挂载目录下的go2rtc.yaml。文件结构很清晰主要分几个模块log是日志级别api是Web接口监听地址webrtc是WebRTC相关配置streams就是核心的流定义。streams的语法是名字 一个或多个源地址。一个流可以只配一个源也可以配多个源做自动切换或热备。最简单的一路流长这样streams: living_room: - rtsp://admin:123456192.168.1.64:554/Streaming/Channels/101这里living_room是流名称你可以随意起名后面所有输出地址都会基于这个名称。在后台播放页里看到的就是这个名字。如果你想给同一路流配多个源比如主摄像头和备用摄像头做冗余可以这样streams: front_door: - rtsp://admin:123456192.168.1.64:554/Streaming/Channels/101 - rtsp://admin:123456192.168.1.65:554/Streaming/Channels/101go2rtc会尝试按顺序连接第一个挂掉就自动切到第二个。实际安防场景里这个功能很实用尤其对于关键位置的监控减少单点故障。3.2 实战接入海康、大华、萤石摄像头这里给出三家主流设备的具体配置示例你在自己的yaml里按需替换IP和密码就可以。streams: hik_cam: - rtsp://admin:your_password192.168.1.64:554/Streaming/Channels/101 dahua_cam: - rtsp://admin:your_password192.168.1.108:554/cam/realmonitor?channel1subtype0 ezviz_cam: - rtsp://admin:your_verification_code192.168.1.100:554/h264/ch1/main/av_stream先说海康。海康的RTSP地址里101代表主码流102代表子码流。主码流清晰度高但码率大子码流清晰度低但流畅。如果网络环境一般我建议直接接子码流比如把/Streaming/Channels/101改成/Streaming/Channels/102。另外海康有些设备初始需要激活如果登录时提示密码太弱先到海康官方的SADP工具里激活并设好密码。再说大华。大华的地址格式很特殊注意它是一段query stringchannel1是通道号subtype0是主码流subtype1是子码流。如果摄像头的管理页面改过端口这里的554也要跟着改。用户名密码后面不需要加空格直接拼。萤石比较特殊它的密码其实是你在萤石云平台里设置的六位验证码不是设备管理密码。如果去萤石官网后台找不到验证码先去设备设置-本地服务里开启RTSP然后设置一个验证码填到这里才能拉流。三个品牌同时接入后你可以分别用后台播放器播放确认每一路都正常出画。这里我遇到过一个非常典型的坑如果密码里含有、#、?这类特殊字符URL解析的时候会直接出问题。解决方法是做URL编码写成%40#写成%23?写成%3F。比如密码是abc123地址应该写成rtsp://admin:abc%40123192.168.1.64:554/...。3.3 其它视频源文件、USB摄像头和RTMP除了IP摄像头go2rtc还能接入很多非传统视频源这让它的可玩性高了很多。本地视频文件直接写路径就行streams: demo_file: - file:///media/clips/welcome.mp4树莓派CSI摄像头比如OV5647模块可以通过FFmpeg或者gstreamer先推流再用go2rtc接入。比如先在树莓派上用libcamera推RTSP到本地8554端口然后再在go2rtc里配置一个流把这个地址拉进来。这样你会发现市面上几乎所有能出视频流的设备都能在go2rtc里被统一管理。RTMP源也一样能接比如无人机图传、直播采集卡推上来的流streams: drone_fpv: - rtmp://192.168.1.50:1935/live/drone还有一类常见的DIY摄像头比如ESP32-S3 USB摄像头通过UVC协议输出MJPEG流。go2rtc可以直接读取这种USB摄像头吗可以通过配置执行FFmpeg命令把UVC设备拉成流。它的 configexec功能可以执行系统命令不过这种用法稍微进阶一点建议先玩明白基本功能再说。3.4 使用 Web 界面快速添加流虽然我推崇改配置文件的方式但go2rtc也提供了界面端入口方便你临时测试或者不想动yaml时快速添加。在后台的Config页面直接编辑当前生效的配置文本把刚才的流配置粘进去点保存。然后去Play页面刷新就能看到新加的流了。注意这种修改是直接写进挂载的go2rtc.yaml文件里的和手工改文件是同样的效果所以你在服务器上手工改文件和界面上改是等价的。不过我还是建议把最终改好的yaml文件托管到Git或者备份目录里方便出问题时回滚。毕竟摄像头配置这种东西一旦摄像头IP变化或者密码更换你得能快速找回准确的配置版本。4. 多协议输出实战不同场景怎么选4.1 先搞清楚要输出给谁go2rtc配置好流之后它不会自动给你推送所有协议而是在你访问对应地址时实时生成。这一节的核心问题来了各路输出的地址长什么样什么时候该用哪个先看RTSP输出。go2rtc内置了一个RTSP服务默认监听8554端口所有配置好的流都可以通过rtsp://服务器IP:8554/流名称来访问。比如在局域网里用VLC打开rtsp://192.168.1.20:8554/living_room就能看到这一路视频。RTSP适合给NVR录像机、群晖Video Station、老牌播放器这些不支持HLS的设备用。再看HLS输出。地址是http://服务器IP:1984/stream/流名称.m3u8。HLS是网页播放的万金油任何浏览器或者支持HLS的播放器都能直接拉。但它有个通病就是延迟高一般5到10秒不适合实时操作类场景适合做录像回放、长时间挂机观看。MJPEG输出是http://服务器IP:1984/stream/流名称.mjpeg它就是一帧一帧的JPEG图片流。好处是兼容性极好任何浏览器都能当作普通图片源刷出来坏处是数据量巨大1080P下带宽占用非常恐怖。MJPEG一般只用来做缩略图预览或者接入一些比较老旧的监控面板。WebRTC输出的形式稍微复杂一点通常是在后台Play页面里点一下流名称页面就会自动通过WebRTC跟你建立点对点连接。地址一般是http://服务器IP:1984/流名称/webrtc也可以在代码里通过REST API拿到一个临时offer。WebRTC的好处是低延迟适合实时查看和对讲。我把几个协议梳理成一个对照表方便你按需选输出协议典型地址延迟适用场景RTSPrtsp://IP:8554/流名1-2秒NVR录像、VLC播放、老设备HLShttp://IP:1984/stream/流名.m3u85-10秒网页播放、录像回放MJPEGhttp://IP:1984/stream/流名.mjpeg0.5秒缩略图、老面板、兼容性兜底WebRTChttp://IP:1984/流名/webrtc0.2-0.5秒实时对讲、低延迟操控4.2 WebRTC 低延迟实时查看的配置要点WebRTC是go2rtc最容易让人惊艳的地方也是问题最多的环节。如果你的设备只在局域网内访问部署完成后基本就能直接用了。但如果涉及跨网段、公网或者经过一些严格防火墙就需要手动配置ICE服务器。在配置文件的webrtc模块里可以添加公网STUN/TURN服务器信息帮助NAT穿透webrtc: listen: :8555 ice_servers: - urls: stun:stun.l.google.com:19302这里需要说明一下stun:stun.l.google.com:19302是Google提供的公共STUN服务器用于帮双方发现彼此的公共IP和端口。如果你部署的环境没法访问公网STUN服务器WebRTC在跨网段时大概率会失败。此时你可以在自己的服务器上起一个coturn服务当TURN中继再把这个地址填进ice_servers里。这个配置对于局域网玩家不是必须的但如果你是放在云服务器上做远程监控这一项非常关键。我实际测试环境是一台NAS加几个摄像头全部在同一个局域网段WebRTC基本是零配置就能用的。打开后台Play页面点一下直播延迟感觉上不到半秒门口有人按门铃的时候画面几乎跟现实同步。这个跟HLS那种转圈圈等半天的体验完全是两回事。4.3 FFmpeg 转码与硬件加速go2rtc本身的定位是流媒体代理核心操作是转发不转码。但在某些场景下必须转码比如摄像头输出的H.265编码你的播放器不支持或者你想在低带宽下看低码率画面。这个时候go2rtc会调用内置的FFmpeg来完成。配置方法是在流地址前加ffmpeg:前缀后面可以通过#video...和#audio...来指定转码参数。比如要把某路流强转成H.264可以这样streams: living_room_transcoded: - ffmpeg:rtsp://admin:123456192.168.1.64:554/Streaming/Channels/101#videoh264#audioaac注意转码是CPU密集操作多路并发转码时小主机会扛不住。我建议能不转就不转优先让摄像头输出H.264然后用子码流看预览。如果摄像头只支持H.265而你的播放器又只认H.264那再考虑用go2rtc转一次。关于硬件加速go2rtc支持通过FFmpeg调用Intel Quick Sync或者NVIDIA NVENC进行硬件编码能大幅降低CPU占用。不过硬件加速的配置依赖具体平台不同平台的device参数不同建议先看go2rtc官方文档确认你的显卡驱动和FFmpeg版本。4.4 用多路流实现主码流和子码流分工实际安防部署中我建议给同一个摄像头配置两个流一个主码流一个子码流streams: living_room_high: - rtsp://admin:123456192.168.1.64:554/Streaming/Channels/101 living_room_low: - rtsp://admin:123456192.168.1.64:554/Streaming/Channels/102然后根据需求决定用哪一路NVR录像用高清主码流手机远程预览用低码率子码流WebRTC实时查看用子码流降低延迟。这样可以有效控制带宽占用也减少CPU压力。这套思路在同时跑录像和实时预览的场景里非常好用。5. 进阶集成把 go2rtc 变成智能家居中枢5.1 接入 Home Assistant 做统一监控面板如果你玩智能家居Home Assistant简称HA应该不陌生。go2rtc和HA的集成非常顺滑HA官方有go2rtc的集成组件装好之后HA会自动发现局域网里的go2rtc实例。在HA的configuration.yaml中添加go2rtc: url: http://192.168.1.20:1984然后在HA的UI界面中添加摄像头卡片时选择WebRTC Camera类型填入go2rtc里配置好的流名称就能在仪表盘上看到几乎零延迟的实时画面。这里我强烈建议用WebRTC方式之前我试过用通用RTSP集成接入不仅延迟大还经常出现画面卡死的状态换到WebRTC后体验好了不止一个档次。HA的安装方式和版本比较多不同版本的配置写法可能有些差异但核心思路都一样HA把go2rtc当做一个统一的视频源网关所有摄像头先汇总到go2rtc里再由HA去调用。5.2 局域网内的统一摄像入口很多人的摄像头来自不同厂商每个品牌的手机App都不一样打开一个画面要切换好几个App非常痛苦。go2rtc搭好之后它就成了你的统一视频入口。你可以在手机浏览器里直接访问http://服务器IP:1984把所有摄像头画面都放在这个页面上。虽然它本身没有花哨的宫格视图但如果你是做硬件开发、DIY项目完全可以通过它的REST API把视频流嵌到自己写的前端页面里这比同时控制好几个SDK要省事得多。而且go2rtc支持把多路流聚合成一个源比如你想把客厅、门口、后院三个画面拼成一个视频可以配合FFmpeg的filter做视频拼接再输出。这个玩法比较进阶适合有视频拼接需求的场景。5.3 树莓派、小米摄像头等热门设备的接入技巧树莓派加OV5647模块是很多玩家的心头好它的接入方式跟IP摄像头不一样因为CSI接口的摄像头模块本身不产生网络流。你需要先用树莓派上的软件把画面编码成流推出去。我试过的一种稳定方案是libcamera-vid -t 0 --inline --width 1920 --height 1080 --framerate 25 --codec h264 --bitrate 2000000 -o - | ffmpeg -re -i pipe:0 -c copy -f rtsp rtsp://localhost:8554/pi_cam这条命令让树莓派把SDI摄像头编码成H.264流通过FFmpeg推送到go2rtc本地的8554端口。推流之前需要注意go2rtc监听的8554端口既是RTSP输出口也能接收RTSP输入所以rtsp://localhost:8554/pi_cam可以理解为先推给go2rtc再由go2rtc统一分发。然后在go2rtc配置里加一行streams: pi_cam: - rtsp://localhost:8554/pi_cam这样树莓派的CSI摄像头就跟其他IP摄像头一样能在统一后台里播放、录屏、接入HA了。小米摄像头这块很多型号本身支持RTSP协议只是默认关闭需要在米家App里开启局域网RTSP开关拿到一个专用的RTSP地址。不同型号的地址路径不太一样有的直接就是rtsp://IP:554/stream1。需要注意的是小米部分设备对同时连接的路数有限制一般3到5路如果go2rtc和多个播放器同时拉流后面接进来的会被踢掉这个不是go2rtc的问题。5.4 安全加固别把摄像头裸奔在公网摄像头属于隐私敏感设备配置安全不能省。如果你的go2rtc只在内网跑那压力不大。但如果你想在外面随时看千万别直接把1984端口映射到公网否则扫描器能直接找到你的后台。我的做法是用Nginx做反向代理加一层Basic Auth再配置SSL证书。Nginx的关键配置段server { listen 8443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; auth_basic go2rtc Access; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_pass http://127.0.0.1:1984; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }升级到WebRTC远程访问时还需把这套Nginx的WebSocket和UDP转发配置对否则WebRTC流量过不去。这一块的坑比较深如果你不熟悉Nginx流式转发建议先只做TCP层面的访问控制比如限制IP白名单比直接暴露稳妥得多。6. 常见问题与排查技巧6.1 高频问题速查表我在实际部署和帮朋友调试的过程中遇到最多的就是下面这些情况做成表格方便你直接对照。现象可能原因解决办法后台能打开但画面黑屏RTSP地址写错、密码带特殊字符未编码用VLC验证地址特殊字符做URL编码画面卡顿、转圈网络带宽不够、用了主码流切换到子码流检查摄像头码率设置WebRTC打不开ICE配置缺失、NAT问题局域网内可先用host模式跨网段配ICEDocker重启后配置丢失挂载目录权限错误、配置文件名不对检查 /opt/go2rtc 目录权限和go2rtc.yaml路径HLS延迟很大HLS协议本身特性换WebRTC或RTSP别指望HLS低延迟Home Assistant连不上URL填错、HA与go2rtc网络隔离确认go2rtc的API端口能被HA访问8554或8555端口被占用其他服务冲突改用非默认端口但注意同时调整客户端引用6.2 日志阅读与调试思路遇到问题时第一步永远是看日志。执行docker logs -f go2rtcgo2rtc的日志会告诉你每一路流的连接状态、拉流是否超时、RTSP握手是否成功、转码参数是否合法。如果你看不太明白可以先把日志级别调成debug在配置文件里加log: level: debug然后重启容器重新访问该路流观察日志里拉流URL的解析过程。很多配置问题其实就是地址写错了debug日志里会明确打印出它真正尝试连接的地址和端口拿这个地址去跟摄像头厂商文档对比基本能定位。另一个调试入口是REST API访问http://服务器IP:1984/api/streams会返回所有流的JSON状态。里面能看到每个流是否在线、用了什么协议、连接的客户端数量。这个页面是排查哪一路流挂了最快的方法。配合http://服务器IP:1984/api/log还能在浏览器里实时看日志不用每次都SSH进服务器翻docker logs。6.3 性能优化与资源占用控制go2rtc的资源占用控制核心原则是减少转码、多用子码流。多路视频同时转发时如果全部走原始编码直接转发CPU压力很小因为go2rtc只是做数据包级别的代理不碰编码解码。真正吃CPU的操作是转码尤其多路H.265转H.264的时候。如果你的设备经常满载我的建议是第一预览全部走子码流。子码流分辨率低、码率低ICR和NVR都建议默认用子码流预览主码流留给录像或特殊需求。第二关闭不必要的流不要把所有摄像头所有码流都一次性拉起来。go2rtc是按需拉流的有人访问才拉流没人访问会自动断开这个机制本身就很省资源。第三如果非要转码优先开硬件加速Intel核显的QuickSync或者NVIDIA的NVENC都能显著降低CPU占用。第四镜像升级后注意观察新版本的内存占用go2rtc持续迭代新版本一般更稳更快但也不要盲目追新。6.4 一套完整的备份与恢复流程配置备份是很多人忽略但很重要的环节。因为你的摄像头地址、密码、流结构配置全在go2rtc.yaml里如果这台服务器坏了或者你想迁移到新机器没有备份就只能靠记忆重新配一遍。我自己的流程是把/opt/go2rtc/go2rtc.yaml定期同步到NAS或者Git仓库。如果以后有变动直接改配置测试没问题后提交一次留一个版本历史。迁移时新机器装好Docker把配置文件放到对应目录启动容器所有摄像头流就自动恢复了。整个过程不到五分钟比重新配一遍快得多。这里还要提醒一个小细节如果摄像头换了密码或者IP一定要相应更新配置文件然后重启go2rtc容器让配置生效。如果你用的是后台Config页面的在线保存它会自动热加载不用重启但如果改了端口级别的配置还是重启一下更可靠。我在实际部署中还有一个体会go2rtc这种工具门槛真的不高但价值很大。很多人一看到流媒体多协议就以为自己不会用其实核心就一句——把不同摄像头源的地址写进配置文件让go2rtc帮你统一分发。你需要的不是一大堆专业术语而是先跑通第一路摄像头感受一下从拉流到输出的整个链路。之后再加新摄像头就是在配置文件里多写两三行的事情。最后再分享一个小技巧配置好所有摄像头后在手机浏览器里把go2rtc后台的Play页面添加到主屏幕它就像一个自制监控App一样打开即用比装一堆厂商App清爽太多。这个玩法我现在还在用体验很不错。
返回列表