Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
keehub opened this issue Apr 13, 2022 · 55 comments
Closed

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

keehub opened this issue Apr 13, 2022 · 55 comments

Comments

@keehub
Copy link

keehub commented Apr 13, 2022

一. 部署环境

 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)
; 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=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:a3d696d,branch:master,build time:Feb 23 2022 12:29:13)</center></body></html>
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,无关敏感配置用***代替了)
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
Copy link
Author

keehub commented Apr 13, 2022

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:[email protected]: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
Copy link
Author

keehub commented Apr 13, 2022

网络截图

@648540858
Copy link
Owner

wvp的media的配置提供下

@keehub
Copy link
Author

keehub commented Apr 15, 2022

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
Copy link

slxsyxx commented Apr 15, 2022

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

@tingmag
Copy link

tingmag commented Apr 18, 2022

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

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

@zhangdongshun
Copy link

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

@rainingshining
Copy link

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

@648540858
Copy link
Owner

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

@648540858 648540858 pinned this issue Apr 25, 2022
@JinruiWang
Copy link

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

@648540858
Copy link
Owner

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

@648540858 648540858 changed the title 本地正常运行,部署云服务时,点播收流超时,请稍候重试 云服务,点超时,收流超时.,或者黑屏无法播放 May 20, 2022
@JinruiWang
Copy link

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

@realbillwong
Copy link

网络截图

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

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

@HogwartsRico
Copy link

我也遇到这个问题了

@realbillwong
Copy link

说一下我的解决办法:

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

@MrLiuFang
Copy link

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

@lixiansky
Copy link

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

@penghui-luna
Copy link

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

@Zhu168888rui
Copy link

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

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

@648540858
Copy link
Owner

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

@hnzmxy
Copy link

hnzmxy commented Sep 6, 2022

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

@dcq123
Copy link

dcq123 commented Nov 8, 2022

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

@wildwindyevan
Copy link

我修改了这几个后可以播放了
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
Copy link

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

@xiaoxuanshiya
Copy link

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

@yogo-zhangyingzhe
Copy link

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

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

@zh176
Copy link

zh176 commented Sep 5, 2023

解决了吗 我也遇到了

@JQYXQ
Copy link

JQYXQ commented Sep 15, 2023

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

@9loki
Copy link

9loki commented Dec 20, 2023

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

@durantgod
Copy link

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

@Farrahchen
Copy link

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

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

@Farrahchen
Copy link

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

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

@scdn
Copy link

scdn commented Mar 2, 2024

我的已经解决了。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
Copy link

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

@Farrahchen
Copy link

我的已经解决了。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
Copy link

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

@Farrahchen
Copy link

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

@hhhuaang
Copy link

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

@hhhuaang
Copy link

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

@answer666
Copy link

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

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

@648540858
Copy link
Owner

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

  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
Copy link

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

@wo8335224
Copy link

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

@yangjun7948
Copy link

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

@yangjun7948
Copy link

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

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

@yangjun7948
Copy link

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

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

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

@CXY001
Copy link

CXY001 commented Aug 8, 2024

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

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

@ztluxi
Copy link

ztluxi commented Aug 22, 2024

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

@zen010101
Copy link

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

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

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

我也是这个问题。感谢感谢!

@LiaoXH
Copy link

LiaoXH commented Sep 2, 2024

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

  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主动,但是服务端无法连接到设备端,导致收流超市。
    其他的情况暂时想不到了。后续想到再更新。

我是属于第五种情况,内网部署了WVP+ZLM在一台机器,公网ip端口映射了media、wvp需要开放的端口,但是内网机器无法访问这个公网ip。sdp-ip和steam-ip配置的ip应该怎么配置?

@wangbaiqi355920251
Copy link

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

有用,感谢

@CCWater
Copy link

CCWater commented Nov 6, 2024

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

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

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

我调试到了这一步,但是没想到是默认rtsp的原因,感谢大佬

@JaneYork
Copy link

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

  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主动,但是服务端无法连接到设备端,导致收流超市。
    其他的情况暂时想不到了。后续想到再更新。

补充亿.

  1. 多看ZLM日志,云服务器WVP单独 + ZLM docker,除了配置宿主机IP,还要将wvp.yml.range_port从docker中射出来😊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests