# 鹰眼系统-NodeJS版本基于GB28181的管理平台 **Repository Path**: eetuuuu/GB28181_Node_Http ## Basic Information - **Project Name**: 鹰眼系统-NodeJS版本基于GB28181的管理平台 - **Description**: 鹰眼(HawkEye),NodeJS版本基于GB28181的管理平台,实现浏览器播放GB28181设备视频功能、向上对接国标平台,并有二次开发API接口。 - **Primary Language**: NodeJS - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 136 - **Created**: 2025-07-15 - **Last Updated**: 2025-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于NodeJS的GB 28181管理平台 -------------- ## 一、功能介绍 - GB28181的设备注册到本平台,并发布为多种媒体格式(flv,rtmp,hls等),支持浏览器播放视频 - 流媒体服务集成 [ZlMediaKit](https://github.com/xia-chu/ZlMediaKit)(Linux版本,感谢作者夏楚) - 一台信令服务器可以支持多台媒体服务器 - 有丰富的restful API接口,方便与第三方程序集成 ### 功能截图 #### 1. 首页 ![首页](https://gitee.com/hfwudao/GB28181_Node_Http/raw/master/%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE/%E9%A6%96%E9%A1%B5.png) #### 2. 播放界面 ![播放界面](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) #### 3. 设备列表界面 ![设备列表](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) #### 4. 拉流代理列表 ![拉流代理列表](https://gitee.com/hfwudao/GB28181_Node_Http/raw/master/%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE/%E6%8B%89%E6%B5%81%E4%BB%A3%E7%90%86%E5%88%97%E8%A1%A8.png) ## 二、技术框架 ### 1. 前端 - [查看前端文档](https://gitee.com/hfwudao/GB28181_Node_Http/blob/master/web_src/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. ZLMediaKit设置 在ZLMediaKit的config.ini以下参数要与本程序的db/constants.js中的参数一致: ```ini [hook] admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cd on_play=http://本服务地址:7000/api/v1/media/on_play on_publish=http://本服务地址:7000/api/v1/media/on_publish on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4 on_rtp_server_timeout=http://本服务地址:8080/index/hook/on_rtp_server_timeout on_send_rtp_stopped=http://本服务地址:8080/index/hook/on_send_rtp_stopped on_server_keepalive=http://本服务地址:7000/api/v1/media/on_server_keepalive on_server_started=http://本服务地址:7000/api/v1/media/on_server_started on_stream_changed=http://本服务地址:7000/api/v1/media/on_stream_changed on_stream_none_reader=http://本服务地址:7000/api/v1/media/on_stream_none_reader on_stream_not_found=http://本服务地址:7000/api/v1/media/on_stream_not_found [http] port=9092 sslport=1443 [rtp_proxy] port_range=50000-50300 ``` ### 4. 部署 GB28181_Node_Http 服务端 #### (1) 安装 ```bash # 安装 bash ./setup.sh # 安装时生成 apidoc 文档 bash ./setup.sh --apidoc ``` #### (2) 使用 node 启动程序 ```bash # 启动,程序自动启动ZLMediaKit , 不需要专门部署 node gb28181_app.js # 访问网址 http://你的ip:7000 ``` #### (3) 如果使用nvm & pm2 , 主要指令为 ```bash # 显示nvm 安装nodejs版本 nvm list # 选择nodejs版本 nvm use 12.13.1 # 进入程序目录 cd GB28181_Node_Http # 查看pm2运行状态 pm2 list # 停止进程 pm2 stop gb28181_app.js # 启动进程 pm2 start gb28181_app.js # 重启进程 pm2 restart gb28181_app.js # 查看log pm2 logs # 在log中搜索 pm2 logs | grep 0000480 # 如果遇到日志过大,可以限制pm2日志数量 pm2 install pm2-logrotate pm2 set pm2-logrotate:retain 50 ``` ### 5. 切换配置文件 `db/config.js`,这个默认文件不需要修改,如果修改参数值可以修改 data/config.js 如果有多个config_*.js的配置文件,可以在启动时指定加载的配置文件,如: ```bash # 加载 config_test.js node gb28181_app.js --profile test ``` ### 6. 设置项 - data/cameras.db 是数据库,使用SQLite,初始化时自动生成 - db/constants.js 一些常量设置,一般不需要修改,但里面的ip要设置成服务器外网ip - data/registry.data 是缓存文件,删除不影响使用 - 服务端的设置(如服务端设备账号等)在系统启动后,通过网页端设置 ### 7. 设备端设置注意事项 - SIP服务器ID 34020000002000002250 - SIP服务器域 3402000000 - SIP服务器地址: 与摄像头设置的所在服务器对应 - SIP服务器端口 5060 - SIP用户认证ID -- 摄像头 : 34020000001110000***,后面三位数对应平台的通道ID -- NVR : 34020000001320000***,后面三位数对应平台的通道ID - 密码 12345678 - 本地SIP端口 5060 - 注册有效期 默认值 - 心跳周期 默认值 - 最大心跳超时次数 默认值 - NVR_音视频_选择通道 码流类型_主码流 视频类型_视频流,不能是复合流 - 视频通道编码ID 按顺序编写: -- D1 3402000000131000001 -- D2 3402000000131000002 -- ... ## 四、向上级连 ### 1. 拉流代理的通道信息 目前通道信息有两种方式获取,一种是通过 api 接口,一种是在后台添加。 - 向上级连时设备号建议将 camera_id补足5位 与 SIP_CLIENT_PREFIX组合而成。 - 拉流代理生成的播放URL, app=proxy, 示例: rtmp://媒体服务器地址/proxy/41010500002000000001_41010500002000010001 ### 2. 级连信息 向上级连的设置可在后台进行配置。 ### 3. 录像设置 在拉流通道信息里的 record 用来标识该通道是否要录像。 录像路径在 config.js 里设置。 ``` record: { path: '/mnt/record1', channel: "preview", // 录制周期,单位是分钟 duration: 5 } ```` ## 五、更新日志 - 1.1.5 支持多个媒体服务器,取消自动启动媒体服务器 - 1.1.6 设备加搜索 - 1.1.7 有的设备把ParentID值赋值为SIP Server的值,统一改为父域值 - 1.1.8 处理定时报警图片 - 1.1.9 修改密码功能 - 1.1.11 代码逻辑优化,setup优化,sip生成指令的类拆分 - 1.1.12 向上级连功能,拉流通道录像功能。 - 1.1.13 录像使用ZlMediaKit的录像功能,不再使用ffmpeg录像。拉流改成数据库配置,不再使用配置文件配置 - 1.1.15 改用h265web.js播放器