GB28181 推流播放

  1. 写在最前
  2. 开始
    1. 1、流媒体服务器:ZLMediaKit
    2. 2、sip 服务器:wvp-GB28181
    3. 3、开放服务器端口
    4. 4、下级 sip 服务器:海康摄像头
    5. 5、流媒体客户端:MediaServerUI

本文介绍如何对接遵照GB28181协议的网络摄像监控,将其集成到自己的业务系统中。

写在最前

几个技术关键点

还需要准备:

  • 下级 sip 服务器,海康网络摄像头一个
  • 服务器一台(linux centos7)
  • 缓存服务器,Redis,如何安装见 这篇文章

开始

1、流媒体服务器:ZLMediaKit

我们采用 docker 部署,原生部署参考 zlmediakit

注意,我使用的 wvp 版本具备修改 ZLMediaKit 的参数能力,因此我们在部署 ZLMediakKit 的时候不需要修改它的配置文件

直接运行如下代码!

mkdir -p /data/zlm/www;
mkdir -p /data/zlm/rtpdump;
docker run -id \
        --name zlm \
        --privileged=true \
        -p 1935:1935 \
        -p 8080:80 \
        -p 8554:554 \
        -p 10000:10000 -p 10000:10000/udp \
        -p 30000-30500:30000-30500 \
        -p 30000-30500:30000-30500/udp \
        -v /data/zlm/www:/media/www \
        -v /data/zlm/rtpdump:/media/rtpdump \
        panjjo/zlmediakit

注意!!!

  • 10000端口,tcp 和 udp 都要开放!不然看不了视频!
  • 30000-30500,是 rtp 流的 udp 多端口模式,tcp 和 udp 也需要开放!
  • /media/rtpdump 是debug模式下 调试数据 的输出目录,需配合 wvp 设置 zlm [rtp_proxy.dumpDir] 参数

下面简单了解下 ZLMediaKit 这项目

一个基于C++11的高性能运营级流媒体服务框架

项目特点

基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。
支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4),支持协议互转。
使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。
代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。
支持linux、macos、ios、android、windows全平台。
支持画面秒开、极低延时(500毫秒内,最低可达100毫秒)。
提供完善的标准C API,可以作SDK用,或供其他语言调用。
提供完整的MediaServer服务器,可以免开发直接部署为商用服务器。
提供完善的restful api以及web hook,支持丰富的业务逻辑。
打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
全面支持H265/H264/AAC/G711/OPUS。

功能清单

ZLMediaKit 教程见,RESTful接口等等,很齐全,见 github ZLMediaKit wiki

2、sip 服务器:wvp-GB28181

把项目 clone 下来后,需要修改如下参数

具体改动,见 “### shar” 备注:

spring:
    application:
        name: iot-vmp-vmanager
        # 影子数据存储方式,支持redis、jdbc
        database: redis
        # 通信方式,支持kafka、http
        communicate: http
    redis: 
        # Redis服务器IP
        ### shar:修改为你部署的 redis 服务器ip
        host: 127.0.0.1
        #端口号
        port: 6379
        datebase: 0
        #访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
        password:
        #超时时间
        timeout: 10000
    ##
    datasource: 
        name: eiot
        url: jdbc:mysql://10.24.20.63:3306/eiot?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true
        username: root
        password: 123456
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
server:
    port: 8080
sip:
    ### shar:修改为你部署当前java项目的服务器ip(可以用0.0.0.0,更方便),提供给摄像头或下级sip服务器,它们通过这接入
    ip: 192.168.0.102
    ### shar:sip 服务端口,不建议改,提供给摄像头或下级sip服务器,它们通过这接入
    port: 5060
    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
    # 后两位为行业编码,定义参照附录D.3
    # 3701020049标识山东济南历下区 信息行业接入
    ### shar:设置你的domain(SIP服务器域),提供给摄像头或下级sip服务器,它们通过这接入
    domain: 3701020049
    ### shar:设置你的id(SIP服务器id),提供给摄像头或下级sip服务器,它们通过这接入
    id: 37010200492000000001
    # 默认设备认证密码,后续扩展使用设备单独密码
    ### shar:设置你的个性化密码,提供给摄像头或下级sip服务器,它们通过这密码接入
    password: admin123
media:
    ### shar:修改为你部署的流媒体服务器ip
    ip: 192.168.0.102
    port: 10000

然后还需要添加跨域机制,见 springboot 的跨域处理

修改完毕后,运行项目即可

3、开放服务器端口

systemctl start firewalld;
firewall-cmd --permanent --add-port=1935/tcp;
firewall-cmd --permanent --add-port=5060/udp;
firewall-cmd --permanent --add-port=5060/tcp;
firewall-cmd --permanent --add-port=6379/tcp;
firewall-cmd --permanent --add-port=8080/tcp;
firewall-cmd --permanent --add-port=8554/tcp;
firewall-cmd --permanent --add-port=8888/tcp;
firewall-cmd --permanent --add-port=9001/tcp;
firewall-cmd --permanent --add-port=9002/tcp;
firewall-cmd --permanent --add-port=9006/tcp;
firewall-cmd --permanent --add-port=9022/tcp;
firewall-cmd --permanent --add-port=18080/tcp;
firewall-cmd --permanent --add-port=10000/tcp;
firewall-cmd --permanent --add-port=10000/udp;
firewall-cmd --permanent --add-port=30000-30500/tcp;
firewall-cmd --permanent --add-port=30000-30500/udp;
firewall-cmd --reload;

4、下级 sip 服务器:海康摄像头

我们找来一个海康网络摄像头,为它插上翅膀

接下来我们要对这摄像头做初始化操作

我们需要海康 sadp 客户端,先百度下载安装

打开软件,自动扫描出局域网内的摄像头

拖动底部滚动条,找到设备序列号栏目,

找出列表中和你手中摄像头的设备序列号一致的数据

点击,右侧出现信息面板,修改摄像头网络、密码等!

此时,你可以通过浏览器(用IE)访问了,

地址栏输入摄像头 IP ,

账号是 admin ,

密码就是 sadp 里设置的。

进入摄像头的 admin 页面后,配置如下内容

等待一小会(默认1分中,上面页面可以配置,就是注册间隔)

此时,wvp 后台日志刷出摄像头发起注册请求,

这说明我们的摄像头和 wvp sip 服务器对接完毕

5、流媒体客户端:MediaServerUI

把项目 clone 下来后,切换到 MediaServerUI gb28181分支,

找到 global.js 需要修改如下参数:

### wvp web 的 ip 和 端口(server.port)
const serverip="192.168.9.99:9999"

### zlmedia 的 ip 和 端口(本来是 80,我们 docker 映射成了8080)
const ZLServerIp="192.168.9.99:8080";

### 如果你没改过,就是这个,不用改
### 不建议改,和 ZLMediaKit config.ini 对应,文件在 /media 下面
const ZLSecret="035c73f7-bb6b-4889-a715-d9eb2d1925cc";

安装依赖 npm install

启动项目 npm run serve

浏览器打开 http://localhost:8080/#/ 即可查看 sip 服务器上的信息以及视频!


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:GB28181 推流播放

字数:1.7k

本文作者:夏来风

发布时间:2020-11-18, 23:41:39

原始链接:http://www.demo1024.com/blog/gb28181-show/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。