# NodeJS版本基于GB28181的管理平台 **Repository Path**: vesung/GB28181_Node_Http ## Basic Information - **Project Name**: NodeJS版本基于GB28181的管理平台 - **Description**: NodeJS版本基于GB28181的管理平台,实现浏览器播放GB28181设备视频功能,并有二次开发API接口 - **Primary Language**: NodeJS - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 142 - **Created**: 2021-01-21 - **Last Updated**: 2021-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于NodeJS的GB 28181管理平台 -------------- ## 一、功能介绍 - GB28181的设备注册到本平台,并发布为多种媒体格式,支持浏览器播放视频 - 流媒体服务集成 [ZLMediaKit](https://github.com/xia-chu/ZLMediaKit)(Linux版本,感谢作者夏楚),目前仅限Linux下使用 ### 功能截图 #### 1. 播放界面 ![播放界面](https://gitee.com/hfwudao/GB28181_Node_Http/raw/develop/%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE/%E6%92%AD%E6%94%BE%E7%95%8C%E9%9D%A2.png) #### 2. 设备列表界面 ![设备列表](https://gitee.com/hfwudao/GB28181_Node_Http/raw/develop/%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE/%E8%AE%BE%E5%A4%87%E5%88%97%E8%A1%A8.png) ## 二、技术框架 ### 1. 前端 - [查看前端文档](https://gitee.com/hfwudao/GB28181_Node_Http/blob/master/CameraUI/README.md) ### 2. 后端 - 后端使用NodeJS开发,加入Express框架。 - apidoc 文档工具(安装脚本在setup.sh里)。 - test-api.http是VsCode的Rest Client插件的测试用例脚本。 使用时在VsCode的Workspace Settings-settings.json设置环境变量,如: ```json { "rest-client.environmentVariables": { "$shared": {}, "local":{ "host":"localhost" }, "test":{ "host":"测试服务器ip" } } } ``` ### 3. 默认使用端口 - http端口: 7000 - zlmedia http: 9094 - zlmedia https: 9096 - zlmedia rtmp: 9092 - sip: udp 5060 - sip: tcp 5060 - 其它配置信息: data/constants.js 使用Ctrl+Alt+E来切换加载的配置项。 ## 三、部署 ### 1. 需要准备好NodeJS环境 (步骤略) ### 2. 部署NodeJS服务端 ```bash # 安装 chmod +x ./setup.sh && ./setup.sh # 启动,程序自动启动ZLMediaKit , 不需要专门部署 node app.js # 访问网址 http://你的ip:7000 ``` ### 3. 设置项 - data/cameras.db 是数据库,使用SQLite - data/constants.js 一些常量设置,一般不需要修改 - data/log.js 是log4js设置 - data/registry.data 是缓存文件,删除不影响使用 - 服务端的设置(如服务端设备账号等)在系统启动后,通过网页端设置 ### 4. 设备端设置注意事项 - SIP服务器ID 34020000002000002250 - SIP服务器域 3402000000 - SIP服务器地址: 与摄像头设置的所在服务器对应 - SIP服务器端口 5060 - SIP用户认证ID -- 摄像头 : 34020000001110000***,后面三位数对应平台的通道ID -- NVR : 34020000001320000***,后面三位数对应平台的通道ID - 密码 12345678 - 本地SIP端口 5060 - 注册有效期 默认值 - 心跳周期 默认值 - 最大心跳超时次数 默认值 - NVR_音视频_选择通道 码流类型_主码流 视频类型_视频流,不能是复合流 - 视频通道编码ID 按顺序编写: -- D1 3402000000131000001 -- D2 3402000000131000002 -- ... ### 5. 使用pm2启动程序 ```bash pm2 start app.js # 如果遇到日志过大,可以限制pm2日志数量 pm2 install pm2-logrotate pm2 set pm2-logrotate:retain 50 ``` ## 四、更新日志 - 0.0.1 设备注册、请求目录 - 0.0.2 加restful接口,实现请求设备列表功能 - 0.0.3 实现invite功能 - 0.0.4 增加配置,允许匿名注册,去掉一些不需要文件,增加离线检测 - 0.1.0 GB28181加UI界面 - 1.0.0 加UI界面可执行版本,仍有大量未完成的工作 - 1.0.1 调通大华NVR - 1.0.2 调通rtp on tcp, 退出app时序列化数据保存到磁盘 - 1.0.3 界面优化 - 1.0.4 截图基本功能 - 1.0.5 适配海康多通道摄像头 - 1.0.6 自动截图 ,去掉手工截图 - 1.0.7 完成鉴权 - 1.0.8 适配海康nvr - 1.0.9 内网注册时rport适配 - 1.1.0 集成ZLMedia启动与停止,加定时器自动清理日志 - 1.1.1 离线检测;删除通道时清理缓存,让设备可以重新注册;适配新设备 - 1.1.2 加分页显示、通道命名 ### TODO List - sip.js改了304行: ```js if(via.host=='VM_16_10_centos'){ return ''; } ``` - digest.js 改了 148行 ```js //TODO: 这里不知道干什么用,会造成鉴权失败 if(!ctx.nc){ // 加if的 ctx.nc = (ctx.nc || 0) +1; } ``` - 播放NVR录像 - 电视墙 - 云台控制