648540858 / wvp-GB28181-pro

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。
https://doc.wvp-pro.cn
MIT License
4.85k stars 1.44k forks source link

云服务,点超时,收流超时.,或者黑屏无法播放 #434

Open keehub opened 2 years ago

keehub commented 2 years ago

一. 部署环境

 CentOS Linux release 7.6.1810 (Core) 内网Ip 192.168.0.57
 Docker version 20.10.7, build f0df350
 OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

端口全部开放,是公网部署,未使用https,海康网络摄像机镜头

二. 部署方式

  1. ZLMediaKit(最新镜像,IMAGE ID d5d4a9206a59) 直接运行脚本部署
docker run -id -p 1935:1935 -p 554:554 -p 8000:8000 -p 8001:8001 -p 10000:10000 -p 30000-30500:30000-30500  
-v /root/zlmediakit/config.ini:/opt/media/conf/config.ini zlmediakit/zlmediakit:Release.last
ZLMediaKit配置文件,点击查看 (/root/zlmediakit/config.ini) ```ini ; auto-generated by mINI class { [api] apiDebug=0 defaultSnap=./www/logo.png secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc snapRoot=./www/snap/ [cluster] origin_url= timeout_sec=15 [ffmpeg] bin=/usr/bin/ffmpeg cmd=%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s log=./ffmpeg/ffmpeg.log restart_sec=0 snap=%s -i %s -y -f mjpeg -t 0.001 %s [general] addMuteAudio=1 continue_push_ms=3000 enableVhost=0 enable_audio=1 flowThreshold=1024 fmp4_demand=0 hls_demand=0 maxStreamWaitMS=15000 mediaServerId=wvp-media-id mergeWriteMS=0 modifyStamp=0 publishToHls=1 publishToMP4=0 resetWhenRePlay=1 rtmp_demand=0 rtsp_demand=0 streamNoneReaderDelayMS=10000 ts_demand=0 unready_frame_cache=100 wait_add_track_ms=3000 wait_track_ready_ms=3000 [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=10.0 enable=1 on_flow_report= on_http_access= on_play=http://192.168.0.57:18080/index/hook/on_play on_publish=http://192.168.0.57:18080/index/hook/on_publish on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4 on_record_ts= on_rtsp_auth= on_rtsp_realm= on_server_keepalive=http://192.168.0.57:18080/index/hook/on_server_keepalive on_server_started=http://192.168.0.57:18080/index/hook/on_server_started on_shell_login=http://192.168.0.57:18080/index/hook/on_shell_login on_stream_changed=http://192.168.0.57:18080/index/hook/on_stream_changed on_stream_none_reader=http://192.168.0.57:18080/index/hook/on_stream_none_reader on_stream_not_found=http://192.168.0.57:18080/index/hook/on_stream_not_found timeoutSec=20 [http] charSet=utf-8 dirMenu=1 forbidCacheSuffix= keepAliveSecond=30 maxReqSize=40960 notFound=404 Not Found

您访问的资源不存在!


ZLMediaKit(git hash:a3d696d,branch:master,build time:Feb 23 2022 12:29:13)
port=8001 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 [rtc] externIP= port=8000 preferredCodecA=PCMU,PCMA,opus,mpeg4-generic preferredCodecV=H264,H265,AV1X,VP9,VP8 rembBitRate=0 timeoutSec=15 [rtmp] handshakeSecond=15 keepAliveSecond=15 modifyStamp=0 port=1935 sslport=0 [rtp] audioMtuSize=600 rtpMaxSize=10 videoMtuSize=1400 [rtp_proxy] dumpDir= port=10000 port_range=30000-30500 timeoutSec=15 [rtsp] authBasic=0 directProxy=1 handshakeSecond=15 keepAliveSecond=15 port=554 sslport=0 [shell] maxReqSize=1024 port=0 ; } --- ```
  1. wvp-GB28181-pro (最新代码,648540858 committed )编译成jarfile后,以java -jar wvp-pro-2.0.2-04130239.jar 的形式运行
wvp-GB28181-pro 配置文件,点击查看 (application.yml,无关敏感配置用***代替了) ```yml spring: # [可选]上传文件大小限制 servlet: multipart: max-file-size: 10MB max-request-size: 100MB # REDIS数据库配置 redis: # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1 host: *** # [必须修改] 端口号 port: *** # [可选] 数据库 DB database: *** # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接 password: # [可选] 超时时间 timeout: 10000 # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置 # mysql数据源 datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://***/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false username: *** password: *** 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,wall,slf4j # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall 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: 192.168.0.57 # [可选] 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: wvp-media-id # [必须修改] zlm服务器的内网IP ip: 192.168.0.57 # [必须修改] zlm服务器的http.port http-port: 8001 # [可选] 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 # 版本信息, 不需修改 version: version: "@project.version@" description: "@project.description@" artifact-id: "@project.artifactId@" ```
  1. [海康网络摄像机镜头配置]

配置图片 (https://user-images.githubusercontent.com/41461205/163112767-ca696c6e-dab3-4876-8a6c-5efbb846cc26.png)

三. 界面截图,日志截图

zlm服务器id配置都是一致 zlm与wvp-GB28181-pro 连接都是用的内网ip

wvp-GB28181-pro日志截图 (https://user-images.githubusercontent.com/41461205/163119165-4462fbef-77b1-44de-ad43-26a3da7f05cc.png)

wvp-GB28181-pro媒体节点 (https://user-images.githubusercontent.com/41461205/163115450-4105bee5-3075-4c58-b9ae-d3baea7e2c13.png)

wvp-GB28181-pro点播收流,超时界面 (https://user-images.githubusercontent.com/41461205/163115957-9236ba52-afd2-4986-836d-1986ede6e3db.png)

keehub commented 2 years ago
2022-04-13 17:19:23.037 [http-nio-18080-exec-9] INFO  c.g.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander:357 - 34020000001320000003_34020000001320000003 分配的ZLM为: wvp-media-id [【公网IP】:43260]
2022-04-13 17:19:23.166 [http-nio-18080-exec-9] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20033} created. insert into log ( name, type, uri, address, result, timing, username, createTime) values ('开始点播', 'GET', '/api/play/start/34020000001320000003/34020000001320000003', '43.250.106.176', '200 OK', 1454, 'admin', '2022-04-13 17:19:23')
2022-04-13 17:19:23.167 [http-nio-18080-exec-9] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20033} Parameters : []
2022-04-13 17:19:23.167 [http-nio-18080-exec-9] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20033} Types : []
2022-04-13 17:19:23.169 [http-nio-18080-exec-9] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20033} executed. 2.146987 millis. insert into log ( name, type, uri, address, result, timing, username, createTime) values ('开始点播', 'GET', '/api/play/start/34020000001320000003/34020000001320000003', '43.250.106.176', '200 OK', 1454, 'admin', '2022-04-13 17:19:23')
2022-04-13 17:19:23.169 [http-nio-18080-exec-9] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20033} closed
2022-04-13 17:19:23.230 [wvp-5] INFO  c.g.i.v.g.t.e.r.impl.InviteResponseProcessor:84 - [回复ack] sip:34020000001320000003@175.9.140.239:60735-> 175.9.140.239:60735 
2022-04-13 17:19:23.714 [wvp-6] INFO  c.g.i.v.g.t.event.request.impl.ByeRequestProcessor:89 - 收到bye, [34020000001320000003/34020000002000000001]
2022-04-13 17:19:23.716 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20034} created. SELECT * FROM device_channel WHERE channelId=?
2022-04-13 17:19:23.716 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20034} Parameters : [34020000001320000003]
2022-04-13 17:19:23.716 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20034} Types : [VARCHAR]
2022-04-13 17:19:23.718 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20034} executed. 1.238913 millis. SELECT * FROM device_channel WHERE channelId=?
2022-04-13 17:19:23.719 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20034} closed
2022-04-13 17:19:23.719 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20035} created. SELECT * FROM device WHERE deviceId = ?
2022-04-13 17:19:23.719 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20035} Parameters : [34020000001320000003]
2022-04-13 17:19:23.720 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20035} Types : [VARCHAR]
2022-04-13 17:19:23.720 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20035} executed. 0.911392 millis. SELECT * FROM device WHERE deviceId = ?
2022-04-13 17:19:23.721 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20035} closed
2022-04-13 17:19:23.722 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20036} created. UPDATE device_channel SET streamId=null WHERE deviceId=? AND channelId=?
2022-04-13 17:19:23.722 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20036} Parameters : [34020000001320000003, 34020000002000000001]
2022-04-13 17:19:23.722 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20036} Types : [VARCHAR, VARCHAR]
2022-04-13 17:19:23.723 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20036} executed. 0.839975 millis. UPDATE device_channel SET streamId=null WHERE deviceId=? AND channelId=?
2022-04-13 17:19:23.723 [wvp-6] DEBUG druid.sql.Statement:134 - {conn-10010, pstmt-20036} closed
2022-04-13 17:19:41.035 [Timer-1] WARN  com.genersoft.iot.vmp.service.impl.PlayServiceImpl:244 - 设备点播超时,deviceId:34020000001320000003 ,channelId:34020000001320000003
javax.sip.SipException: Cannot find listening point for transport TCP
    at gov.nist.javax.sip.stack.SIPDialog.createRequest(SIPDialog.java:2472)
    at gov.nist.javax.sip.stack.SIPDialog.createRequest(SIPDialog.java:2403)
    at com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander.streamByeCmd(SIPCommander.java:733)
    at com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander.streamByeCmd(SIPCommander.java:677)
    at com.genersoft.iot.vmp.service.impl.PlayServiceImpl$1.run(PlayServiceImpl.java:250)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
keehub commented 2 years ago

网络截图

648540858 commented 2 years ago

wvp的media的配置提供下

keehub commented 2 years ago

wvp-GB28181-proZLMediaKit 部署在同一台云Linux下,ZLMediaKit运行在docker 容器下,wvp-GB28181-pro运行在Linux 环境下,海康的网络摄像头是在我本地。

wvp的media的配置在下面

spring:
  # [可选]上传文件大小限制
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
  # REDIS数据库配置
  redis:
    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
    host: ***
    # [必须修改] 端口号
    port: 6379
    # [可选] 数据库 DB
    database: 1
    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
    password:
    # [可选] 超时时间
    timeout: 10000
    # [可选] 一个pool最多可分配多少个jedis实例
    poolMaxTotal: 1000
    # [可选] 一个pool最多有多少个状态为idle(空闲)的jedis实例
    poolMaxIdle: 500
    # [可选] 最大的等待时间(秒)
    poolMaxWait: 5
  # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://***/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false
    username: root
    password: 12345678
    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,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
      #stat-view-servlet.url-pattern: /admin/druid/*

# druid管理监控页面的一些配置
rj-druid-manage:
  allow:                        # 访问druid监控页面的IP白名单
  deny:                        # 访问druid监控页面IP黑名单
  loginUsername: rjAdmin      # 访问druid监控页面账号
  loginPassword: rj@2022     # 访问druid监控页面密码

#mybatis:
#    configuration:
#        # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
#        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#        # 返回类型为Map,显示null对应的字段
#        call-setters-on-nulls: true
## [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口

# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
  port: 18080
  # [可选] HTTPS配置, 默认不开启
  ssl:
    # [可选] 是否开启HTTPS访问
    enabled: false
    # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名
    key-store: classpath:xxx.jks
    # [可选] 证书密码
    key-password: password
    # [可选] 证书类型, 默认为jks,根据实际修改
    key-store-type: JKS

# 作为28181服务器的配置
sip:
  # [必须修改] 本机的IP, 必须是网卡上的IP,用于sip下协议栈监听ip,如果监听所有设置为0.0.0.0
  monitor-ip: 0.0.0.0
  # [必须修改] 本机的IP
  ip: 【Linux公网IP】  
  # [可选] 28181服务监听的端口
  port: 5060
  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
  # 后两位为行业编码,定义参照附录D.3
  # 3701020049标识山东济南历下区 信息行业接入
  # [可选]
  domain: 3402000000
  # [可选]
  id: 34020000002000000001
  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  password: 12345678
  # [可选] 心跳超时时间, 建议设置为心跳周期的三倍
  keepalive-timeout: 255
  # [可选] 国标级联注册失败,再次发起注册的时间间隔。 默认60秒
  register-time-interval: 60
  # [可选] 云台控制速度
  ptz-speed: 50
  # TODO [可选] 收到心跳后自动上线, 重启服务后会将所有设备置为离线,默认false,等待注册后上线。设置为true则收到心跳设置为上线。
  # keepalliveToOnline: false
  # 是否存储alarm信息
  alarm: false

#zlm 默认服务器配置
media:
  # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId
  id: wvp-media-id
  # [必须修改] zlm服务器的内网IP
  ip: 【Linux公网IP,docker流媒体 ip 都试过】  
  # [可选] 返回流地址时的ip,置空使用 media.ip
  stream-ip: 【Linux公网IP】  
  # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
  sdp-ip: 【Linux公网IP】  
  # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
  hook-ip: 
  # [必须修改] zlm服务器的http.port
  http-port: 8001
  # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置
  http-ssl-port:
  # [可选] zlm服务器的rtmp.port, 置空使用zlm配置文件配置
  rtmp-port:
  # [可选] zlm服务器的rtmp.sslport, 置空使用zlm配置文件配置
  rtmp-ssl-port:
  # [可选] zlm服务器的 rtp_proxy.port, 置空使用zlm配置文件配置
  rtp-proxy-port:
  # [可选] zlm服务器的 rtsp.port, 置空使用zlm配置文件配置
  rtsp-port:
  # [可选] zlm服务器的 rtsp.sslport, 置空使用zlm配置文件配置
  rtsp-ssl-port:
  # [可选] 是否自动配置ZLM, 如果希望手动配置ZLM, 可以设为false, 不建议新接触的用户修改
  auto-config: true
  # [可选] zlm服务器的hook.admin_params=secret
  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
  # [可选] zlm服务器的general.streamNoneReaderDelayMS
  stream-none-reader-delay-ms:  18000  # 无人观看多久自动关闭流, -1表示永不自动关闭,即 关闭按需拉流
  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 30000,30500 # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流,
    send-port-range: 30000,30500 # 端口范围
  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
  record-assist-port: 0

# [可选] 日志配置, 一般不需要改
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
  # 上级点播等待超时时间,单位:毫秒
  platform-play-timeout: 60000
  # 是否开启接口鉴权
  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]*"

# 在线文档: swagger-ui(生产环境建议关闭)
swagger-ui:
  enabled: true

# 版本信息, 不需修改
version:
  version: "@project.version@"
  description: "@project.description@"
  artifact-id: "@project.artifactId@"

wvp的media的配置提供下

slxsyxx commented 2 years ago

仔细看配置文件,按实际情况填写!

tingmag commented 2 years ago

仔细看配置文件,按实际情况填写!

同样的问题,详细对比过wvp和zlm的配置都是一样的。很奇怪大家很容易遇到的问题,但是在这里没有明说,而是提示去看wiki

zhangdongshun commented 2 years ago

我也遇见同样的问题了,想问一下,最后怎么解决的?

rainingshining commented 2 years ago

同样的问题,这个最后怎么解决呢

648540858 commented 2 years ago

这个问题,分析配置无果就是抓包,一般问题多数出现在配置或者网络上。

JinruiWang commented 2 years ago

遇到同样问题,请问题主解决了么?

648540858 commented 2 years ago

统一回复下,这个基本都是wvp配置不当或者网络端口为开放造成的。

JinruiWang commented 2 years ago

auto-apply-play 设置为true试试!

realbillwong commented 2 years ago

网络截图

我的理解:这里展示的设备地址中的端口号,应该是摄像头里面设置好的 5060。不知道为啥会是一个随机端口号?

另外,请问你的问题解决了吗?

HogwartsRico commented 2 years ago

我也遇到这个问题了

realbillwong commented 2 years ago

说一下我的解决办法:

  1. 首先检查摄像头接入平台时选择的传输协议是 TCP 还是 UDP
  2. 平台 - 国标设备,点击“刷新”,同步摄像头信息。同步后,摄像头地址应该变成 IP:5060
  3. 检查平台 - 国标设备的流传输模式是不是跟第一步中的一致?如果不一样,需要修改为同样的传输协议。
  4. 最后检查防火墙是否开放
MrLiuFang commented 2 years ago

经过几天的折腾目前无法解决收流超时的问题,根据zlm的日志是推流失败导致的,目前还没找到解决办法,望本项目贡献者给予解决方案,谢谢

lixiansky commented 2 years ago

我也遇到了这个问题!不知道咋解决!

penghui-luna commented 2 years ago

我这边出现的情况是:一部分摄像头可以正常播放实时视频,一部分不行,后台显示点播失败。这种一般是啥情况呢?

Zhu168888rui commented 2 years ago

中的端口号,应该是摄像头里面设置好的 5060。不知道为啥会是一个随机端口号?

另外,请问你的问题解决了吗? 您好,请问这个问题解决了吗?

648540858 commented 2 years ago

查看文档关于此问题的说明https://doc.wvp-pro.cn/#/_content/qa/play_error

hnzmxy commented 2 years ago

ZLM版本和WVP版本不同步的问题,这个我也遇到了,最新版本ZLM必须用最新版本wvp

dcq123 commented 1 year ago

docker启动ZLM时需要将RTP端口在宿主机映射出来:-p 30000-30500:30000-30500 -p 30000-30500:30000-30500/udp,注意:必须是tcp和udp的端口都打开,否则就可能出现【点播失败】收流超时

wildwindyevan commented 1 year ago

我修改了这几个后可以播放了 media:

[必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId

id: wvp-media-id

[必须修改] zlm服务器的内网IP

ip: 127.0.0.1

[可选] 返回流地址时的ip,置空使用 media.ip

stream-ip: 公网IP

[可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip

sdp-ip: 公网IP

[可选] zlm服务器的hook所使用的IP, 默认使用sip.ip

hook-ip: 127.0.0.1

hejinenPrivate commented 1 year ago

我的已经解决了。media没有配置stream-ip和sdp-ip导致的。一定要配置为公网ip,如果不配置默认使用media.ip,你的media.ip是一个内网地址。wvp.pro对摄像头发起invite 请求中会把流媒体的ip返回去(就是这个stream-ip)。摄像头会像这个地址发起推流,但是现在你没有配置所以取的是media.ip,而这个ip是内网,所以推流超时。。。。。。

loveworldlovesky commented 1 year ago

我现在遇到了播放黑屏,但是有快照;F12发现ws地址连不上;不确定是不是不兼容唠版本;硬盘录像机支持的国标版本是2011

zhuuvzhi commented 1 year ago

@hejinenPrivate 阿里云ECS是没办法直接监听公网地址的,有解决办法没?

xiaoxuanshiya commented 1 year ago

同样的问题,请问到底有解决方式没有?

yogo-zhangyingzhe commented 1 year ago

我的已经解决了。media没有配置stream-ip和sdp-ip导致的。一定要配置为公网ip,如果不配置默认使用media.ip,你的media.ip是一个内网地址。wvp.pro对摄像头发起invite 请求中会把流媒体的ip返回去(就是这个stream-ip)。摄像头会像这个地址发起推流,但是现在你没有配置所以取的是media.ip,而这个ip是内网,所以推流超时。。。。。。

但是配置内网的话, 如果摄像头能访问这个内网ip的话, 理论上 也会通的啊

zh176 commented 1 year ago

解决了吗 我也遇到了

JQYXQ commented 1 year ago

请问下那个国标录像和云端录像有区别吗,为啥云端的有录像,从国标设备点进去没有录像信息呢。是跟摄像头本地的录像有关吗

9loki commented 9 months ago

这要咋解决啊,鼓捣了很久都弄不出来

durantgod commented 9 months ago

最新的代码估计哪里有bug,和zlm的版本对不上,第一次点播是可以看到有去拉流,后面点播就一直不行了。

Farrahchen commented 7 months ago

我的已经解决了。media没有配置stream-ip和sdp-ip导致的。一定要配置为公网ip,如果不配置默认使用media.ip,你的media.ip是一个内网地址。wvp.pro对摄像头发起invite 请求中会把流媒体的ip返回去(就是这个stream-ip)。摄像头会像这个地址发起推流,但是现在你没有配置所以取的是media.ip,而这个ip是内网,所以推流超时。。。。。。

我全部使用的是公网IP地址,也有收流超时的问题。怎么解??

Farrahchen commented 7 months ago

统一回复下,这个基本都是wvp配置不当或者网络端口为开放造成的。

这个回复太笼统了。。看了官方几个回答都没到提示到重点。。

scdn commented 7 months ago

我的已经解决了。media没有配置stream-ip和sdp-ip导致的。一定要配置为公网ip,如果不配置默认使用media.ip,你的media.ip是一个内网地址。wvp.pro对摄像头发起invite 请求中会把流媒体的ip返回去(就是这个stream-ip)。摄像头会像这个地址发起推流,但是现在你没有配置所以取的是media.ip,而这个ip是内网,所以推流超时。。。。。。

我全部使用的是公网IP地址,也有收流超时的问题。怎么解??

ip和hook-ip需要是内网ip,stream-ip和sdp-ip为公网ip

willianfu commented 7 months ago

我的摄像头上线一会就会自动下线,然后就陷入无限401注册中,只有重启后才能注册成功,过20S左右就丢心跳掉线了,不知道大家有没有遇到过,海康的4G带网口的枪机

Farrahchen commented 7 months ago

我的已经解决了。media没有配置stream-ip和sdp-ip导致的。一定要配置为公网ip,如果不配置默认使用media.ip,你的media.ip是一个内网地址。wvp.pro对摄像头发起invite 请求中会把流媒体的ip返回去(就是这个stream-ip)。摄像头会像这个地址发起推流,但是现在你没有配置所以取的是media.ip,而这个ip是内网,所以推流超时。。。。。。

我全部使用的是公网IP地址,也有收流超时的问题。怎么解??

ip和hook-ip需要是内网ip,stream-ip和sdp-ip为公网ip

我把WVP迁移到本地启动,ZLM还是公网部署的,按照你这个配置改了本地的配置,直接报错了。 image

WVP和ZLM分开部署的时候,这几个IP地址应该都是ZLM的公网IP地址才对呀。。

Farrahchen commented 7 months ago

大家遇到这个收流超时的问题,方便加个微信交流一下吗?我来建个群吧。。我的WeChat:Farrah_666

Farrahchen commented 7 months ago

我目前通过抓包发现录像机跟WVP建立连接的时候发送者和接收者IP地址是一样的,不知道是不是这个问题??

8e10828dab33e3379a2f5585f1a2685
hhhuaang commented 5 months ago

黑屏无法播放,管理后台部署在https协议下,点播成功,网页浏览器播放黑屏,播放地址是wss://ip这种,ip如何配置成域名呢?

hhhuaang commented 5 months ago

域名上ssl有免费方案,ip上ssl都是要收费的

answer666 commented 5 months ago

我的摄像头上线一会就会自动下线,然后就陷入无限401注册中,只有重启后才能注册成功,过20S左右就丢心跳掉线了,不知道大家有没有遇到过,海康的4G带网口的枪机

请问你解决了吗? 我现在就说几个设备 轮流掉线。。。

648540858 commented 4 months ago

收流超时一般有一下几个原因,按照常见程度排序,可以参考着排查下:

  1. wvp和zlm都部署在公网服务,但是media.ip只配置了一个内网的ip,导致发送给设备的收流IP是内网IP,设备发流时就指向了内网IP,导致服务端无法收到流。解决办法: 配置media下的sdp-ip和steam-ip为公网IP。sdp-ip不支持域名,stream-ip支持。
  2. wvp和zlm都部署在公网服务,sdp-ip和steam-ip为公网IP,但是收流的端口段没有在公网的入栈协议中开放,导致服务端无法收到流。解决办法:开放收流端口段,对应的值为media下的port-range,tcp+udp都开。
  3. wvp和zlm都部署在公网服务,sdp-ip和steam-ip为公网IP,收流的端口段在公网的入栈协议也开放,但是服务器的系统里开启防火墙。导致服务端无法收到流。解决办法:关闭防火墙或者在防火墙配置端口段,对应的值为media下的port-range,tcp+udp都开。
  4. wvp部署在内网,zlm部署在公网,导致zlm收到流无法发送hook消息给wvp,导致收流超时,解决办法,zlm和wvp都部署到局域网,如果需要公网观看视频,可以在公网再搭建一套,通过国标级联共享到公网观看。
  5. media.ip使用公网IP也有可能导致,无法调用zlm接口而点播失败,有的局域网服务器不能访问自己的公网IP。解决办法:media.ip使用局域网IP,如果同一台服务器,最好使用127.0.0.1,同时配置sdp-ip和steam-ip。

排除以上的情况后仍然收留超时,考虑一些其他的网络情况:

  1. 设备使用4G网络接入网络,4G网络不稳定,导致点播消息没有下发到设备,大概率出现点播超时。
  2. 设备所在的局域网使用对称NAT,导致点播消息没有下发到设备,大概率出现点播超时。
  3. 流传输模式使用了TCP主动,但是服务端无法连接到设备端,导致收流超市。 其他的情况暂时想不到了。后续想到再更新。
Kkmdfuck commented 4 months ago

我是ZLM和WVP都部署在了云服务器上(windows版本)我的sip.ip绑定云服务器的公网IP绑不上去,启动不了wvp。绑定云服务器本地ip后,并且配置stream-ip和sdp-ip都配置成了公网ip,但是本地摄像头没法在wvvp显示(没有设备、空数据),我在本地摄像头上配置了云服务器的公网ip和端口,这是怎么回事儿呢?

wo8335224 commented 3 months ago

我的原因设备找到了,华为路由器(WS7002),把它换了就行了。不知道它做了啥。

yangjun7948 commented 3 months ago

我的问题是ZLM收到了rtp的推流。但是没有产生hook给WVP。导致受流超时,这个问题怎么大家有遇到么

yangjun7948 commented 2 months ago

我的问题是ZLM收到了rtp的推流。但是没有产生hook给WVP。导致受流超时,这个问题怎么大家有遇到么

花了我两天时间看ZML和WVP的代码,一点一点调试,终于找到原因了了。只能说太坑了。 image 这个地方不知道为什么WVP的代码只接收rtsp类型的on_stream_changed事件。我注释掉之后,就可以接收到国标流RTP的事件了

yangjun7948 commented 2 months ago

我的问题是ZLM收到了rtp的推流。但是没有产生hook给WVP。导致受流超时,这个问题怎么大家有遇到么

花了我两天时间看ZML和WVP的代码,一点一点调试,终于找到原因了了。只能说太坑了。 image 这个地方不知道为什么WVP的代码只接收rtsp类型的on_stream_changed事件。我注释掉之后,就可以接收到国标流RTP的事件了

又来更新了一下,我之前在做别的项目把enable_rtsp=1 这个配置关了,ZLM在做通知的时候,流的schema都是默认的rtsp吧,所以wvp这个地方做了个判断。总之还是我自己配置的问题

CXY001 commented 1 month ago

统一回复下,这个基本都是wvp配置不当或者网络端口为开放造成的。

还有一种情况是,第一次点播无法播放,第二次才能播放,这个问题有其他人遇到过吗?

ztluxi commented 1 month ago

我遇到类似的问题,排查发现是wvp的media的id 和我zlm的id 不一致导致。