Java教程

windows下基于wvp-GB28181-pro+ZLMediaKit实现的GB28181-2016流媒体服务

本文主要是介绍windows下基于wvp-GB28181-pro+ZLMediaKit实现的GB28181-2016流媒体服务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基于wvp-GB28181-pro+ZLMediaKit实现的GB28181-2016流媒体服务

1. 用到的开源项目

项目名称项目描述项目地址
wvp-GB28181-pro一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。https://github.com/648540858/wvp-GB28181-pro.git 国内:https://gitee.com/pan648540858/wvp-GB28181-pro.git
ZLMediaKit基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转https://github.com/ZLMediaKit/ZLMediaKit.git

2. ZLMediaKit(流媒体服务)编译打包

打包前注意事项:

​ ZLMediaKit是用c 和 c++ 编写的,所以打包工具使用Visual Studio 2017 或 >2017版本,我本地使用的是Visual Studio 2019

​ ZLMediaKit目录下3rdpart(第三方包)文件夹下ZLToolKit和media-server需从另外两个git项目上拉取, 如果没有拉取这两个文件夹下面是空的,在编译的时候会报错,提示找不到文件。使用到的第三方包地址:
ZLToolKit
media-server

2.1 编译

打开 Visual Studio ,选择打开本地文件夹,然后选择从github拉取的ZLMediaKit文件夹打开,打开过程中可能需要加载一会
打开Visual Studio 2019

打开后界面如下,然后选择CMake概述页下面的打开CMake设置编辑器
打开ZLMediakit文件夹

打开CMake设置编辑器界面如下,默认配置类型是Debug,我们先用默认配置,然后按Ctrl+S保存,此时右侧窗口会出现编辑打印日志,出现CMake生成完毕,表示编译成功
CMake配置和编译

编译完成后我们开始打包生成可执行文件,在最上面菜单栏生成选项下选择全部生成,开始打包
打包生成可执行文件

最右边窗口出现全部生成 已成功,表示打包完成,打包后的可执行文件在 ZLMediaKit\release\windows64\Debug文件夹下,MediaServer.exe就是流媒体启动的服务。

注意:在打包过程中可能会出现编译器堆空间不足时,此时尽量关闭其他服务程序,保证内存足够,再次尝试打包
打包完成
打包完成后的文件目录

2.2 运行

在打包后的文件夹中找到MediaServer.exe可执行文件,双击运行,与此同时会生成config.ini配置文件。

启动成功:
MediaServer启动成功

生成config.ini配置文件
生成config.ini配置文件
接下来,用记事本打开config.ini配置文件,找到[http]下面的port配置,默认为80,如果80端口被占用,可以修改成其他端口,我这里设置成9980,别的配置先默认,更多配置说明可以参考ZLMediaKit\conf下面的config.ini,这里说明和配置更全面,可以参考:

; auto-generated by mINI class {

[api]
apiDebug=1
defaultSnap=./www/logo.png
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
snapRoot=./www/snap/

[ffmpeg]
bin=E:\installPackage\ffmpeg-n4.4-78-g031c0cb0b4-win64-gpl-4.4\bin\ffmpeg.exe
cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
log=./ffmpeg/ffmpeg.log
snap=%s -i %s -y -f mjpeg -t 0.001 %s

[general]
addMuteAudio=1
enableVhost=0
enable_audio=1
flowThreshold=1024
fmp4_demand=0
hls_demand=0
maxStreamWaitMS=15000
mediaServerId=FxfnytvGJgXxECu6
mergeWriteMS=0
modifyStamp=0
publishToHls=1
publishToMP4=0
resetWhenRePlay=1
rtmp_demand=0
rtsp_demand=0
streamNoneReaderDelayMS=20000
ts_demand=0
unready_frame_cache=100
wait_add_track_ms=3000
wait_track_ready_ms=10000

[hls]
broadcastRecordTs=0
deleteDelaySec=0
fileBufSize=65536
filePath=./www
segDur=2
segNum=3
segRetain=5

[hook]
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
alive_interval=30.000000
enable=0
on_flow_report=
on_http_access=
on_play=
on_publish=
on_record_mp4=
on_record_ts=
on_rtsp_auth=
on_rtsp_realm=
on_server_keepalive=
on_server_started=
on_shell_login=
on_stream_changed=
on_stream_none_reader=
on_stream_not_found=
timeoutSec=10

[http]
charSet=gb2312
dirMenu=1
keepAliveSecond=15
maxReqSize=40960
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:50c6c251,branch:master,build time:Dec 15 2021 15:46:09)</center></body></html>
port=9980
rootPath=./www
sendBufSize=65536
sslport=443
virtualPath=

[multicast]
addrMax=239.255.255.255
addrMin=239.0.0.0
udpTTL=64

[record]
appName=record
fastStart=0
fileBufSize=65536
filePath=./www
fileRepeat=0
fileSecond=3600
sampleMS=500

[rtmp]
handshakeSecond=15
keepAliveSecond=15
modifyStamp=0
port=1935
sslport=19350

[rtp]
audioMtuSize=600
rtpMaxSize=10
videoMtuSize=1400

[rtp_proxy]
dumpDir=
port=10000
timeoutSec=15

[rtsp]
authBasic=0
directProxy=1
handshakeSecond=15
keepAliveSecond=15
port=554
sslport=332

[shell]
maxReqSize=1024
port=9000

; } ---

这一步完成后,ZLMediaKit编译和打包的基本操作就完成了,可以满足基本应用,如果有更深层次的可以查看ZLMediaKit wiki

3.拉取wvp-GB28181-pro(SIP信令服务器)编译打包并运行

3.1 创建数据库

拉取完成后,在wvp-GB28181-pro文件夹下有个sql文件夹,里面存放了该项目的数据库结构(mysql.sql),在数据库管理软件,如navicat中运行mysql.sql,运行完成后会生成一个名为wvp的数据库,默认的登录用户: admin,密码:admin
wvp数据库结构

表名描述
device设备表,主要存放GB对接过来的设备
device_alarm设备告警信息
device_channel设备下的通道信息(每个设备查看视频的主要信息表)
device_mobile_position移动设备的坐标信息表
gb_stream国标平台流信息
log日志表
media_server流媒体服务信息表
parent_platform上级平台
platform_gb_channel上级平台通道表
platform_gb_stream上级平台流信息表
role权限表
stream_proxy流代理表
stream_push推流表
user用户表

3.2 修改配置文件

spring:
    # REDIS数据库配置
    redis:
        # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
        host: 127.0.0.1
        # [必须修改] 端口号
        port: 6379
        # [可选] 数据库 DB
        database: 6
        # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
        password:
        # [可选] 超时时间
        timeout: 10000
    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
    datasource:
        # 使用mysql 打开23-28行注释, 删除29-36行
        # name: wvp
        # url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true
        # username:
        # password:
        # type: com.alibaba.druid.pool.DruidDataSource
        # driver-class-name: com.mysql.cj.jdbc.Driver
        name: wvp
        url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
        username: root
        password: admin
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name:  com.mysql.cj.jdbc.Driver

# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
    port: 9970


# 作为28181服务器的配置
sip:
    # [必须修改] 本机的IP
    ip: 127.0.0.1
    # [可选] 28181服务监听的端口
    port: 9960
    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
    # 后两位为行业编码,定义参照附录D.3
    # 3701020049标识山东济南历下区 信息行业接入
    # [可选]
    domain: 3714810000
    # [可选]
    id: 3714810000111000999
    # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
    password:
    # [可选] 心跳超时时间, 建议设置为心跳周期的三倍
    keepalive-timeout: 180
    # [可选] 国标级联注册失败,再次发起注册的时间间隔。 默认60秒
    register-time-interval: 60

#zlm 默认服务器配置
media:
    # [必须修改] zlm服务器的内网IP
    ip: 127.0.0.1
    # [可选] 返回流地址时的ip,置空使用 media.ip
    #stream-ip: 192.168.1.68
    # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
    #hook-ip: 192.168.1.68
    # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.i
    #sdp-ip: 192.168.1.68
    # [必须修改] zlm服务器的http.port
    http-port: 9980
    # [可选] zlm服务器的hook.admin_params=secret
    secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
    # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
    rtp:
        # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
        enable: true
        # [可选] 在此范围内选择端口用于媒体流传输,
        port-range: 26100,26899
        # [可选] 国标级联在此范围内选择端口发送媒体流,
        send-port-range: 26100,26899 # 端口范围
    # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
    record-assist-port: 18081
# [可选] 日志配置, 一般不需要改
logging:
    file:
        name: logs/wvp.log
        max-history: 30
        max-size: 10MB
        total-size-cap: 300MB
    level:
        com.genersoft.iot: debug
        com.genersoft.iot.vmp.storager.dao: info
        com.genersoft.iot.vmp.gb28181: info

# [根据业务需求配置]
user-settings:
    # 推流直播是否录制
    record-push-live: true
    auto-apply-play: false
    # 点播等待超时时间,单位:毫秒
    play-timeout: 16000

# 在线文档: swagger-ui(生产环境建议关闭)
swagger-ui:
    enabled: true

# 版本信息, 不需修改
version:
    version: "@project.version@"
    description: "@project.description@"
    artifact-id: "@project.artifactId@"

注意:配置中 meida.http-port 端口必须ZLMediaKitconfig.ini配置中[http] 下面的port一致,否则推流和拉流会接收不到

3.3 项目启动

配置文件配置完成后,开始启动项目,项目启动成功后会连接ZLMediaServer,如果ZLMediaServer没有启动,会一直重连
启动成功并尝试连接ZLMediaServer

当我们启动ZLMediaKit流媒体服务后,打印连接成功
ZLMediaKit服务连接成功

3.4 运行前台可视化界面

前端文件在wvp-GB28181-pro目录下web_src文件夹下,我们在web_src下打开命令行窗口,并执行npm install, 安装前端依赖包,执行完成后,等待依赖加载完成
运行npm install

依赖加载完成后,执行npm run dev, 在开发环境下启动前台, 启动成功后在控制台会打印出前台地址,在浏览器访问这个地址
启动前台
访问前台并登录

访问成功后在登录页输入用户名和密码登录,账号密码默认均为admin,登录成功后进入首页
登录成功后进入首页
如果你是上级平台,需要把下面一些配置提供给下级平台,让下级平台推流过来,这些配置是在wvp-GB28181-pro后台配置文件中sip配置节点下配置的

#SIP 信令服务
     1)IP: 192.168.1.143
     2)port: 9960
     3)domain: 3714810000
     4)id: 3714810000111000001

如果是前后台分离,前台需单独打包,放在如nginx下,具体wvp-GB28181-pro更多配置细节可以查看wiki

以上就是整个基于wvp-GB28181-pro+ZLMediaKit实现的GB28181-2016流媒体的具体操作步骤。

这篇关于windows下基于wvp-GB28181-pro+ZLMediaKit实现的GB28181-2016流媒体服务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!