• 开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit


    1.首先安装 ZLMediaKi zlm启用webrtc编译指南
    2.ubuntu 安装 gcc g++ cmake
    sudo apt-get update
    sudo apt-get install gcc
    apt install cmake
    
    • 1
    • 2
    • 3

    查看版本
    gcc -v
    在这里插入图片描述
    cmake -version
    在这里插入图片描述

    如果安装之后不是这个版本请执行 apt update 进行升级

    3. 安装openssl
    wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
    tar -xvzf openssl-1.1.1k.tar.gz
    ./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl
    make && make install
     echo "/usr/local/lib64/" >> /etc/ld.so.conf
    echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
    ldconfig
    ln -s /usr/local/openssl/bin/openssl  /usr/local/bin/openssl # 替换系统openssl,非必须
    openssl version -a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    4. libsrtp安装 下载 http://file.coderyj.com/f/18744103-660244496-010650
    tar -xvzf libsrtp-2.3.0.tar.gz
     cd libsrtp-2.3.0
     ./configure --enable-openssl --with-openssl-dir=/usr/local/openssl
    make -j8 && make install
    
    • 1
    • 2
    • 3
    • 4
    5.下载zlm源码
    #国内用户推荐从同步镜像网站gitee下载 
    git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
    cd ZLMediaKit
    #千万不要忘记执行这句命令
    git submodule update --init
    
    • 1
    • 2
    • 3
    • 4
    • 5
    6.编译
    $ mkdir build
    $ cd build
    $ cmake .. -DENABLE_WEBRTC=true  -DOPENSSL_ROOT_DIR=/usr/local/openssl  -DOPENSSL_LIBRARIES=/usr/local/openssl/lib
    $ cmake --build . --target MediaServer
    
    # 最终输出
    [ 96%] Built target test_rtcp_fci
    [ 96%] Building CXX object tests/CMakeFiles/test_rtp.dir/test_rtp.cpp.o
    [ 97%] Linking CXX executable ../../release/linux/Debug/test_rtp
    [ 97%] Built target test_rtp
    [ 97%] Building CXX object tests/CMakeFiles/test_wsServer.dir/test_wsServer.cpp.o
    [ 97%] Linking CXX executable ../../release/linux/Debug/test_wsServer
    [ 97%] Built target test_wsServer
    [ 97%] Building CXX object tests/CMakeFiles/test_server.dir/test_server.cpp.o
    [ 97%] Linking CXX executable ../../release/linux/Debug/test_server
    [ 97%] Built target test_server
    [ 98%] Built target jsoncpp
    [ 98%] Linking CXX executable ../../release/linux/Debug/MediaServer
    [100%] Built target MediaServer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    7.修改配置文件
    • 由于webrtc协议需要告知播放器服务器所在ip,如果该ip对播放器不可见,会导致webrtc无法联通。请修改配置文件中rtc.externIP为播放器可见ip,如果不设置该配置项,zlmediakit将获取网卡ip(一般是内网ip),那么将无法跨域nat使用webrtc
    [rtc]
    #rtc播放推流、播放超时时间
    timeoutSec=15
    #本机对rtc客户端的可见ip,作为服务器时一般为公网ip,置空时,会自动获取网卡ip
    externIP=
    #rtc udp服务器监听端口号,所有rtc客户端将通过该端口传输stun/dtls/srtp/srtcp数据,
    #该端口是多线程的,同时支持客户端网络切换导致的连接迁移
    #需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
    port=8000
    #设置remb比特率,非0时关闭twcc并开启remb。该设置在rtc推流时有效,可以控制推流画质
    rembBitRate=1000000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    8.测试
    • 最新的zlmediakit源码自带有效的ssl证书default.pem,对应的域名是default.zlmediakit.com,该域名解析到的ip为127.0.0.1,用户在浏览器中打开 https://default.zlmediakit.com/webrtc/即可开始测试。请先推流后,再测试播放
    9.安装 wvp-GB28181-pro
    10.安装环境
    apt-get install openjdk-11-jre git maven
    
    • 1
    // 注意 这一步不能少, 如果缺少之后会下载依赖错误
    curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
    sudo apt-get install -y nodejs
    node --version  # v16.17.0
    npm --version  # v8.15.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    11.下载源码
    git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
    
    • 1
    12.编译静态页面
    cd wvp-GB28181-pro/web_src/
    npm --registry=https://registry.npm.taobao.org install
    npm run build
    
    • 1
    • 2
    • 3
    13.安装mysql redis 源码里面有sql文件夹 然后导入 mysql.sql即可

    在这里插入图片描述

    • 我是用docker安装的
    // redis
    docker run -d --name redis -p 6379:6379 --restart=always redis:7.0.2 --requirepass "www.coderyj.com"
    // mysql
    docker run -d  -v /coderyj/data:/var/lib/mysql --privileged --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=coderyj --restart=always mysql:5.7.25 
    
    • 1
    • 2
    • 3
    • 4
    14.修改配置在这里插入图片描述
    • 1.修改application.yml的配置
    spring:
      profiles:
        active: dev
    
    • 1
    • 2
    • 3
    • 2.修改 application-dev.yml redis mysql 以及 zlm配置
    host-ip: 172.16.1.253
    spring:
        # [可选]上传文件大小限制
        servlet:
            multipart:
                max-file-size: 10MB
                max-request-size: 100MB
        # REDIS数据库配置
        redis:
            # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
            host: ${host-ip}
            # [必须修改] 端口号
            port: 6679
            # [可选] 数据库 DB
            database: 6
            # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
            password: www.coderyj.com
            # [可选] 超时时间
            timeout: 10000
            # mysql数据源
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://${host-ip}:3307/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
            username: root
            password: coderyj
            druid:
                initialSize: 10                       # 连接池初始化连接数
                maxActive: 200                        # 连接池最大连接数
                minIdle: 5                            # 连接池最小空闲连接数
                maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
                keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
                validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
                testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
                testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
                testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
                poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
                timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
                minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
                filters: stat,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j
                useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
                # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
                connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
                #stat-view-servlet.url-pattern: /admin/druid/*
    
    #[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
    server:
        port: 18080
    
    # 作为28181服务器的配置
    sip:
        # [必须修改] 本机的IP
        ip: 172.16.1.134
        # [可选] 28181服务监听的端口
        port: 5060
        # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
        # 后两位为行业编码,定义参照附录D.3
        # 3701020049标识山东济南历下区 信息行业接入
        # [可选]
        domain: 3402000000
        # [可选]
        id: 34020000002000000001
        # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
        password: 12345678
    
    #zlm 默认服务器配置
    media:
        id: FQ3TF8yT83wh5Wvz
        # [必须修改] zlm服务器的内网IP
        ip: ${host-ip}
        # [必须修改] zlm服务器的http.port
        http-port: 80
        # [可选] zlm服务器的hook.admin_params=secret
        secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
        # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
        rtp:
            # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
            enable: true
            # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
            port-range: 30000,30500 # 端口范围
            # [可选] 国标级联在此范围内选择端口发送媒体流,
            send-port-range: 30000,30500 # 端口范围
        # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
        record-assist-port: 18081
    # [可选] 日志配置, 一般不需要改
    logging:
        config: classpath:logback-spring-local.xml
    # [根据业务需求配置]
    user-settings:
        # [可选] 服务ID,不写则为000000
        server-id:
        # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
        auto-apply-play: false
        # [可选] 部分设备需要扩展SDP,需要打开此设置
        senior-sdp: false
        # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认)
        save-position-history: false
        # 点播等待超时时间,单位:毫秒
        play-timeout: 3000
        # 等待音视频编码信息再返回, true: 可以根据编码选择合适的播放器,false: 可以更快点播
        wait-track: false
        # 是否开启接口鉴权
        interface-authentication: true
        # 自动配置redis 可以过期事件
        redis-config: true
        # 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录
        interface-authentication-excludes:
            - /api/v1/**
        # 推流直播是否录制
        record-push-live: true
        # 国标是否录制
        record-sip: true
        # 是否将日志存储进数据库
        logInDatebase: true
        # 第三方匹配,用于从stream钟获取有效信息
        thirdPartyGBIdReg: [\s\S]
    
    # 版本信息, 不需修改
    version:
        version: "@project.version@"
        description: "@project.description@"
        artifact-id: "@project.artifactId@"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123

    注意 sip地址要改成外网ip zlm地址也要改成对应的流媒体地址 不能是 127.0.0.1

    15.打包项目, 生成可执行jar
    cd wvp-GB28181-pro
    mvn package
    
    • 1
    • 2
    16.修改 zlmediakit中的media id
    cd  /video/media/ZLMediaKit/release/linux/Debug
    vim  config.ini
    
    • 1
    • 2

    在这里插入图片描述

    • mediaServerId 改成你Java工程的media id
      在这里插入图片描述
    17.启动
    • 启动 zml
    ./MediaServer &
    
    • 1
    • 启动 wvp-GB28181-pro
    cd wvp-GB28181-pro/target
    java -jar wvp-pro-*.jar --spring.config.location=../src/main/resources/application.yml
    
    • 1
    • 2
    18.访问 输入 http://localhost:18080 登录密码 admin/admin 即可访问

    在这里插入图片描述

  • 相关阅读:
    Pandas数据类型-DataFrame之创建和访问
    Java中循环删除list报错解析
    淘宝天猫京东商品详情一键铺货到拼多多平台店铺接口代码对接教程
    【ArcGIS微课1000例】0075:将AutoCAD(Dwg、Dxf)文件转换为shp、KML(kml、kmz)文件
    python(47): 多线程多进程应用-批量造数据小结
    取余和取模和取整
    记录:Unity脚本的编写3.0
    【安全狗】Linux后渗透常见后门驻留方式分析
    山东济南建筑模板厂家批发之桉木芯建筑模板
    Springboot - 15.二级分布式缓存集成-Caffeine
  • 原文地址:https://blog.csdn.net/simplyou/article/details/126587784