{"id":36761233,"url":"https://github.com/gowvp/owl","last_synced_at":"2026-01-12T12:55:41.979Z","repository":{"id":269910582,"uuid":"908405393","full_name":"gowvp/gb28181","owner":"gowvp","description":"基于GB28181-2022标准的NVR平台，同时支持 ONVIF/RTMP/RTSP 协议，集成 ZLMediaKit 处理流媒体，开箱即用。未来具备实时本地物体检测功能，适合注重隐私的私有化部署。","archived":false,"fork":false,"pushed_at":"2025-12-20T02:34:29.000Z","size":17148,"stargazers_count":507,"open_issues_count":2,"forks_count":97,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-12-22T05:03:58.819Z","etag":null,"topics":["frigate","frigate-nvr","gb28181","gb28181-2022","homekit","nvr","onvif","rtmp","rtsp","wvp","zlm"],"latest_commit_sha":null,"homepage":"http://gowvp.golang.space:15123","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gowvp.png","metadata":{"files":{"readme":"README.md","changelog":"changelog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-26T02:04:03.000Z","updated_at":"2025-12-22T04:56:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"027a5e62-8b11-4bf6-9868-5bd0354644bc","html_url":"https://github.com/gowvp/gb28181","commit_stats":null,"previous_names":["gowvp/gb28181"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/gowvp/gb28181","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gowvp%2Fgb28181","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gowvp%2Fgb28181/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gowvp%2Fgb28181/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gowvp%2Fgb28181/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gowvp","download_url":"https://codeload.github.com/gowvp/gb28181/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gowvp%2Fgb28181/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["frigate","frigate-nvr","gb28181","gb28181-2022","homekit","nvr","onvif","rtmp","rtsp","wvp","zlm"],"created_at":"2026-01-12T12:55:41.159Z","updated_at":"2026-01-12T12:55:41.953Z","avatar_url":"https://github.com/gowvp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n**English** | [中文](./README_CN.md)\n\n\u003cp align=\"center\"\u003e\n\n |\u003cimg src=\"./docs/logo.png\" alt=\"GoWVP Logo\" width=\"550\"/\u003e|\u003cimg src=\"./docs/logo2.png\" alt=\"GoWVP Logo\" width=\"550\"/\u003e|\n|-|-|\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/gowvp/owl/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/ixugo/goddd?include_prereleases\" alt=\"Version\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Out-of-the-Box Video Surveillance Platform\n\nGoWVP is an open-source GB28181 solution implemented in Go, a network video platform based on the GB28181-2022 standard that also supports 2016/2011 versions, with ONVIF/RTMP/RTSP protocol support.\n\n## Live Demo\n\n+ [Online Demo Platform :)](http://gowvp.golang.space:15123/)\n\n![](./docs/demo/play.gif)\n\n|![](./docs/phone/login.webp)|![](./docs/phone/desktop.webp)|![](./docs/phone/gb28181.webp)|![](./docs/phone/discover.webp)|\n|-|-|-|-|\n\n## Use Cases\n\n+ Browser-based camera video playback without plugins\n+ Support for GB28181-compliant devices (IP cameras, platforms, NVRs, etc.)\n+ Support for non-GB28181 devices (RTSP, RTMP, streaming devices, etc.) - maximize your existing equipment\n+ Cross-network video preview\n+ Deployment via Docker, Docker Compose, or Kubernetes\n\n## Open Source Libraries\n\nThanks to @panjjo for the open-source library [panjjo/gosip](https://github.com/panjjo/gosip). GoWVP's SIP signaling is based on this library. Due to underlying encapsulation requirements, it's not a direct dependency but rather included in the pkg package.\n\nTwo streaming media servers are supported:\n\n+ @夏楚 [ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)\n\n+ **lalmax-pro** - For Go streaming media needs, contact email xx@golang.space\n  - No environment requirements, no static library installation needed, cross-platform compilation support\n  - Custom feature development available\n  - G711 (G711A/G711U) to AAC transcoding support\n\nPlayer uses @dexter's [jessibuca](https://github.com/langhuihui/jessibuca/tree/v3)\n\nProject framework based on @ixugo's [goddd](https://github.com/ixugo/goddd)\n\n## FAQ\n\n\u003e Where are the frontend resources? How to load the web interface?\n\n[Click to download www.zip package](https://github.com/gowvp/gb28181_web/releases/latest)\n\nDownload (packaged) frontend resources and place them in the project root directory, named `www` to load properly.\n\n\u003e Any learning materials about the code?\n\n[GB/T28181 Open Source Diary[1]: Complete Practice from 0 to Implementing GB28181 Protocol](https://juejin.cn/post/7456722441395568651)\n\n[GB/T28181 Open Source Diary[2]: Setting Up Server, Solving CORS, API Integration](https://juejin.cn/post/7456796962120417314)\n\n[GB/T28181 Open Source Diary[3]: Building Monitoring Dashboard with React Components](https://juejin.cn/post/7457228085826764834)\n\n[GB/T28181 Open Source Diary[4]: Using ESLint for Development](https://juejin.cn/post/7461539078111789108)\n\n[GB/T28181 Open Source Diary[5]: Completing Forms with react-hook-form](https://juejin.cn/post/7461899974198181922)\n\n[GB/T28181 Open Source Diary[6]: Quick Integration of jessibuca.js Player in React](https://juejin.cn/post/7462229773982351410)\n\n[GB/T28181 Open Source Diary[7]: Implementing RTMP Authentication and Playback](https://juejin.cn/post/7463504223177261119)\n\n[GB/T28181 Open Source Diary[8]: Quick Guide to GB28181 Development](https://juejin.cn/post/7468626309699338294)\n\n\u003e Any usage documentation?\n\n**RTMP**\n\n[RTMP Push/Pull Stream Rules](https://juejin.cn/post/7463124448540934194)\n\n[How to Use OBS RTMP Push Stream to GB/T28181 Platform](https://juejin.cn/post/7463350947100786739)\n\n[Hikvision Camera RTMP Push Stream to Open Source GB/T28181 Platform](https://juejin.cn/post/7468191617020313652)\n\n[Dahua Camera RTMP Push Stream to Open Source GB/T28181 Platform](https://juejin.cn/spost/7468194672773021731)\n\n**GB/T28181**\n\n[7 Ways to Register GB28181 Devices](https://juejin.cn/post/7465274924899532838)\n\n\u003e Black screen when playing\n\nCheck \"Quick Desktop\" - \"ZLM settings button (top right)\" - \"GB28181 stream receiving default address\"\nEnsure this address is accessible by the surveillance device.\n\nCheck \"Quick Desktop\" - \"ZLM settings button (top right)\" - \"Hook IP\"\nCan ZLM access GoWVP? For Docker combined version, use 127.0.0.1. For separate deployment, use explicit IP address.\n\n\u003e Channel list shows fewer channels than actual count\n\nBy design. More than 4 channels should be viewed in the management page, or click \"View More\" on the right.\n\n\u003e Using nginx reverse proxy, returned playback addresses don't work or snapshots don't load\n\nConfigure the following parameters in reverse proxy (replace domain with your actual one):\n\nproxy_set_header X-Forwarded-Host $host;\n\nproxy_set_header X-Forwarded-Prefix \"https://gowvp.com\";\n\nproxy_set_header Upgrade $http_upgrade;\n\nproxy_set_header Connection \"upgrade\";\n\n\u003e How to use other databases?\n\nIn the `configs/config.toml` configuration file, modify `database.dsn`\n\n[Recommended] SQLite should be a local disk path, default is `configs/data.db`\n\n[Recommended] PostgreSQL format: `postgres://postgres:123456@127.0.0.1:5432/gb28181?sslmode=disable`\n\nMySQL format: `mysql://root:123456@127.0.0.1:5432/gb28181?sslmode=disable`\n\nPostgreSQL and MySQL format pattern:\n`\u003cdb_type\u003e://\u003cusername\u003e:\u003cpassword\u003e@\u003cip\u003e:\u003cport\u003e/\u003cdb_name\u003e?sslmode=disable`\n\n\u003e How to disable AI?\n\nAI detection is enabled by default, detecting 5 frames per second.\n\nYou can disable AI detection by setting `disabledAI = true` in `configs/config.toml`\n\n## Documentation\n\nGoWVP [Online API Documentation](https://apifox.com/apidoc/shared-7b67c918-5f72-4f64-b71d-0593d7427b93)\n\nZLM Documentation [github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)\n\n// \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\u003ch1\u003eYou've made it this far!\u003c/h1\u003e\n\u003ch1\u003eGive us a ⭐ star!\u003c/h1\u003e\n// \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\n## Docker\n\n### Video Guide\n\n[How to Build or Run the Project](https://www.bilibili.com/video/BV1QLQeYHEXb)\n\n[How to Deploy with Docker Compose](https://www.bilibili.com/video/BV112QYY3EZX)\n\n[Docker Hub](https://hub.docker.com/r/gospace/gowvp)\n\n**GoWVP \u0026 ZLMediaKit Combined Image (Recommended)**\n\ndocker-compose.yml\n\n```yml\nservices:\n  gowvp:\n    # If Docker Hub image is unavailable, try:\n    # registry.cn-shanghai.aliyuncs.com/ixugo/homenvr:latest\n    image: gospace/gowvp:latest\n    restart: unless-stopped\n    # For Linux, uncomment the line below and comment out all ports\n    # network_mode: host\n    ports:\n      # gb28181\n      - 15123:15123 # Management platform HTTP port\n      - 15060:15060 # GB28181 SIP TCP port\n      - 15060:15060/udp # GB28181 SIP UDP port\n      # zlm\n      - 1935:1935 # rtmp\n      - 554:554 # rtsp\n      - 8080:80 # http\n      - 8443:443 # https\n      - 10000:10000\n      - 8000:8000/udp\n      - 9000:9000/udp\n      - 20000-20100:20000-20100 # GB28181 stream receiving ports\n      - 20000-20100:20000-20100/udp # GB28181 stream receiving UDP ports\n    volumes:\n      # Log directory is configs/logs\n      - ./data:/opt/media/bin/configs\n```\n\n**GoWVP \u0026 ZLMediaKit Separate Images (More Complex Deployment)**\n\n```yml\nservices:\n  gowvp:\n    image: registry.cn-shanghai.aliyuncs.com/ixugo/gowvp:latest\n    ports:\n      - 15123:15123 # Management platform HTTP port\n      - 15060:15060 # GB28181 SIP TCP port\n      - 15060:15060/udp # GB28181 SIP UDP port\n    volumes:\n      # - ./logs:/app/logs # Uncomment if you need persistent logs\n      - ./configs:/app/configs\n    depends_on:\n      - zlm\n  zlm:\n    image: zlmediakit/zlmediakit:master\n    restart: always\n    # Recommended: use host mode for Linux\n    # network_mode: host\n    ports:\n      - 1935:1935 # rtmp\n      - 554:554 # rtsp\n      - 8080:80 # api\n      - 8443:443\n      - 10000:10000\n      - 10000:10000/udp\n      - 8000:8000/udp\n      - 9000:9000/udp\n      - 20000-20100:20000-20100\n      - 20000-20100:20000-20100/udp\n    volumes:\n      - ./configs:/opt/media/conf\n```\n\n## Quick Start\n\nIf you're a Go developer familiar with Docker, you can download the source code and run locally.\n\n**Prerequisites**\n\n+ Golang\n+ Docker \u0026 Docker Compose\n+ Make\n\n**Steps**\n\n1. Clone this repository\n2. Modify `WebHookIP` in `configs/config.toml` to your LAN IP\n3. Run `make build/linux \u0026\u0026 docker compose up -d`\n4. A `zlm.conf` folder is auto-created. Get the API secret from `config.ini` and fill it in `configs/config.toml` under `Secret`\n5. Run `docker compose restart`\n6. Access `http://localhost:15123` in your browser\n\n## How to Contribute?\n\n1. Fork this project\n2. Set your editor's run/debug output directory to the project root\n3. Make changes, submit a PR with description of modifications\n\n## Features\n\n- [x] Out-of-the-box with web interface\n- [x] RTMP stream distribution support\n- [x] RTSP stream distribution support\n- [x] Multiple protocol output: HTTP_FLV, Websocket_FLV, HLS, WebRTC, RTSP, RTMP\n- [x] LAN/Internet/Multi-layer NAT/Special network environment deployment\n- [x] SQLite database for quick deployment\n- [x] PostgreSQL/MySQL database support\n- [x] Auto offline/reconnect on service restart\n- [x] GB/T 28181\n  - [x] Device registration with 7 connection methods\n  - [x] UDP and TCP signaling transport modes\n  - [x] Device time synchronization\n  - [x] Information queries support\n    - [x] Device catalog query\n    - [x] Device info query\n    - [x] Device basic config query (e.g., timeout 3s × 3 retries = ~9+x seconds for offline detection)\n  - [x] Live streaming from devices\n  - [x] UDP and TCP passive stream transport modes\n  - [x] On-demand streaming to save bandwidth (auto-stop after 30s without viewers)\n  - [x] H264 and H265 video codec support\n  - [x] g711a/g711u/aac audio codec support\n  - [x] Snapshots\n  - [x] CORS support\n  - [x] Chinese and English language support\n  - [x] ONVIF support\n  - [ ] PTZ control\n  - [ ] Recording playback\n  - [ ] Alarm event subscription\n  - [ ] Alarm event notification handling\n\n## Acknowledgments\n\nThanks to our sponsors (in no particular order):\n\n[@joestarzxh](https://github.com/joestarzxh)\n[@oldweipro](https://github.com/oldweipro)\n[@beixiaocai](https://github.com/beixiaocai)\n\n## License\n\nThis project is licensed under the **[GNU General Public License v3.0 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.html)**.\n\n- **You are free to use, modify, and distribute** the code of this project, subject to the following conditions:\n- **Open Source Requirement**: Any derivative works based on this project (including modified code or software integrating this project) **must also be open-sourced under GPL-3.0**.\n- **Retain License \u0026 Copyright Notice**: Derivative works must include the original project's `LICENSE` file and copyright notices.\n- **Document Modifications**: If you modify the code, you must indicate the changes in the files.\n\n⚠ **Note**: If using this project for commercial closed-source software or SaaS services, you must comply with GPL-3.0's copyleft provisions (i.e., related code must be open-sourced).\n\nFor the complete license text, see the [LICENSE](./LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgowvp%2Fowl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgowvp%2Fowl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgowvp%2Fowl/lists"}