使用Docker部署ZLMediaKit流媒体服务器实现gb/t28181协议的设备

最近在研究一个摄像头通信协议是 gb/t28181。对于这个协议也是第一次接触,通过查阅多方资料,找到了两个开源的源码,来实现 视频播放、摄像头直播。以前也没有深入的了解过关于视频播放的这方面的技术,偶尔网站播放视频 也都是 mp4视频,通过html标签直接播放。通过这次的学习,对于视频播放的技术有了一部分的了解。这篇文章主要是讲解 怎么搭建一下 我找的这两个开源的源码服务,从来对gb/t28181协议的设备 进行一个管理。

源码1:ZLMediaKit

github.com/ZLMediaKit/...

对于ZLMediaKit 源码 他提供 docker部署的 方案,所以我们就不需要下载源码自行编译了

这个服务 我们主要是用来做视频流转换与播放等等

源码2:wvp-GB28181-pro

github.com/648540858/w...

对于这个源码 已经集成了各种设备协议和ZLMediaKit的使用。

他是带前后端的管理系统,如果你们已经有了前端页面。可以只是用他的后端,通过api的方式调用即可。

好了,简单的介绍了这两个项目。

接下来我们来搭建 ZLMediaKit

docker 部署:

1、拉取官方镜像

bash 复制代码
docker pull zlmediakit/zlmediakit:master

2、 首次运行临时容器

arduino 复制代码
docker run -d --name zlmediakit-tmp zlmediakit/zlmediakit:master

3、提取默认配置文件

bash 复制代码
# 创建宿主机配置目录
mkdir /home/zlmediakit/conf
# 复制容器内配置文件到宿主机
docker cp zlmediakit-tmp:/home/zlmediakit/conf/config.ini /opt/zlmediakit/conf/
# 删除临时容器
docker rm -f zlmediakit-tmp

4、修改config.ini配置文件

ini 复制代码
[api]
secret = your_custom_secret  # 必须修改默认值
 
[rtp_proxy]
 # 端口范围需与容器映射一致 这个拉流的时候 随机使用的端口
 # 如果设备同时在线多 再增加即可 现在是500个端口
port_range = 30000-30500    
 
[http]
port = 9092                    # 保持与容器映射端口对应 
allow_ip_range = 0.0.0.0/0   # 允许所有IP访问
ssl_port=443                 # 若开启HTTPS 默认443  也可以改成别的 8443
 
[rtmp]
port=1935                    # 必须与Docker映射的容器端口一致
 
[websocket]
port=9000                    # 若开启WebSocket
 
[general]
mediaServerId = sdaafdgfdgferdz  #服务器唯一id 可自定义

配置文件别的 一般情况就不需要改了,当 wvp-GB28181-pro 源码启动的时候 和 ZLMediaKit 服务建立通信成功后 ,wvp-GB28181-pro 会把 一些参数 同步到 config.ini 配置文件里。

最后启动ZLMediaKit :

docker-compose.yml 文件方式启动:

大家可以根据自己的需求自行修改

bash 复制代码
version: "3.7"

services:
  zlmediakit:
    image: zlmediakit
    ports:
      - "1935:1935"       # rtmp 端口
      - "9092:9092"     # web 80端口
      - "8443:8443"     # web 443端口
      - "8554:8554"     # rtsp 端口
      - "10000:10000"     # rtp_proxy 端口
      - "10000:10000/udp" # rtp 代理端口 udp
      - "8000:8000/udp"   # rtc 端口
      - "9000:9000/udp"   # srt 端口
      - "30000-30500:30000-30500/tcp"  # rtp 代理端口范围(WebRTC/RTP转发)
      - "30000-30500:30000-30500/udp"  # rtp 代理端口范围(WebRTC/RTP转发)
    restart: always
    container_name: zlmediakit
    volumes:
      - /home/lianxi/ZLMediaKit/conf/config.ini:/opt/media/conf/config.ini  # 配置文件

注意:zlmediakit 服务的 9092 web 端口 通过浏览器可以直接访问,可以访问到一些目录结构,还不知道有没有安全方面的影响,目前不知道怎么关闭。有知道的小伙伴也欢迎留言~

这个 wvp-GB28181-pro 项目他默认是 3个 配置文件夹 我给他整合成1个了。

我修改后的 application.yml 配置文件 和上面的这个 docker-compose.yml是配到的。
更多配置 可以去翻看他的源码里有。

application.yml 内容:

yaml 复制代码
spring:
  application:
    name: wvp
  profiles:
    active: dev  # 设置接口超时时间
  mvc:
    async:
      request-timeout: 20000
  thymeleaf:
    cache: false  # [可选] 上传文件大小限制
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
  cache:
    type: redis  # REDIS数据库配置
  redis:
    # [必须修改] Redis服务器IP, REDIS安装在本机的, 使用127.0.0.1
    host: 127.0.0.1  # [必须修改] 端口号
    port: 6379
    # [可选] 数据库 DB
    database: 1
    # [可选] 访问密码, 若你的redis服务器没有设置密码,就不需要用密码去连接
    password: 123456
    # [可选] 超时时间
    timeout: 10000
  mysql:
    datasource:
      type: com.zaxxer.hikari.HikariDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/gb28181?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
      username: root
      password: root
  # [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
  port: 18080
# [可选] HTTPS配置, 默认不开启
  ssl:
    # [可选] 是否开启HTTPS访问
    enabled: false
    # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名
    key-store: classpath:test.monitor.89iot.cn.jks
    # [可选] 证书密码
    key-store-password: gpf64qmw
    # [可选] 证书类型, 默认为jks,根据实际修改
    key-store-type: JKS
  # 作为28181服务器的配置
sip:
    # [可选] 28181服务监听的端口
  port: 8116
    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007) 后两位为行业编码,定义参照附录D.3
    # [可选] domain: 4101050000
    # [可选] id: 41010500002000000001
    # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  password: 12345678
    # 是否存储alarm告警信息
  alarm: false
  # zlm 默认服务器配置
media:
  id:  sdaafdgfdgferdz  # 要和 zlmediakit 服务配置文件里mediaServerId一致
  # [必须修改] zlm服务器的内网IP
  ip: 192.168.0.110
  # [必须修改] zlm服务器的http.port
  http-port: 9092
  # 要和 zlmediakit docker映射的端口一致
  http-ssl-port: 8443
  rtmp-port: 1935
  rtsp-port: 8554
  # [必选选] zlm服务器的 secret
  secret: tnc4XpPRdsasawQCaslpAsaaK
# 要和 zlmediakit 服务配置文件里secret一致
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 30000,30500  # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流, send-port-range: 30000,30500
    send-port-range: 30000,30500  # 端口范围

  # [根据业务需求配置]
user-settings:
  # 点播/录像回放 等待超时时间, 单位:毫秒
  play-timeout: 180000
  # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
  auto-apply-play: true
  # 推流直播是否录制
  record-push-live: false
  # 国标是否录制
  record-sip: false
  # 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放
  stream-on-demand: true
  # 是否返回Date属性,true:不返回,避免摄像头通过该参数自动校时,false:返回,摄像头可能会根据该时间校时
  disable-date-header: false
  serverId:  sdaafdgfdgferdz
# 关闭在线文档(生产环境建议关闭)
springdoc:
  api-docs:
    enabled: false
  swagger-ui:
    enabled: false

对于 wvp-GB28181-pro 项目部署 这里就不说了 ,非常简单 把数据库 表导入到数据库 ,数据库配置一下

java8 环境 idea编辑器 启动即可

网上找的模拟设备协议工具 进行9屏播放效果

最后:非常感谢这些大佬们开源的源码,让我了解了这么多关于视频播放的相关编程知识,向大佬致敬~

相关推荐
qq_297075672 分钟前
网络安全测试(一)Kali Linux
linux·运维·服务器
四时久成1 小时前
服务器加密算法
服务器
diablobaal2 小时前
云计算学习100天-第28天
运维·服务器·学习
辉辉健身中2 小时前
docker和k8s的区别
docker·容器·kubernetes
2401_831501733 小时前
Linux之Docker虚拟化技术(一)
java·linux·docker
阳光阴郁大boy3 小时前
前端实现Linux查询平台:打造高效运维工作流
linux·运维·服务器
卓码软件测评3 小时前
【第三方网站运行环境测试:服务器配置(如Nginx/Apache)的WEB安全测试重点】
运维·服务器·前端·网络协议·nginx·web安全·apache
开开心心就好3 小时前
PDF转长图工具,一键多页转图片
java·服务器·前端·数据库·人工智能·pdf·推荐算法
SRE工程师4 小时前
Docker的端口映射问题(庖丁解牛)
运维·docker·容器