news 2026/9/12 6:42:29

5 分钟把摄像头搬进浏览器:go2rtc 低延迟推流入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5 分钟把摄像头搬进浏览器:go2rtc 低延迟推流入门指南

5 分钟把摄像头搬进浏览器:go2rtc 低延迟推流入门指南

【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc

go2rtc 是一款零依赖的摄像头流媒体应用(camera streaming application):你把一个 RTSP 地址丢给它,它就能立刻在浏览器里以接近实时的延迟播放视频,同时自动把这一路流转换成 WebRTC、HLS、MP4、MJPEG、RTSP 等十几种输出格式。对家庭用户、智能家居玩家、开发者来说,它是"摄像头协议大杂烩"问题的终结者——不管摄像头说的是 RTSP、ONVIF、RTMP 还是某家私有协议,进来之后统一出口。

一路输入、十几种输出:go2rtc 能干什么

先用一张表看清它的定位,再决定要不要花那 5 分钟:

能力说明典型场景
多协议输入RTSP、RTMP、HTTP、ONVIF、MJPEG,以及小米、TP-Link Tapo、Wyze、Ring、Nest、HomeKit 等大量私有协议把"不听话"的摄像头接进统一平台
多格式输出WebRTC、MSE/MP4、HLS、RTSP、RTMP、MJPEG、HomeKit、ONVIF、WebTorrent同一路流同时喂给浏览器、FFmpeg、手机 App
超低延迟大量协议下零转码直通,延迟是各类流媒体方案中最低的一档监控实时查看、对讲
双向音频麦克风音频能推回摄像头扬声器(Tapo、Wyze、小米、ISAPI 等)喊话、远程语音
按需转码内置 FFmpeg 源,只在必要时转码,支持硬件加速转 H264/AAC、修正旋转角度
零依赖单文件一个二进制跑遍 Windows / macOS / Linux / ARMNAS、树莓派、软路由随便装

它的另一个身份是"流媒体路由器":Home Assistant、Frigate 等生态项目都直接把它当后端用,你通过 HTTP API 或 WebSocket API 可以把它集成进自己的项目。

5 分钟跑通:从一条命令到看到画面

这一步的目标只有一个——先看到视频。装哪种方式都行,Docker 用户用第 1 条,没有 Docker 的用第 2 条。

方式一:Docker(推荐,自带 FFmpeg)

docker run -d --name go2rtc --network host --restart unless-stopped \ -v ~/go2rtc:/config alexxit/go2rtc

方式二:二进制

从 Releases 页面下载对应系统的压缩包(Linux/macOS 记得chmod +x),然后直接运行:

./go2rtc_linux_amd64

看到进程正常启动后,浏览器打开http://localhost:1984/,这就是 go2rtc 的 Web 管理界面:

现在给它加一路流:点左侧配置入口,在streams下填一行你的摄像头地址,保存后界面会立刻出现这个流名,点进去就能看到画面(播放器会自动在 WebRTC、MSE、HLS、MJPEG 之间挑当前环境延迟最低的方案)。

streams: hall: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0

到这里,最核心的链路已经跑通:摄像头 → go2rtc → 浏览器,中间没有中间商、没有转码。小结:配置里一行 URL 就是一个流,流名可以随意起,后面所有功能都围绕"流名"展开。

二进制 / Docker / 源码:三种安装方式怎么选

对比维度官方二进制Docker 容器源码编译(main.go 入口)
适合谁想最少折腾的普通用户已有 Docker / NAS 环境想改代码、跟最新版
上手成本下载即跑一条命令需要 Go 环境
自带 FFmpeg否(需系统安装)
硬件转码需系统装好 FFmpeg + 驱动有专用-hardware镜像(Intel/AMD/NV/RK35xx)自己折腾
升级方式重新下载覆盖拉新镜像重新编译

选法很简单:日常使用选 Docker(镜像已预装 FFmpeg 和 Python,多架构支持 386 / amd64 / arm);只是想看一眼画面选二进制;要改代码或尝鲜再走源码(可用git clone https://gitcode.com/GitHub_Trending/go/go2rtc获取仓库,go run .即可启动)。镜像版本细节见 docker/README.md。

最小可用配置:一份真的能跑的 go2rtc.yaml

默认配置什么都不用写就能跑,但下面这三个部分是你几乎一定会碰到的。默认情况下 go2rtc 会在当前工作目录go2rtc.yaml;Docker 里则是对应到/config的目录,也可以在 WebUI 里直接编辑(带语法检查)。

① streams:流的定义(核心)

streams: hall: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 desk: ffmpeg:/media/test.mp4#video=copy # 用本地文件当"测试摄像头" tapo-1: tapo://192.168.1.100:cam1,admin,pass # 私有协议用专用前缀

改什么 → 为什么:值是"协议前缀://凭据@地址",换摄像头只改这里。没有摄像头?用ffmpeg:前缀加一个本地 MP4 文件就能全流程试跑,这是新手最省事的测试手段。

② 端口:记住三个数字

端口用途说明
1984WebUI + HTTP API浏览器看画面、管理配置
8554RTSP 服务器给 Frigate、FFmpeg、NVR 拉流
8555WebRTC(TCP/UDP)低延迟播放与外网访问都要靠它

③ 安全:别把 1984 裸奔在局域网里

默认三个端口对局域网全开,意味着同网段任何人不用登录就能看你的摄像头。最常用的一招是把 API 和 RTSP 收回本机:

api: listen: "127.0.0.1:1984" # WebUI 只允许本机访问,外网走反向代理 rtsp: listen: "127.0.0.1:8554"

需要对外时再配合反向代理(Nginx/Caddy)或api.username/password加 Basic 认证。另外配置支持${ENV_VAR:default}环境变量语法,密码类信息建议走环境变量而不是明文写进 yaml,详见 internal/app/README.md。

WebUI 里的配置页长这样,改完点保存即生效(容器会因restart: unless-stopped自动重启加载):

可选进阶:FFmpeg 转码、多源协商与硬件加速

以下都属于"用到再看",不配置不影响前面的一切功能。

FFmpeg 源(按需转码)。格式是ffmpeg:{输入}#{参数},只在真的需要转码时才加,比如视频旋转了 90°、要把音频转成浏览器都认的格式:

streams: rotate: ffmpeg:rtsp://user:pass@192.168.1.123/stream#video=h264#rotate=90

内置了h264h265aacopus等模板,参数含义和覆盖方法见 internal/ffmpeg/README.md。

多源协商(最被低估的功能)。一个流可以挂多个源:原生 RTSP 一路保证低延迟,FFmpeg 转码一路补齐浏览器不支持的音频编码,go2rtc 会自动为每个客户端挑最合适的源:

streams: dahua: - rtsp://admin:pass@192.168.1.123/stream - ffmpeg:rtsp://admin:pass@192.168.1.123/stream#audio=opus

码流过滤器。RTSP/HLS/MP4 出口没法像 WebRTC 那样自动探测设备能力,可以在链接上手动指定:rtsp://192.168.1.123:8554/camera1?mp4(录 MP4 用)、?video=h264&audio=aac

硬件加速(可选)。Docker 用户直接换-hardware镜像并加--gpus all(N 卡)或保持privileged(Intel/树莓派),配置里给 ffmpeg 源加#hardware参数即可;镜像差异见 internal/ffmpeg/hardware/README.md。

监控与统计。流跑起来后,WebUI 的 Net 页能看到每个连接的 IP、协议、码率和流量,配合 API 还能导出 JSON/点图格式——排查"到底谁在拉流"非常有用:

再往后可以探索的方向:publish把任意流推到 Telegram/YouTube(internal/streams/README.md)、preload让慢启动摄像头开机即就绪、以及把 www/ 里的播放器 JS 嵌进自己的项目。

自检清单:画面出不来?按顺序勾一遍

遇到"没画面"时 90% 是下面这几项之一,从上到下勾:

  • 进程活着?docker logs go2rtc或终端输出里有正常启动日志
  • 浏览器能打开http://localhost:1984/?不能 → 1984 被防火墙拦了,或被api.listen收回到 127.0.0.1
  • 摄像头 URL 本身能通?用ffplay rtsp://...或设备厂商 App 单独验证,先排除摄像头问题
  • 地址/账号/密码对吗?注意 URL 里特殊字符(如#?)需要转义
  • 编码兼容?H265 在老浏览器/iPhone 上可能黑屏,试试给链接加?video=h264或加一路ffmpeg:转码源(参考 README 的 Codecs 一节)
  • 外网看不到 WebRTC?8555 端口需要在路由器同时放行 TCP 和 UDP
  • 日志级别调高:配置里加log: {level: debug, streams: debug}看具体断在哪一环
  • 音频没声音?PCMA/PCMU 是 256 级低质量编码,很多出口需要转成 AAC/OPUS 才能播

还查不出来,就把log.level: trace的输出贴给社区,基本都能定位。

延伸导航:项目内文档地图

想看什么去哪里
全部模块与功能总表internal/README.md
配置项完整参考(默认值、环境变量)internal/app/README.md
HTTP / WebSocket API 说明internal/api/README.md
OpenAPI 描述文件website/api/openapi.yaml
WebUI 与自定义播放器www/README.md
FFmpeg 源与硬件加速internal/ffmpeg/README.md
各私有协议(Tapo/Wyze/小米/Nest…)接入参数internal/webrtc/README.md、internal/tapo/README.md
流推流、preload、发布internal/streams/README.md

上手顺序建议:先用 5 分钟跑通看到画面 → 再花 10 分钟改好streams和安全设置 → 之后每遇到一个新摄像头/新需求,回到上表按需深入即可。

【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 6:41:02

3步修复LSP启动命令cmd:nvim-lspconfig实战指南

3步修复LSP启动命令cmd:nvim-lspconfig实战指南 【免费下载链接】nvim-lspconfig Quickstart configs for Nvim LSP 项目地址: https://gitcode.com/GitHub_Trending/nv/nvim-lspconfig 这篇文章解决配置 nvim-lspconfig 时最常见的一类问题:语言…

作者头像 李华
网站建设 2026/9/12 6:37:03

Midscene.js 浏览器自动化完整指南:3 步让 Chrome 听懂你的话

Midscene.js 浏览器自动化完整指南:3 步让 Chrome 听懂你的话 【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你有没有遇到过这种场景:想在页面上自动点按钮、抓数据、验证流…

作者头像 李华
网站建设 2026/9/12 6:36:41

Python lambda函数详解:从入门到高阶应用

1. 什么是Python lambda函数?第一次接触Python lambda函数时,我完全被这个奇怪的语法搞懵了。为什么要在Python中使用这种看起来像"残废"的函数?直到我在处理一个数据清洗任务时,才真正体会到它的威力。lambda函数是Pyt…

作者头像 李华
网站建设 2026/9/12 6:34:55

如何从源码构建 InsightFace Server 镜像并用本地镜像启动服务?

如何从源码构建 InsightFace Server 镜像并用本地镜像启动服务? 【免费下载链接】insightface State-of-the-art 2D and 3D Face Analysis Project 项目地址: https://gitcode.com/GitHub_Trending/in/insightface InsightFace Server 是一个自托管的人脸识别…

作者头像 李华