35 Star 226 Fork 115

合肥悟道科技有限责任公司 / 鹰眼系统-NodeJS版本基于GB28181的管理平台

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 6.13 KB
一键复制 编辑 原始数据 按行查看 历史
编程圈子 提交于 2024-01-31 16:22 . 加h265播放器

基于NodeJS的GB 28181管理平台


一、功能介绍

  • GB28181的设备注册到本平台,并发布为多种媒体格式(flv,rtmp,hls等),支持浏览器播放视频
  • 流媒体服务集成 ZlMediaKit(Linux版本,感谢作者夏楚)
  • 一台信令服务器可以支持多台媒体服务器
  • 有丰富的restful API接口,方便与第三方程序集成

功能截图

1. 首页

首页

2. 播放界面

播放界面

3. 设备列表界面

设备列表

4. 拉流代理列表

拉流代理列表

二、技术框架

1. 前端

2. 后端

  • 后端使用NodeJS开发,加入Express框架。
  • apidoc 文档工具(安装脚本在setup.sh里)。
  • test-api.http是VsCode的Rest Client插件的测试用例脚本。

使用时在VsCode的Workspace Settings-settings.json设置环境变量,如:

{
    "rest-client.environmentVariables": {

        "$shared": {},
        "local":{
            "host":"localhost"
        },
        "test":{
            "host":"测试服务器ip"
        }
    }
}

3. ZLMediaKit设置

在ZLMediaKit的config.ini以下参数要与本程序的db/constants.js中的参数一致:


[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 ./setup.sh
# 安装时生成 apidoc 文档
bash ./setup.sh --apidoc

(2) 使用 node 启动程序

# 启动,程序自动启动ZLMediaKit , 不需要专门部署
node gb28181_app.js
# 访问网址 http://你的ip:7000

(3) 如果使用nvm & pm2 , 主要指令为

# 显示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的配置文件,可以在启动时指定加载的配置文件,如:

# 加载 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播放器
NodeJS
1
https://gitee.com/hfwudao/GB28181_Node_Http.git
git@gitee.com:hfwudao/GB28181_Node_Http.git
hfwudao
GB28181_Node_Http
鹰眼系统-NodeJS版本基于GB28181的管理平台
master

搜索帮助