# NodeJS版本基于GB28181的HTTP网关
**Repository Path**: wangasm/GB28181_Node_Http
## Basic Information
- **Project Name**: NodeJS版本基于GB28181的HTTP网关
- **Description**: NodeJS版本基于GB28181的HTTP网关,实现浏览器播放GB28181设备视频功能。
- **Primary Language**: NodeJS
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 140
- **Created**: 2020-12-12
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# NodeJS版本基于GB28181的HTTP网关
--------------
## 一、功能介绍
- NodeJS版本基于GB28181的HTTP网关
- GB28181的设备注册到本平台,本平台将数据转发rtmp、flv、wsocket等格式,可以方便让浏览器播放视频
- 已调试支持的摄像头:海康
- 已调试支持的NVR:大华
- 浏览器请求播放的视频,本平台转为GB28181的Invite信令,向设备端请求视频
- 流媒体服务器使用 [ZLMediaKit](https://github.com/xia-chu/ZLMediaKit),感谢作者
## 二、相关开发资料(大致是我学习GB28181的过程)
- [安防GB28181学习笔记1 SIP协议简介](https://www.toutiao.com/i6829089709172457988/)
- [GB28181学习笔记3 设备注册Server(基于nodejs sip库)](https://www.toutiao.com/i6829594848719274499/)
- [GB28181学习笔记4 实现Server端获取目录功能(NodeJS版)](http://toutiao.com/item/6830703130989036036/)
- [GB28181学习笔记5 给前面应用添加restful接口](https://www.toutiao.com/i6833204051786596877/)
- [GB28181学习笔记6 解析invite命令](https://www.toutiao.com/i6833673657168953867/)
- [GB28181学习笔记7 媒体流转推rtmp](https://www.toutiao.com/i6835256641315668492/)
- [安防国标学习笔记8 NodeJS实现GB28181信令服务端](https://www.toutiao.com/i6835609606157238796/)
## 三、开发环境等
### 1. 前端
- [查看前端文档](https://gitee.com/hfwudao/GB28181_Node_Http/blob/master/CameraUI/README.md)
- 前端配置服务器网址: CameraUI/vue.config.js , 设置: `process.env.VUE_APP_BASE_API='http://你的服务器地址:7000/api/'`
### 2. 后端
- 后端使用NodeJS开发,加入Express框架。
- 安装运行:
```bash
cd GB28181_NODE_HTTP
# nodejs安装依赖
npm install
# 启动程序
node app.js
# 更新api文档
npm install apidoc -g --registry=https://registry.npm.taobao.org
apidoc -i routers/ -o public/apidoc/
```
test-case.http是VsCode的Rest Client插件的测试用例脚本。
使用时在VsCode的Workspace Settings-settings.json设置环境变量,如:
```json
{
"rest-client.environmentVariables": {
"$shared": {},
"local":{
"host":"localhost"
},
"test":{
"host":"测试服务器ip"
}
}
}
```
使用Ctrl+Alt+E来切换加载的配置项。
- API文档地址:
## 四、部署
### 1. 部署NodeJS服务端
```bash
https://gitee.com/hfwudao/GB28181_Node_Http
# 编译前端
cd GB28181_NODE_HTTP/CameraUI
# 安装依赖
npm install
# 编译输出,默认输出到public目录
npm run build:prod
cd ..
npm install
# 使用node或者pm2启动程序
node app.js
```
### 2. 部署zlmediakit
- [参照](https://github.com/xia-chu/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B)
### 3. 默认使用端口信息
- http端口: 7000
- zlmedia http: 9094
- zlmedia https: 9096
- zlmedia rtmp: 9092
- sip: udp 5060
- sip: tcp 5060
- 其它配置信息: data/constants.js
## 五、restful接口说明
-
## 六、更新日志
- 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
## 七、tips
### ffmpeg命令 转发rtp到rtmp
```bash
ffmpeg -protocol_whitelist "file,http,https,rtp,udp,tcp,tls" -i test1.sdp -vcodec flv -acodec aac -ab 8000 -f flv rtmp://rtmp 服务器地址:9092/hls/t_1_1
```
### TODO List
- sip.js 在使用tcp协议时,会出现catalog指令发不出的情况。待解决。
sip.js改了304行:
```js
if(via.host=='VM_16_10_centos'){
return '';
}
```
- registry验证没做