Files
2026-03-30 11:25:59 +08:00

322 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[English](./README.md) | **中文**
<p align="center">
|<img src="./docs/logo.png" alt="GoWVP Logo" width="550"/>|<img src="./docs/logo2.png" alt="GoWVP Logo" width="550"/>|
|-|-|
</p>
<p align="center">
<a href="https://github.com/gowvp/owl/releases"><img src="https://img.shields.io/github/v/release/ixugo/goddd?include_prereleases" alt="Version"/></a>
</p>
# GB28181 视频监控平台 开箱即用
基于 GB28181-2022 标准实现的网络视频平台,同时支持 2016/2011 版本,支持 ONVIF/RTMP/RTSP 等协议,支持 yolo 检测告警。
## 在线演示平台
+ [在线演示平台 :) ](http://gowvp.golang.space:15123/)
![](./docs/demo/play.gif)
|![](./docs/phone/login.webp)|![](./docs/phone/desktop.webp)|![](./docs/phone/gb28181.webp)|![](./docs/phone/discover.webp)|
|-|-|-|-|
## 应用场景:
+ 支持浏览器无插件播放摄像头视频。
+ 支持国标设备(摄像机、平台、NVR等)设备接入
+ 支持非国标(rtsp, rtmp,直播设备等等)设备接入,充分利旧。
+ 支持跨网视频预览。
+ 支持 Docker, Docker Compose, Kubernetes 部署
## 开源库
感谢 @panjjo 大佬的开源库 [panjjo/gosip](https://github.com/panjjo/gosip),GoWVP 的 sip 信令基于此库,出于底层封装需要,并非直接依赖该项目,而是源代码放到了 pkg 包中。
流媒体服务支持两种
+ @夏楚 [ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)
+ **lalmax-pro 有 golang 流媒体的需求请联系微信 [joezhang202512](https://github.com/joestarzxh)(备注留言gowvp)**
- 对环境没有要求,不需要安装任何静态库,支持跨平台编译
- 支持特色功能定制
- 支持 G711(G711A/G711U) 转 AAC
播放器使用@dexter [jessibuca](https://github.com/langhuihui/jessibuca/tree/v3)
项目框架基于 @ixugo [goddd](https://github.com/ixugo/goddd)
## QA
> 怎么没有前端资源? 如何加载网页呢?
[点击前往下载 www.zip 压缩包](https://github.com/gowvp/gb28181_web/releases/latest)
前端资源下载(打包)后放到项目根目录,命名为 `www` 即可正常加载。
> 有没有代码相关的学习资料?
[GB/T28181 开源日记[1]:从 0 到实现 GB28181 协议的完整实践](https://juejin.cn/post/7456722441395568651)
[GB/T28181 开源日记[2]:搭建服务端,解决跨域,接口联调](https://juejin.cn/post/7456796962120417314)
[GB/T28181 开源日记[3]:使用 React 组件构建监控数据面板](https://juejin.cn/post/7457228085826764834)
[GB/T28181 开源日记[4]:使用 ESlint 辅助开发](https://juejin.cn/post/7461539078111789108)
[GB/T28181 开源日记[5]:使用 react-hook-form 完成表单](https://juejin.cn/post/7461899974198181922)
[GB/T28181 开源日记[6]React 快速接入 jessibuca.js 播放器](https://juejin.cn/post/7462229773982351410)
[GB/T28181 开源日记[7]:实现 RTMP 鉴权与播放](https://juejin.cn/post/7463504223177261119)
[GB/T28181 开源日记[8]:国标开发速知速会](https://juejin.cn/post/7468626309699338294)
> 有没有使用资料?
**RTMP**
[RTMP 推拉流规则](https://juejin.cn/post/7463124448540934194)
[如何使用 OBS RTMP 推流到 GB/T28181平台](https://juejin.cn/post/7463350947100786739)
[海康摄像机 RTMP 推流到开源 GB/T28181 平台](https://juejin.cn/post/7468191617020313652)
[大华摄像机 RTMP 推流到开源 GB/T28181 平台](https://juejin.cn/spost/7468194672773021731)
**GB/T28181**
[GB28181 七种注册姿势](https://juejin.cn/post/7465274924899532838)
> 播放黑屏
查看「快捷桌面」 - 「zlm 右上角设置按钮」 - 「国标收流默认地址」
此地址是否能被监控设备访问到
查看「快捷桌面」 - 「zlm 右上角设置按钮」 - 「Hook IP」
zlm 能否访问到 gowvp?? docker 合并版本填写 127.0.0.1 即可,分离部署则要明确的 IP 地址
> 列表项里的通道实际有 n 个,但仅显示部分
设计如此,超过 4 个要在管理页查看,或者点击右侧的 "查看更多"
> 使用了 nginx 反向代理,返回的播放地址无法播放或不加载快照
在反向代理那里配置以下参数,其中域名根据实际的填写
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Prefix "https://gowvp.com";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
> 如何使用其它数据库?
在 configs/config.toml 配置文件中,修改 database.dsn
[推荐] sqlite 应该为本地磁盘路径,建议默认 configs/data.db
[推荐] postgres 参考格式 `postgres://postgres:123456@127.0.0.1:5432/gb28181?sslmode=disable`
mysql 参考格式 `mysql://root:123456@127.0.0.1:5432/gb28181?sslmode=disable`
postgres 和 mysql 的格式即:
`<db_type>://<username>:<password>@<ip>:<port>/<db_name>?sslmode=disable`
> 如何关闭 AI?
可以在 `configs/config.toml` 中修改 `disabledAI = true` 全局关闭 ai 检测
目前 v1.3.0 版本是 1 秒检测 1 帧,需要播放视频在右上角手动开启.
开启分析后,每路流占用约 200MB 内存 2 核
注意:开启 AI 分析后,即使没有人观看,系统也会自动保持视频流不关闭以确保 AI 持续分析。
> 为什么开启 AI 分析后,即是没人观看,流也不会自动停止
ai 分析会拉取一道流,程序会以为有人观看
> 国标设备在线,通道离线?
属于 ipc 的问题,请检查 ipc 后台注册的 平台 sip_id 和 域是否与 gowvp/owl 一致。
> 如何自定义模型?
将自己的模型存放在 configs 目录下,改名为 `owl.onnx``owl.tflite`
目前对 onnx 支持最友好
> 播放黑屏,日志提示 zlm 连接不上?
程序会自动识别是否容器中,才会主动启动 zlm,支持 docker/containerd/podman 等,如果确实没有拉起来,尝试在 compose 文件设置环境变量 NVR_STREAM=ZLM,重启容器试试。
播放黑屏也可能是 IP 配置有误,容器内 zlm 与 owl 联系用默认 127.0.0.1 即可,收流 IP 必须填写局域网 IP。
> NVR 播放黑屏? 老旧摄像头播放黑屏?
进入「监控」-「管理」,找到对应的设备,选择「编辑」-「下一步」,将收流模式修改为 **UDP**
等待 1 分钟后,重新点击通道播放看看。
> 摄像机注册上了,但是拿不到通道?
1. 进入「监控」-「接入信息」页面
2. 登录摄像机后台,检查 "server id" 是否与 「接入信息」页面的一致,不一致则修改为一致,重新注册即可
## 文档
GoWVP [在线接口文档](https://apifox.com/apidoc/shared-7b67c918-5f72-4f64-b71d-0593d7427b93)
ZLM使用文档 [github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<h1>看到这里啦,恭喜你发现新项目</h1>
<h1>点个 star 不迷路</h1>
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
## Docker
### 视频指南
[如何构建或运行项目](https://www.bilibili.com/video/BV1QLQeYHEXb)
[如何用 docker compose 部署项目](https://www.bilibili.com/video/BV112QYY3EZX)
[docker hub](https://hub.docker.com/r/gospace/gowvp)
** gowvp & zlmediakit 融合镜像(推荐)**
docker-compose.yml
```yml
services:
gowvp:
# 如果拉不到 docker hub 镜像,也可以尝试
# registry.cn-shanghai.aliyuncs.com/ixugo/homenvr:latest
image: gospace/gowvp:latest
restart: unless-stopped
# network_mode 和 ports 二选一
# network_mode: host
ports:
# gb28181
- 15123:15123 # 管理平台 http 端口
- 15060:15060 # gb28181 sip tcp 端口
- 15060:15060/udp # gb28181 sip udp 端口
# zlm
- 1935:1935 # rtmp
- 554:554 # rtsp
- 8080:80 # http
- 8443:443 # https
- 10000:10000
- 8000:8000/udp # webrtc
- 9000:9000/udp
- 20000-20100:20000-20100 # gb28181 收流端口
- 20000-20100:20000-20100/udp # gb28181 收流端口udp
volumes:
# 日志目录是 configs/logs
- ./data:/opt/media/bin/configs
# 录像
- ./recordings:/opt/media/bin/configs/recordings
```
另外,gowvp 和 zlm 可以分开部署,在配置文件配置一下连接地址和端口
## 快速开始
如果你是 Go 语言开发者并熟悉 docker,可以下载源代码,本地编程运行。
**前置条件**
+ Golang
+ Docker & Docker Compose
+ Make
**操作流程**
+ 1. 克隆本项目
+ 2. 修改 configs/config.toml 中 `WebHookIP` 为你的局域网 IP
+ 3. 执行 `make build/linux && docker compose up -d`
+ 4. 自动创建了 zlm.conf 文件夹,获取 config.ini 的 api 秘钥,填写到 `configs/config.toml``Secret`
+ 5. 执行 `docker compose restart`
+ 6. 浏览器访问 `http://localhost:15123`
## 如何参与开发?
1. fork 本项目
2. 编辑器 run/debug 设置配置输出目录为项目根目录
3. 修改,提交 PR,说明修改内容
## 功能特性
- [x] 开箱即用,支持响应式 web 管理
- [x] 支持输出 HTTP_FLV,Websocket_FLV,HLS,WebRTC,RTSP、RTMP 等多种协议流地址
- [x] 支持局域网/互联网/多层 NAT/特殊网络环境部署
- [x] 支持 SQLite 数据库快速部署
- [x] 支持 PostgreSQL/MySQL 数据库
- [x] 服务重启自动离线/自动尝试连接
- [x] GB/T28181
- [x] 设备注册,支持 7 种接入方式
- [x] 支持 UDP 和 TCP 两种国标信令传输模式
- [x] 设备校时
- [x] 支持信息查询
- [x] 设备目录查询
- [x] 设备信息查询
- [x] 设备基础配置查询(例如设备侧填写超时 3 秒,次数 3 次,则 9+x 秒左右收不到心跳认为离线,x 是检测间隔周期)
- [x] 设备实时直播
- [x] 支持 UDP 和 TCP 被动两种国标流传输模式
- [x] 按需拉流,节省流量 (30秒无人观看自动停止)
- [x] 视频支持播放 H264 和 H265
- [x] 音频支持 g711a/g711u/aac
- [x] 快照
- [x] 支持跨域
- [x] 支持中文和 English
- [x] 支持 onvif
- [x] 支持 rtmp 推流
- [x] 支持 rtsp 拉流
- [x] 支持 ai 算法分析与告警
- [x] 云端录像回放(由 owl 录制)
- [ ] 卡存录像回放(由 摄像头 录制在SD卡,暂无开发计划)
## 感谢
感谢赞助,排名不分先后。
[@joestarzxh](https://github.com/joestarzxh)
[@oldweipro](https://github.com/oldweipro)
[@beixiaocai](https://github.com/beixiaocai)
[@chencanfggz](https://github.com/chencanfggz)
[@zhangxuan1340](https://github.com/zhangxuan1340)
## 许可证
本项目采用 **[GNU 通用公共许可证 v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.html)** 授权。
- **您可以自由使用、修改和分发本项目的代码**,但必须遵循以下条件:
- **开源要求**:任何基于本项目的衍生作品(包括修改后的代码或集成本项目的软件)**必须同样以 GPL-3.0 协议开源**。
- **保留协议与版权声明**:在衍生作品中需包含原项目的 `LICENSE` 文件及原始版权声明。
- **明确修改说明**:若您修改了代码,需在文件中注明变更内容。
**注意**:若将本项目用于商业闭源软件或 SaaS 服务,需遵守 GPL-3.0 的传染性条款(即相关代码必须开源)。
完整许可证文本请见 [LICENSE](./LICENSE) 文件。