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

  • 一款开箱即用的流媒体管理系统 java编写, 基于ZLMediaKit
  • ZLMediaKit 地址 https://github.com/ZLMediaKit/ZLMediaKit
  • ZLMediaKit webrtc编译文档地址 https://github.com/ZLMediaKit/ZLMediaKit/wiki/zlm%E5%90%AF%E7%94%A8webrtc%E7%BC%96%E8%AF%91%E6%8C%87%E5%8D%97
  • webrtc具有低延迟 延迟时间大约在 100ms-300ms
  • wvp-GB28181-pro 地址https://github.com/648540858/wvp-GB28181-pro
  • wvp-GB28181-pro 部署安装地址 https://doc.wvp-pro.cn/#/_content/introduction/compile
  • 个人博客 http://coderyj.com
  • idea注册 http://idea.coderyj.com
  • 技术交流QQ群 729987144

1.首先安装 ZLMediaKi zlm启用webrtc编译指南

2.ubuntu 安装 gcc g++ cmake

sudo apt-get update
sudo apt-get install gcc
apt install cmake

查看版本
gcc -v
开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第1张图片
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

4. libsrtp安装 下载 http://file.coderyj.com/f/18744103-660244496-010650

  • 备用地址 https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0
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

5.下载zlm源码

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

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

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

8.测试

  • 最新的zlmediakit源码自带有效的ssl证书default.pem,对应的域名是default.zlmediakit.com,该域名解析到的ip为127.0.0.1,用户在浏览器中打开 https://default.zlmediakit.com/webrtc/即可开始测试。请先推流后,再测试播放

9.安装 wvp-GB28181-pro

  • 文档 https://github.com/648540858/wvp-GB28181-pro/wiki/%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8C

10.安装环境

apt-get install openjdk-11-jre git maven
  • 安装nodejs 请看文章https://blog.csdn.net/simplyou/article/details/126546859?spm=1001.2014.3001.5502
// 注意 这一步不能少, 如果缺少之后会下载依赖错误
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

11.下载源码

git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git

12.编译静态页面

cd wvp-GB28181-pro/web_src/
npm --registry=https://registry.npm.taobao.org install
npm run build

13.安装mysql redis 源码里面有sql文件夹 然后导入 mysql.sql即可

开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第2张图片

  • 我是用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 

14.修改配置开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第3张图片

  • 1.修改application.yml的配置
spring:
  profiles:
    active: dev
  • 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@"

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

15.打包项目, 生成可执行jar

cd wvp-GB28181-pro
mvn package

16.修改 zlmediakit中的media id

cd  /video/media/ZLMediaKit/release/linux/Debug
vim  config.ini

开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第4张图片

  • mediaServerId 改成你Java工程的media id
    开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第5张图片

17.启动

  • 启动 zml
./MediaServer &
  • 启动 wvp-GB28181-pro
cd wvp-GB28181-pro/target
java -jar wvp-pro-*.jar --spring.config.location=../src/main/resources/application.yml

18.访问 输入 http://localhost:18080 登录密码 admin/admin 即可访问

开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit_第6张图片

你可能感兴趣的:(IT,ubuntu,java,intellij-idea,ZLMediaKit,wvp-GB28181-pro)