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.68k stars 1.4k forks source link

使用大疆无人机直播国标接入,不能成功播放直播视频流 #1386

Closed LiaoXH closed 4 months ago

LiaoXH commented 4 months ago

环境信息:

如何复现

1、设备正常注册上线
2、流传输模式使用udp点播,收流超时
3、流传输使用tcp主动,直接报错

zlm 以及wvp-pro的配置 zlm

; auto-generated by mINI class {

[api]
apiDebug=1
defaultSnap=./www/logo.png
downloadRoot=./www
secret=PJSoW2OrTSmkHEBzODDRmeGONpF0XMEh
snapRoot=./www/snap/

[cluster]
origin_url=
retry_count=3
timeout_sec=15

[ffmpeg]
bin=/usr/bin/ffmpeg
cmd=%s -re -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 -rtsp_transport tcp -i %s -y -f mjpeg -frames:v 1 %s

[general]
check_nvidia_dev=1
enableVhost=0
enable_ffmpeg_log=0
flowThreshold=1024
maxStreamWaitMS=15000
mediaServerId=hm-zlmediakit
mergeWriteMS=0
resetWhenRePlay=1
streamNoneReaderDelayMS=20000
unready_frame_cache=100
wait_add_track_ms=3000
wait_track_ready_ms=10000

[hls]
broadcastRecordTs=0
deleteDelaySec=10
fastRegister=0
fileBufSize=65536
segDelay=0
segDur=2
segKeep=0
segNum=3
segRetain=5

[hook]
alive_interval=10.0
enable=1
on_flow_report=
on_http_access=
on_play=http://192.168.5.215:18080/index/hook/on_play
on_publish=http://192.168.5.215:18080/index/hook/on_publish
on_record_mp4=http://192.168.5.215:18080/index/hook/on_record_mp4
on_record_ts=
on_rtp_server_timeout=http://192.168.5.215:18080/index/hook/on_rtp_server_timeout
on_rtsp_auth=
on_rtsp_realm=
on_send_rtp_stopped=http://192.168.5.215:18080/index/hook/on_send_rtp_stopped
on_server_exited=
on_server_keepalive=http://192.168.5.215:18080/index/hook/on_server_keepalive
on_server_started=http://192.168.5.215:18080/index/hook/on_server_started
on_shell_login=
on_stream_changed=http://192.168.5.215:18080/index/hook/on_stream_changed
on_stream_none_reader=http://192.168.5.215:18080/index/hook/on_stream_none_reader
on_stream_not_found=http://192.168.5.215:18080/index/hook/on_stream_not_found
retry=1
retry_delay=3.0
stream_changed_schemas=rtsp/rtmp/fmp4/ts/hls/hls.fmp4
timeoutSec=20

[http]
allow_cross_domains=1
allow_ip_range=::1,127.0.0.1,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255
charSet=utf-8
dirMenu=1
forbidCacheSuffix=
forwarded_ip_header=
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:5a137f8/%aI,branch:master,build time:2024-03-20T13:44:08)</center></body></html>
port=80
rootPath=./www
sendBufSize=65536
sslport=443
virtualPath=

[multicast]
addrMax=239.255.255.255
addrMin=239.0.0.0
udpTTL=64

[protocol]
add_mute_audio=1
auto_close=0
continue_push_ms=3000
enable_audio=1
enable_fmp4=1
enable_hls=1
enable_hls_fmp4=0
enable_mp4=0
enable_rtmp=1
enable_rtsp=1
enable_ts=1
fmp4_demand=0
hls_demand=0
hls_save_path=./www
modify_stamp=2
mp4_as_player=0
mp4_max_second=3600
mp4_save_path=./www
paced_sender_ms=0
rtmp_demand=0
rtsp_demand=0
ts_demand=0

[record]
appName=record
enableFmp4=0
fastStart=0
fileBufSize=65536
fileRepeat=0
sampleMS=500

[rtc]
externIP=
max_bitrate=0
min_bitrate=0
port=8000
preferredCodecA=PCMU,PCMA,opus,mpeg4-generic
preferredCodecV=H264,H265,AV1,VP9,VP8
rembBitRate=0
start_bitrate=0
tcpPort=8000
timeoutSec=15

[rtmp]
directProxy=1
enhanced=0
handshakeSecond=15
keepAliveSecond=15
port=1935
sslport=0

[rtp]
audioMtuSize=600
h264_stap_a=1
lowLatency=0
rtpMaxSize=10
videoMtuSize=1400

[rtp_proxy]
dumpDir=
gop_cache=1
h264_pt=98
h265_pt=99
opus_pt=100
port=10000
port_range=50000-50300
ps_pt=96
rtp_g711_dur_ms=100
timeoutSec=15
udp_recv_socket_buffer=4194304

[rtsp]
authBasic=0
directProxy=1
handshakeSecond=15
keepAliveSecond=15
lowLatency=0
port=8554
rtpTransportType=-1
sslport=0

[shell]
maxReqSize=1024
port=0

[srt]
latencyMul=4
pktBufSize=8192
port=9000
timeoutSec=5

; } ---

wvp-pro配置

spring:
  # 设置接口超时时间
  mvc:
    async:
      request-timeout: 20000
  thymeleaf:
    cache: false
  # [可选]上传文件大小限制
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
  # REDIS数据库配置
  redis:
    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
    host: 127.0.0.1
    # [必须修改] 端口号
    port: 6379
    # [可选] 数据库 DB
    database: 7
    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
    password:
    # [可选] 超时时间
    timeout: 10000
    # mysql数据源
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          type: com.zaxxer.hikari.HikariDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3307/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
          username: root
          password: 123456
          hikari:
            connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数
            initialSize: 50                       # 连接池初始化连接数
            maximum-pool-size: 200                # 连接池最大连接数
            minimum-idle: 10                       # 连接池最小空闲连接数
            idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
            max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
#[可选] 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:
  # [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡,
  # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4
  # 如果不明白,就使用0.0.0.0,大部分情况都是可以的
  # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。
  ip: 192.168.5.215
  # [可选] 28181服务监听的端口
  port: 8116
  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
  # 后两位为行业编码,定义参照附录D.3
  # 3701020049标识山东济南历下区 信息行业接入
  # [可选]
  domain: 3402000000
  # [可选]
  id: 34020000002110000001
  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  password: bajiuwulian1006
  # 是否存储alarm信息
  alarm: true

#zlm 默认服务器配置
media:
  id: hm-zlmediakit
  # [必须修改] zlm服务器的内网IP
  ip: 192.168.1.5
  # [必须修改] zlm服务器的http.port
  http-port: 80
  # [可选] 返回流地址时的ip,置空使用 media.ip
  stream-ip: 192.168.1.5
  # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
  sdp-ip: 192.168.1.5
  # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
  hook-ip: 192.168.5.215
  # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置
  http-ssl-port: 1443
  # [可选] zlm服务器的hook.admin_params=secret
  secret: PJSoW2OrTSmkHEBzODDRmeGONpF0XMEh
  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 50000,50300 # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流,
    send-port-range: 50000,50300 # 端口范围
  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
  record-assist-port: 18081
# [根据业务需求配置]8080
user-settings:
  # 点播/录像回放 等待超时时间,单位:毫秒
  play-timeout: 180000
  # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
  auto-apply-play: true
  # 设备/通道状态变化时发送消息
  device-status-notify: true
# [可选] 日志配置, 一般不需要改
logging:
  config: classpath:logback-spring-local.xml

截图
tcp点播 image

抓包文件

直播推流抓包文件.zip

日志 流传输模式 tcp主动 点播超时

2024-03-25 11:13:13.776 [http-nio-18080-exec-2]  INFO --- c.g.iot.vmp.vmanager.gb28181.play.PlayController: 117 [点播等待超时] deviceId:34020000001320000003, channelId:34020000001320000010, 
2024-03-25 11:13:13.800 [http-nio-18080-exec-2] ERROR --- com.genersoft.iot.vmp.conf.GlobalExceptionHandler: 32 [全局异常]: 

org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:271)
    at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:120)
    at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:523)
    at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1187)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1009)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:456)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:106)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:87)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:661)
    at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:589)
    at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:558)
    at org.apache.catalina.core.AsyncContextImpl$AsyncRunnable.run(AsyncContextImpl.java:569)
    at org.apache.catalina.core.AsyncContextImpl.doInternalDispatch(AsyncContextImpl.java:339)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:237)
    at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:242)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
    at sun.nio.ch.IOUtil.write(IOUtil.java:65)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:469)
    at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:136)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1431)
    at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:775)
    at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:739)
    at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:723)
    at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:566)
    at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:157)
    at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:220)
    at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1245)
    at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:399)
    at org.apache.coyote.Response.action(Response.java:207)
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305)
    ... 99 common frames omitted

2024-03-25 11:13:13.808 [http-nio-18080-exec-2]  WARN --- o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver: 434 Failure in @ExceptionHandler com.genersoft.iot.vmp.conf.GlobalExceptionHandler#exceptionHandler(Exception)

流传输模式 为UDP

2024-03-25 11:15:04.492 [http-nio-18080-exec-3]  INFO --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 388 [点播开始] deviceId: 34020000001320000003, channelId: 34020000001320000010,码流类型:stream:0, 收流端口: 50294, 码流:34020000001320000003_34020000001320000010, 收流模式:UDP, SSRC: 0105001269, SSRC校验:false
2024-03-25 11:15:04.493 [http-nio-18080-exec-3]  INFO --- c.g.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander: 286 34020000001320000003_34020000001320000010 分配的ZLM为: hm-zlmediakit [192.168.1.5:50294]
{on_stream_changed={com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange@1af0c6d5=com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander$$Lambda$1235/495176419@407ccce5, com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange@1c1396fc=com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander$$Lambda$1235/495176419@43ec7284}}
2024-03-25 11:15:04.504 [wvp-5]  INFO --- c.g.i.v.g.t.e.r.impl.InviteResponseProcessor: 91 [回复ack] 34020000001320000010-> 192.168.5.93:5060 
2024-03-25 11:15:04.648 [http-nio-18080-exec-1]  INFO --- c.genersoft.iot.vmp.media.zlm.ZLMHttpHookListener: 203 [ZLM HOOK]推流鉴权:hm-zlmediakit->OnPublishHookParam{id='34020000001320000003_34020000001320000010', app='rtp', stream='34020000001320000003_34020000001320000010', ip='192.168.1.123', params='', port=10000, schema='rtp', vhost='__defaultVhost__'}
2024-03-25 11:15:04.657 [http-nio-18080-exec-1]  INFO --- c.genersoft.iot.vmp.media.zlm.ZLMHttpHookListener: 336 [ZLM HOOK]推流鉴权 响应:hm-zlmediakit->OnPublishHookParam{id='34020000001320000003_34020000001320000010', app='rtp', stream='34020000001320000003_34020000001320000010', ip='192.168.1.123', params='', port=10000, schema='rtp', vhost='__defaultVhost__'}->>>>HookResultForOnPublish{enable_audio=false, enable_mp4=true, mp4_max_second=0, mp4_save_path='null', stream_replace='null', modify_stamp='null'}
2024-03-25 11:15:06.328 [wvp-4]  INFO --- c.g.i.v.g.t.e.r.i.m.n.c.KeepaliveNotifyMessageHandler: 64 [收到心跳] device: 34020000001320000003, callId: 752832531
2024-03-25 11:15:06.334 [ThreadPoolTaskScheduler-34]  WARN --- c.genersoft.iot.vmp.service.impl.DeviceServiceImpl: 208 [设备离线],三次心跳失败, device:34020000001320000003
2024-03-25 11:15:06.334 [ThreadPoolTaskScheduler-34]  INFO --- c.g.iot.vmp.storager.impl.RedisCatchStorageImpl: 618 [redis通知] 推送设备/通道状态-> 34020000001320000003 OFF 
2024-03-25 11:15:06.344 [ThreadPoolTaskScheduler-34]  INFO --- ZLMRTPServerFactory: 117 关闭RTP Server {"code":0,"hit":1}
2024-03-25 11:15:06.348 [ThreadPoolTaskScheduler-34]  INFO --- c.genersoft.iot.vmp.service.impl.DeviceServiceImpl: 280 [移除目录订阅]: 34020000001320000003
2024-03-25 11:15:06.348 [ThreadPoolTaskScheduler-34]  INFO --- c.genersoft.iot.vmp.service.impl.DeviceServiceImpl: 313 [移除移动位置订阅]: 34020000001320000003
2024-03-25 11:15:11.756 [wvp-16]  INFO --- c.g.i.v.g.t.e.r.i.m.n.c.KeepaliveNotifyMessageHandler: 64 [收到心跳] device: 34020000001320000003, callId: 940908211
2024-03-25 11:15:11.757 [wvp-16]  INFO --- c.genersoft.iot.vmp.service.impl.DeviceServiceImpl: 110 [设备上线] deviceId:34020000001320000003->192.168.5.93:5060
2024-03-25 11:15:11.762 [wvp-16]  INFO --- c.g.iot.vmp.storager.impl.RedisCatchStorageImpl: 618 [redis通知] 推送设备/通道状态-> 34020000001320000003 ON 
2024-03-25 11:15:12.087 [wvp-3]  INFO --- c.g.i.v.g.t.e.r.i.m.n.c.KeepaliveNotifyMessageHandler: 64 [收到心跳] device: 34020000001320000003, callId: 940908211
2024-03-25 11:15:12.087 [wvp-3]  INFO --- c.g.i.v.g.t.e.r.i.m.n.c.KeepaliveNotifyMessageHandler: 73 [收到心跳] 心跳发送过于频繁,已忽略 device: 34020000001320000003, callId: 940908211
2024-03-25 11:15:16.376 [wvp-12]  INFO --- c.g.i.v.g.t.e.r.i.m.n.c.KeepaliveNotifyMessageHandler: 64 [收到心跳] device: 34020000001320000003, callId: 29703235
.................

2024-03-25 11:18:04.504 [ThreadPoolTaskScheduler-282]  INFO --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 415 [点播超时] 收流超时 deviceId: 34020000001320000003, channelId: 34020000001320000010,码流:stream:0,端口:50294, SSRC: 0105001269
2024-03-25 11:18:04.506 [ThreadPoolTaskScheduler-282]  INFO --- c.g.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander: 680 [发送BYE] 未找到事务信息,设备: device: 34020000001320000003, channel: 34020000001320000010
2024-03-25 11:18:04.506 [ThreadPoolTaskScheduler-282] ERROR --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 427 [点播超时], 发送BYE失败 缓存事务信息未找到,device:34020000001320000003 channel: 34020000001320000010 ,stream: 34020000001320000003_34020000001320000010
2024-03-25 11:18:04.538 [ThreadPoolTaskScheduler-282]  INFO --- ZLMRTPServerFactory: 117 关闭RTP Server {"code":0,"hit":0}
2024-03-25 11:18:04.542 [ThreadPoolTaskScheduler-282]  INFO --- ZLMRTPServerFactory: 117 关闭RTP Server {"code":0,"hit":0}
LiaoXH commented 4 months ago

tcp第一次直接报错,报错如下 image

2024-03-25 11:24:42.462 [http-nio-18080-exec-10]  INFO --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 388 [点播开始] deviceId: 34020000001320000003, channelId: 34020000001320000010,码流类型:stream:0, 收流端口: 50244, 码流:34020000001320000003_34020000001320000010, 收流模式:TCP-ACTIVE, SSRC: 0105008672, SSRC校验:false
2024-03-25 11:24:42.463 [http-nio-18080-exec-10]  INFO --- c.g.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander: 286 34020000001320000003_34020000001320000010 分配的ZLM为: hm-zlmediakit [192.168.1.5:50244]
{on_stream_changed={com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange@58029e56=com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander$$Lambda$1235/495176419@fc3c274}}
2024-03-25 11:24:42.487 [wvp-14]  INFO --- c.g.i.v.g.t.e.r.impl.InviteResponseProcessor: 91 [回复ack] 34020000001320000010-> 192.168.5.93:5060 
2024-03-25 11:24:42.490 [wvp-14]  INFO --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 539 [TCP主动连接对方] deviceId: 34020000001320000003, channelId: 34020000001320000010, 连接对方的地址:192.168.5.93:10000, 收流模式:TCP-ACTIVE, SSRC: 0105008672, SSRC校验:false
2024-03-25 11:24:42.502 [wvp-14]  INFO --- com.genersoft.iot.vmp.service.impl.PlayServiceImpl: 541 [TCP主动连接对方] 结果: {"code":-1,"msg":"connection refused"}
2024-03-25 11:24:42.506 [wvp-14]  INFO --- ZLMRTPServerFactory: 117 关闭RTP Server {"code":0,"hit":1}
LiaoXH commented 4 months ago

防火墙两台服务器的均已关闭,二次测试大华摄像头的udp播放也是不成功的,是因为udp的问题吗? 哪里设置udp相关配置

LiaoXH commented 4 months ago

image 大华摄像头的配置,tcp点播可以,udp不行