ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-12-15 19:02:59  阅读:946  来源: 互联网

标签:ZLMediaKit GB28181 ip wvp 端口 windows port


基于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流媒体的具体操作步骤。

标签:ZLMediaKit,GB28181,ip,wvp,端口,windows,port
来源: https://blog.csdn.net/qq_33418407/article/details/121958607

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有