当前位置:   article > 正文

开源28181协议视频平台搭建流程_开源的gb28181平台

开源的gb28181平台

最近项目中用到流媒体平台,java平台负责信令部分,c++平台负责流媒体处理,找了评分比较好的开源项目 https://gitee.com/pan648540858/wvp-GB28181-pro
 流媒体服务基于 c++写的  https://github.com/ZLMediaKit/ZLMediaKit
说明文档:https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B
说明文档: https://doc.wvp-pro.cn/#/_content/introduction/compile

搭建过程(稍微有点复杂)记录分享一下:

环境依赖及版本:

jdk1.8 、 node14.21 、 mysql5.7 、 c++11 、ffmpeg6.1 、visual stuido2022 、 cmake (用vs12里自带的)、libsrtp-2.4.2 、vcpkg(git最新版) 、 openssl3.2.0 

1、搭建编译c++流媒体平台ZLMediaKit项目

生成cmake项目:

双击运行生成的exe文件,启动ZLM流媒体服务:

2、启动java信令平台:

注意配置文件config.ini的参数要与流媒体平台的config.ini对应一致


贴出关键配置文件application.yml

  1. spring:
  2. # [可选]上传文件大小限制
  3. servlet:
  4. multipart:
  5. max-file-size: 10MB
  6. max-request-size: 100MB
  7. # REDIS数据库配置
  8. redis:
  9. # [可选] 超时时间
  10. timeout: 10000
  11. # 以下为单机配置
  12. # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
  13. host: 127.0.0.1
  14. # # [必须修改] 端口号
  15. port: 6379
  16. # [可选] 数据库 DB
  17. database: 1
  18. # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
  19. password:
  20. # 以下为集群配置
  21. # cluster:
  22. # nodes: 192.168.1.66:9001,192.168.1.66:9002,192.168.1.66:9003,192.168.1.66:9004,192.168.1.66:9005,192.168.1.66:9006
  23. # password: adminadmin123.
  24. # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
  25. # mysql数据源
  26. datasource:
  27. # kingbase配置
  28. # type: com.zaxxer.hikari.HikariDataSource
  29. # driver-class-name: com.kingbase8.Driver
  30. # url: jdbc:kingbase8://192.168.1.55:54321/wvp?useUnicode=true&characterEncoding=utf8
  31. # username: system
  32. # password: system
  33. # postgresql配置
  34. # type: com.zaxxer.hikari.HikariDataSource
  35. # driver-class-name: org.postgresql.Driver
  36. # url: jdbc:postgresql://192.168.1.242:3306/242wvp
  37. # username: root
  38. # password: SYceshizu1234
  39. # mysql配置
  40. type: com.zaxxer.hikari.HikariDataSource
  41. driver-class-name: com.mysql.cj.jdbc.Driver
  42. url: jdbc:mysql://127.0.0.1:3306/242wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
  43. username: root
  44. password: root
  45. # kingbase 和 postgresql需要开启这个配置
  46. #pagehelper:
  47. # helper-dialect: postgresql
  48. #[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
  49. server:
  50. port: 18080
  51. # 作为28181服务器的配置
  52. sip:
  53. # [必须修改] 本机的IP
  54. ip: 192.168.1.111
  55. # [可选] 28181服务监听的端口
  56. port: 15060
  57. # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007
  58. # 后两位为行业编码,定义参照附录D.3
  59. # 3701020049标识山东济南历下区 信息行业接入
  60. # [可选]
  61. domain: 3402000001
  62. # [可选]
  63. id: 34020000013000000001
  64. # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  65. password: 12345678
  66. #zlm 默认服务器配置
  67. media:
  68. # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId
  69. id: GQ3TF8yT83wh5Wvz
  70. # [必须修改] zlm服务器的内网IP
  71. ip: 192.168.1.111
  72. # [必须修改] zlm服务器的http.port
  73. http-port: 6080
  74. # [可选] zlm服务器的hook.admin_params=secret
  75. secret: 034523TF8yT83wh5Wvz73f7
  76. # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
  77. rtp:
  78. # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
  79. enable: true
  80. # [可选] 在此范围内选择端口用于媒体流传输,
  81. port-range: 30000,30500 # 端口范围
  82. # [可选] 国标级联在此范围内选择端口发送媒体流,请不要与收流端口范围重合
  83. send-port-range: 50502,50506 # 端口范围
  84. # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
  85. record-assist-port: 18089
  86. # 录像路径
  87. record-path: ./www/record
  88. # 录像保存时长
  89. record-day: 7
  90. # [可选] 日志配置, 一般不需要改
  91. logging:
  92. config: classpath:logback-spring.xml
  93. # [根据业务需求配置]
  94. user-settings:
  95. server-id: 741266
  96. auto-apply-play: true
  97. interface-authentication: true
  98. interface-authentication-excludes:
  99. - /api/v1/**
  100. - /api/media/stream_info_by_app_and_stream
  101. - /api/v1/control/ptz
  102. - /api/cloud/record/*/**
  103. # 推流直播是否录制
  104. record-push-live: true
  105. # 国标是否录制
  106. record-sip: false
  107. # 使用推流状态作为推流通道状态
  108. use-pushing-as-status: false
  109. # 设备上线时是否自动同步通道
  110. sync-channel-on-device-online: false
  111. # 消息通道功能-缺少国标ID是否给所有上级发送消息
  112. send-to-platforms-when-id-lost: false

config.ini配置文件:

  1. ; auto-generated by mINI class {
  2. [api]
  3. apiDebug=1
  4. defaultSnap=./www/logo.png
  5. secret=034523TF8yT83wh5Wvz73f7
  6. snapRoot=./www/snap/
  7. [cluster]
  8. origin_url=
  9. retry_count=3
  10. timeout_sec=15
  11. [ffmpeg]
  12. bin=/usr/bin/ffmpeg
  13. cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
  14. log=./ffmpeg/ffmpeg.log
  15. restart_sec=0
  16. snap=%s -i %s -y -f mjpeg -t 0.001 %s
  17. [general]
  18. check_nvidia_dev=1
  19. enableVhost=0
  20. enable_ffmpeg_log=0
  21. flowThreshold=1024
  22. maxStreamWaitMS=15000
  23. mediaServerId=GQ3TF8yT83wh5Wvz
  24. mergeWriteMS=0
  25. resetWhenRePlay=1
  26. streamNoneReaderDelayMS=15000
  27. unready_frame_cache=100
  28. wait_add_track_ms=3000
  29. wait_track_ready_ms=10000
  30. [hls]
  31. broadcastRecordTs=0
  32. deleteDelaySec=10
  33. fileBufSize=65536
  34. segDur=2
  35. segKeep=0
  36. segNum=3
  37. segRetain=5
  38. [hook]
  39. admin_params=secret=034523TF8yT83wh5Wvz73f7
  40. alive_interval=30.000000
  41. enable=1
  42. on_flow_report=
  43. on_http_access=
  44. on_play=http://192.168.1.111:18082/index/hook/on_play
  45. on_publish=http://192.168.1.111:18082/index/hook/on_publish
  46. on_record_mp4=
  47. on_record_ts=
  48. on_rtp_server_timeout=http://192.168.1.111:18082/index/hook/on_rtp_server_timeout
  49. on_rtsp_auth=
  50. on_rtsp_realm=
  51. on_send_rtp_stopped=http://192.168.1.111:18082/index/hook/on_send_rtp_stopped
  52. on_server_keepalive=http://192.168.1.111:18082/index/hook/on_server_keepalive
  53. on_server_started=http://192.168.1.111:18082/index/hook/on_server_started
  54. on_shell_login=
  55. on_stream_changed=http://192.168.1.111:18082/index/hook/on_stream_changed
  56. on_stream_none_reader=http://192.168.1.111:18082/index/hook/on_stream_none_reader
  57. on_stream_not_found=http://192.168.1.111:18082/index/hook/on_stream_not_found
  58. retry=1
  59. retry_delay=3.000000
  60. timeoutSec=20
  61. [http]
  62. charSet=utf-8
  63. dirMenu=1
  64. forbidCacheSuffix=
  65. forwarded_ip_header=
  66. keepAliveSecond=15
  67. maxReqSize=40960
  68. notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:f6cba98/2023-02-06T14:18:21+08:00,branch:master,build time:2023-02-07T10:51:47)</center></body></html>
  69. port=6080
  70. rootPath=./www
  71. sendBufSize=65536
  72. sslport=16080
  73. virtualPath=
  74. [multicast]
  75. addrMax=239.255.255.255
  76. addrMin=239.0.0.0
  77. udpTTL=64
  78. [protocol]
  79. add_mute_audio=1
  80. continue_push_ms=3000
  81. enable_audio=1
  82. enable_fmp4=1
  83. enable_hls=1
  84. enable_mp4=0
  85. enable_rtmp=1
  86. enable_rtsp=1
  87. enable_ts=1
  88. fmp4_demand=0
  89. hls_demand=0
  90. hls_save_path=./www
  91. modify_stamp=0
  92. mp4_as_player=0
  93. mp4_max_second=3600
  94. mp4_save_path=./www
  95. rtmp_demand=0
  96. rtsp_demand=0
  97. ts_demand=0
  98. [record]
  99. appName=record
  100. fastStart=0
  101. fileBufSize=65536
  102. fileRepeat=0
  103. sampleMS=500
  104. [rtc]
  105. externIP=192.168.1.111
  106. port=8000
  107. preferredCodecA=PCMA,PCMU,opus,mpeg4-generic
  108. preferredCodecV=H264,H265,AV1,VP9,VP8
  109. rembBitRate=0
  110. tcpPort=8000
  111. timeoutSec=15
  112. [rtmp]
  113. handshakeSecond=15
  114. keepAliveSecond=15
  115. modifyStamp=0
  116. port=1935
  117. sslport=19350
  118. [rtp]
  119. audioMtuSize=600
  120. lowLatency=0
  121. rtpMaxSize=10
  122. videoMtuSize=1400
  123. [rtp_proxy]
  124. dumpDir=
  125. h264_pt=98
  126. h265_pt=99
  127. opus_pt=100
  128. port=10000
  129. port_range=40000-40500
  130. ps_pt=96
  131. timeoutSec=15
  132. [rtsp]
  133. authBasic=0
  134. directProxy=1
  135. handshakeSecond=15
  136. keepAliveSecond=15
  137. lowLatency=0
  138. port=10554
  139. sslport=
  140. [shell]
  141. maxReqSize=1024
  142. port=9000
  143. [srt]
  144. latencyMul=4
  145. pktBufSize=8192
  146. port=9000
  147. timeoutSec=5
  148. ; } ---

3、启动前端工程:

注意修改本机ip

启动起来后,长这个样子,由于还没测试推流,所以看不到视频

至此,环境搭建起来了,推流测试文档地址:                         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  https://github.com/ZLMediaKit/ZLMediaKit/wiki/ZLMediaKit%E6%8E%A8%E6%B5%81%E6%B5%8B%E8%AF%95

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号