Closed lr897219186 closed 8 months ago
wvp联调zlm:wvp向执法记录仪对讲,前端发起推流请求将webrtc流推至zlm,但是zlm日志显示 WebRtcSession.cpp:104 onError | 5-92(192.168.1.102:61240) 1(end of file) 的报错;后续请求 /index/api/startSendRtp 接口时zlm回复拒绝连接 "connection refused"
WebRtcSession.cpp:104 onError | 5-92(192.168.1.102:61240) 1(end of file)
/index/api/startSendRtp
"connection refused"
wvp前端页面发起语音对讲时必现: 1、发起语音对讲请求后,组装webrtc地址(如http://192.168.1.200/index/api/webrtc?app=audio&stream=34020000002000000008_34020000002000000008&type=push&sign=41db35390ddad33f83944f44b8b75ded),由前端推流给zlm; 2、前端推送zlm且收到zlm的返回成功后,请求wvp后端接口,后端开始与执法记录仪进行sip信令交互; 3、信令交互完成后,后端通过rtp推流的方式将语音推送给第1步已经注册好的流媒体中
webrtc推流报错:
请求 /index/api/startSendRtp 接口拒绝连接:
2023-12-22 16:40:06.786 D [MediaServer] [19493-event poller 2] WebApi.cpp:260 http api debug | # request: POST /index/api/webrtc?app=audio&stream=34020000002000000008_34020000002000000008&type=push&sign=41db35390ddad33f83944f44b8b75ded # header: Accept : application/json, text/plain, */* Accept-Encoding : gzip, deflate Accept-Language : zh-CN,zh;q=0.9 Connection : keep-alive Content-Length : 1457 Content-Type : text/plain;charset=UTF-8 Host : 192.168.1.200 Origin : http://127.0.0.1:8080 Referer : http://127.0.0.1:8080/ User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36 # content: v=0 o=- 3171467370455362545 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 a=extmap-allow-mixed a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:zVK+ a=ice-pwd:FvH9+zYNAmc75RpiOfSq+Q9q a=ice-options:trickle a=fingerprint:sha-256 01:1D:6F:81:E9:4C:1A:1F:C2:AF:03:BE:FE:AC:A6:E3:1F:DF:71:C5:E1:8F:CB:43:78:52:CB:62:05:7A:DF:C5 a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid a=sendrecv a=msid:- 4f7ecf52-5591-4579-9f09-9a30275743a2 a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:63 red/48000/2 a=fmtp:63 111/111 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:110 telephone-event/48000 a=rtpmap:112 telephone-event/32000 a=rtpmap:113 telephone-event/16000 a=rtpmap:126 telephone-event/8000 a=ssrc:3357273320 cname:ahvmXo1JJj42Q9fP a=ssrc:3357273320 msid:- 4f7ecf52-5591-4579-9f09-9a30275743a2 a=ssrc:3357273320 mslabel:- a=ssrc:3357273320 label:4f7ecf52-5591-4579-9f09-9a30275743a2 # response: { "code" : 0, "id" : "wKgByB9AH0A=_1", "sdp" : "v=0\r\no=- 3171467370455362545 2 IN IP4 192.168.1.200\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=msid-semantic: WMS\r\na=ice-lite\r\nm=audio 8000 UDP/TLS/RTP/SAVPF 8\r\nc=IN IP4 192.168.1.200\r\na=rtcp:8000 IN IP4 192.168.1.200\r\na=ice-ufrag:wKgByB9AH0A=_1\r\na=ice-pwd:gDuJko8OOmwa65YLg9X7C4b1\r\na=ice-options:trickle\r\na=fingerprint:sha-256 5D:43:0F:2C:BD:82:BB:C5:B4:77:42:D3:8C:2B:D5:1A:32:59:39:1D:78:7A:BB:88:E2:EF:2A:60:37:AD:6E:A3\r\na=setup:passive\r\na=mid:0\r\na=ice-lite\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:8 PCMA/8000/1\r\na=candidate:udpcandidate 1 udp 110 192.168.1.200 8000 typ host\r\na=candidate:tcpcandidate 1 tcp 105 192.168.1.200 8000 typ host tcptype passive\r\n", "type" : "answer" } 2023-12-22 16:40:06.886 W [MediaServer] [19493-event poller 2] WebRtcSession.cpp:104 onError | 5-92(192.168.1.102:61240) 1(end of file) 2023-12-22 16:40:06.886 W [MediaServer] [19493-event poller 2] WebRtcSession.cpp:104 onError | 6-91(192.168.1.102:61241) 1(end of file) 2023-12-22 16:40:06.916 I [MediaServer] [19493-event poller 2] WebRtcSession.cpp:85 onRecv_l | 8-90(192.168.1.102:54842) 2023-12-22 16:40:06.917 D [MediaServer] [19493-event poller 2] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected' 2023-12-22 16:40:06.917 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:165 OnIceServerSelectedTuple | wKgByB9AH0A=_1 select tuple udp 192.168.1.102:54842 2023-12-22 16:40:06.917 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:171 OnIceServerConnected | wKgByB9AH0A=_1 2023-12-22 16:40:06.917 E [MediaServer] [19493-event poller 2] DtlsTransport.cpp:744 ProcessDtlsData | cannot process data while not running 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed' 2023-12-22 16:40:06.979 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:175 OnIceServerCompleted | wKgByB9AH0A=_1 2023-12-22 16:40:06.979 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:210 OnDtlsTransportConnecting | wKgByB9AH0A=_1 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:699 Run | running [role:server] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1411 OnSslInfo | DTLS handshake start 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization'] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'before SSL initialization'] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'before SSL initialization'] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello'] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello'] 2023-12-22 16:40:06.979 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate'] 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange'] 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request'] 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1407 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done'] 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 2117 bytes of DTLS data ready to sent to the peer 2023-12-22 16:40:06.981 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1015 SetTimeout | DTLS timer set in 99ms 2023-12-22 16:40:06.982 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] 2023-12-22 16:40:06.982 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate'] 2023-12-22 16:40:06.982 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS read finished'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1369 OnSslInfo | [role:server, action:'SSLv3/TLS write finished'] 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1415 OnSslInfo | DTLS handshake done 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:977 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1166 CheckRemoteFingerprint | valid remote fingerprint 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1340 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM 2023-12-22 16:40:06.983 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:192 OnDtlsTransportConnected | wKgByB9AH0A=_1 2023-12-22 16:40:06.983 D [MediaServer] [19493-event poller 2] SrtpSession.cpp:97 DepLibSRTP | libsrtp version: "libsrtp2 2.3.0" 2023-12-22 16:40:07.007 I [MediaServer] [19493-event poller 2] WebRtcTransport.cpp:951 createRtpChannel | create rtp receiver of ssrc:3357273320, rid:, codec:PCMA 2023-12-22 16:40:07.009 I [MediaServer] [19493-event poller 2] MediaSource.cpp:517 emitEvent | 媒体注册:rtsp://__defaultVhost__/audio/34020000002000000008_34020000002000000008 2023-12-22 16:40:07.028 D [MediaServer] [19493-event poller 2] MediaSink.cpp:161 emitAllTrackReady | All track ready use 40ms 2023-12-22 16:40:07.030 I [MediaServer] [19493-event poller 2] MediaSource.cpp:517 emitEvent | 媒体注册:fmp4://__defaultVhost__/audio/34020000002000000008_34020000002000000008 2023-12-22 16:40:07.031 I [MediaServer] [19493-event poller 2] MultiMediaSourceMuxer.cpp:551 onAllTrackReady | stream: rtc://192.168.1.200/audio/34020000002000000008_34020000002000000008?app=audio&stream=34020000002000000008_34020000002000000008&type=push&sign=41db35390ddad33f83944f44b8b75ded&session=4-88 , codec info: PCMA[8000/1/16] 2023-12-22 16:40:07.032 I [MediaServer] [19493-event poller 2] MediaSource.cpp:517 emitEvent | 媒体注册:rtmp://__defaultVhost__/audio/34020000002000000008_34020000002000000008 2023-12-22 16:40:07.033 I [MediaServer] [19493-event poller 2] MediaSource.cpp:517 emitEvent | 媒体注册:ts://__defaultVhost__/audio/34020000002000000008_34020000002000000008 2023-12-22 16:40:07.214 D [MediaServer] [19493-event poller 2] WebApi.cpp:260 http api debug | # request: POST /index/api/startSendRtp # header: Accept-Encoding : gzip Connection : Keep-Alive Content-Length : 221 Content-Type : application/x-www-form-urlencoded Host : 192.168.1.200 User-Agent : okhttp/4.10.0 # content: secret=8w45q9thKzhxS0GJ3XUqXaNThmaTMgAf&app=audio&src_port=50002&vhost=__defaultVhost__&use_ps=0&is_udp=0&pt=0&stream=34020000002000000008_34020000002000000008&ssrc=1422143671&dst_port=0&dst_url=192.168.1.103&only_audio=1 # response: { "code" : -1, "local_port" : 0, "msg" : "connection refused" } 2023-12-22 16:40:07.214 I [MediaServer] [19493-event poller 2] RawEncoder.cpp:28 ~RawEncoderImp | 0x7fdea803fa00 54C430B7 2023-12-22 16:40:09.027 I [MediaServer] [19493-event poller 2] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/audio/34020000002000000008_34020000002000000008 2023-12-22 16:40:16.916 W [MediaServer] [19493-event poller 2] WebRtcSession.cpp:104 onError | 7-95(192.168.1.102:61242) 1(end of file) 2023-12-22 16:40:25.966 D [MediaServer] [19493-event poller 2] WebApi.cpp:260 http api debug | # request: POST /index/api/stopSendRtp # header: Accept-Encoding : gzip Connection : Keep-Alive Content-Length : 137 Content-Type : application/x-www-form-urlencoded Host : 192.168.1.200 User-Agent : okhttp/4.10.0 # content: secret=8w45q9thKzhxS0GJ3XUqXaNThmaTMgAf&app=audio&vhost=__defaultVhost__&stream=34020000002000000008_34020000002000000008&ssrc=1422143671 # response: { "code" : -1, "msg" : "stopSendRtp failed" } 2023-12-22 16:40:25.977 W [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1391 OnSslInfo | received DTLS warning alert: close notify 2023-12-22 16:40:25.977 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:935 CheckStatus | disconnected 2023-12-22 16:40:25.977 W [MediaServer] [19493-event poller 2] DtlsTransport.cpp:842 Reset | resetting DTLS transport 2023-12-22 16:40:25.977 D [MediaServer] [19493-event poller 2] DtlsTransport.cpp:1395 OnSslInfo | sending DTLS warning alert: close notify
zlm配置文件:
; auto-generated by mINI class { [api] apiDebug=1 defaultSnap=./www/logo.png downloadRoot=./www secret=8w45q9thKzhxS0GJ3XUqXaNThmaTMgAf 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 -t 0.001 %s [general] check_nvidia_dev=1 enableVhost=0 enable_ffmpeg_log=0 flowThreshold=1024 maxStreamWaitMS=15000 mediaServerId=lr_zlm 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 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.1.102:18080/index/hook/on_play on_publish=http://192.168.1.102:18080/index/hook/on_publish on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4 on_record_ts= on_rtp_server_timeout=http://192.168.1.102:18080/index/hook/on_rtp_server_timeout on_rtsp_auth= on_rtsp_realm= on_send_rtp_stopped=http://192.168.1.102:18080/index/hook/on_send_rtp_stopped on_server_exited= on_server_keepalive=http://192.168.1.102:18080/index/hook/on_server_keepalive on_server_started=http://192.168.1.102:18080/index/hook/on_server_started on_shell_login= on_stream_changed=http://192.168.1.102:18080/index/hook/on_stream_changed on_stream_none_reader=http://192.168.1.102:18080/index/hook/on_stream_none_reader on_stream_not_found=http://192.168.1.102: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=404 Not Found您访问的资源不存在!ZLMediaKit(git hash:22732ea/%aI,branch:master,build time:2023-12-04T16:13:07) 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=G:\media\lin\Server\ZLMediaKit\dev\ZLMediaKit\release\linux\Debug\www paced_sender_ms=0 rtmp_demand=0 rtsp_demand=0 ts_demand=0 [record] appName=record fastStart=0 fileBufSize=65536 fileRepeat=0 sampleMS=500 [rtc] externIP=192.168.1.200 port=8000 preferredCodecA=PCMA,PCMU,opus,mpeg4-generic preferredCodecV=H264,H265,AV1,VP9,VP8 rembBitRate=0 tcpPort=8000 timeoutSec=15 [rtmp] 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 timeoutSec=15 [rtsp] authBasic=0 directProxy=1 handshakeSecond=15 keepAliveSecond=15 lowLatency=0 port=554 rtpTransportType=-1 sslport=0 [shell] maxReqSize=1024 port=0 [srt] latencyMul=4 pktBufSize=8192 port=9000 timeoutSec=5 ; } ---
wvp流媒体部分的配置:
media: id: lr_zlm # [必须修改] zlm服务器的内网IP ip: 192.168.1.200 # [必须修改] zlm服务器的http.port http-port: 80 # [可选] 返回流地址时的ip,置空使用 media.ip stream-ip: 192.168.1.200 # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip sdp-ip: 192.168.1.200 # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip hook-ip: 192.168.1.102 # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置 http-ssl-port: 443 # [可选] zlm服务器的hook.admin_params=secret secret: 8w45q9thKzhxS0GJ3XUqXaNThmaTMgAf # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试 rtp: # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输 enable: true # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功 port-range: 50000,50300 # 端口范围 # [可选] 国标级联在此范围内选择端口发送媒体流, send-port-range: 50000,50300 # 端口范围 # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 record-assist-port: 18081
dst_port=0 ?
这不是webrtc的问题还是你的信令或者接口调用有问题
ok我再检查下,谢谢
这好像确实不对,我检查下
现象描述
wvp联调zlm:wvp向执法记录仪对讲,前端发起推流请求将webrtc流推至zlm,但是zlm日志显示
WebRtcSession.cpp:104 onError | 5-92(192.168.1.102:61240) 1(end of file)
的报错;后续请求/index/api/startSendRtp
接口时zlm回复拒绝连接"connection refused"
如何复现?
wvp前端页面发起语音对讲时必现: 1、发起语音对讲请求后,组装webrtc地址(如http://192.168.1.200/index/api/webrtc?app=audio&stream=34020000002000000008_34020000002000000008&type=push&sign=41db35390ddad33f83944f44b8b75ded),由前端推流给zlm; 2、前端推送zlm且收到zlm的返回成功后,请求wvp后端接口,后端开始与执法记录仪进行sip信令交互; 3、信令交互完成后,后端通过rtp推流的方式将语音推送给第1步已经注册好的流媒体中
相关日志或截图
webrtc推流报错:
请求
/index/api/startSendRtp
接口拒绝连接:webrtc推流报错日志:
配置
zlm配置文件:
展开查看详细配置
wvp流媒体部分的配置:
展开查看详细配置
各种环境信息