# 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验证没做