[BUG] WHIP推流高码率下自动断开问题
现象描述
使用多种方式(OBS、 FFmpeg)通过WHIP向ZLMediaKit服务器推流时,在高码率(>=20K)下开始推流后会持续出现SRTP错误,并在5s至数分钟内发生推流被切断等情况(可以稳定复现),在低码率(<10K)或观看人数较少时仅会偶发此现象,但SRTP错误每次推流都会持续产生。
如何复现?
测试环境:
- OBS 最新版 31.1.2 (从与ZLMediaKit不同地域的其他主机推流)
- ZLMediaKit Linux 94be50e / Windows f524a0e
- ffmpeg version n7.1.1-2-ga4065faa79 (docker 镜像 parallelcc/ffmpeg-whip-whep:7.1.1, 与ZLMediaKit服务器运行在同一个系统)
OBS输出设置
使用OBS推流约20s后推流被断开,日志见下。
FFmpeg推流命令,使用 Docker镜像parallelcc/ffmpeg-whip-whep:7.1.1 推流:
ffmpeg -re -f lavfi -i testsrc2=size=1920x1080:rate=60 -vcodec libx264 -b:v 200000k -preset fast -tune zerolatency -f whip "https://<domain>:8086/index/api/whip?app=live&stream=test"
使用FFmpeg推流时情况如下,开始推流即出现SRTCP replay错误,一段时间后推流被切断,相关日志见下:
相关日志或截图
由于相关日志较长,已上传至Ubuntu Pastebin
OBS推流开始至断开期间 ZLMediaKit的日志 https://paste.ubuntu.com/p/dtV7RJBNHX/
OBS推流开始至断开期间 OBS的日志 https://paste.ubuntu.com/p/py44WMVNTy/
FFmpeg推流开始至断开期间 ZLMediaKit的日志
Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.162 I [MediaServer] [76056-MediaServer] main.cpp:397 start_main | 已启动http hook 接口 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.163 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 554 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.164 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 8083 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.164 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 8085 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.165 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 8086 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.166 I [MediaServer] [76056-MediaServer] UdpServer.cpp:128 start_l | UDP server bind to [::]: 10000 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.169 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 10000 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.169 I [MediaServer] [76056-MediaServer] UdpServer.cpp:128 start_l | UDP server bind to [::]: 8084 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.170 I [MediaServer] [76056-MediaServer] TcpServer.cpp:242 start_l | TCP server listening on [::]: 8084 Aug 31 14:06:58 sakana zlmediakit[76056]: 2025-08-31 14:06:58.170 I [MediaServer] [76056-MediaServer] UdpServer.cpp:128 start_l | UDP server bind to [::]: 9000 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:126 getServerPrefix | MediaServer(192.168.0.20:8084:8084) prefix: wKgAFB+UH5Q=_ Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:557 WebRtcTransportImp | wKgAFB+UH5Q=_1 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 I [MediaServer] [76056-event poller 0] DtlsTransport.cpp:310 ReadCertificateAndPrivateKeyFromContext | Load webrtc dtls certificate: <domain> Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:415 CreateSslCtx | setting SRTP cryptoSuites for DTLS: SRTP_AEAD_AES_256_GCM:SRTP_AEAD_AES_128_GCM:SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:497 GenerateFingerprints | sha-1 fingerprint: E8:66:9C:96:1D:85:5F:CF:36:DB:21:0F:64:DC:D4:E6:4B:35:0F:0A Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:497 GenerateFingerprints | sha-224 fingerprint: 1C:7E:2F:BC:65:85:1B:C0:15:73:ED:5E:24:BB:0E:12:76:AF:DF:BC:4A:F9:C9:BC:D4:49:30:E4 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.138 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:497 GenerateFingerprints | sha-256 fingerprint: FF:72:54:5E:C3:A0:AE:95:BB:48:DE:76:9B:43:AE:47:C9:FE:B1:E3:C7:08:EA:50:1F:E3:89:FE:7F:6F:59:BF Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.139 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:497 GenerateFingerprints | sha-384 fingerprint: 76:D8:60:03:36:F9:7F:13:FD:39:9A:32:62:DB:FF:E6:23:E7:E7:58:3F:C6:63:4F:8C:9C:0D:58:97:88:2F:97:DD:4F:55:18:8E:65:B9:0D:EA:F9:53:0B:D1:99:78:F8 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.139 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:497 GenerateFingerprints | sha-512 fingerprint: 67:B1:53:EB:53:77:5A:58:45:00:3F:85:BE:A5:CA:4F:03:76:CC:51:45:5B:47:B5:03:7E:50:C1:00:63:35:24:E1:21:55:DF:C2:7E:D2:24:C0:B9:D1:9A:7A:AF:80:3E:A6:96:98:20:59:B0:48:90:14:5A:31:8F:E0:D4:97:30 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.192 I [MediaServer] [76056-event poller 0] WebRtcSession.cpp:91 onRecv_l | 15-31(116.233.23.20:41006) Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.192 D [MediaServer] [76056-event poller 0] IceServer.cpp:340 HandleTuple | transition from state 'new' to 'connected' Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.192 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:184 OnIceServerSelectedTuple | wKgAFB+UH5Q=_1 select tuple udp 116.233.23.20:41006 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.192 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:190 OnIceServerConnected | wKgAFB+UH5Q=_1 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] IceServer.cpp:429 HandleTuple | transition from state 'connected' to 'completed' Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:194 OnIceServerCompleted | wKgAFB+UH5Q=_1 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:246 OnDtlsTransportConnecting | wKgAFB+UH5Q=_1 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:699 Run | running [role:server] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1410 OnSslInfo | DTLS handshake start Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'before SSL initialization'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'before SSL initialization'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'before SSL initialization'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.195 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 1858 bytes of DTLS data ready to sent to the peer Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 99ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.197 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 99ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.297 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 1833 bytes of DTLS data ready to sent to the peer Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.297 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 199ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.311 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS read client certificate'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 185ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS read client key exchange'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 185ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS read certificate verify'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 184ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1406 OnSslInfo | role: server, waiting:'SSLv3/TLS read change cipher spec'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 184ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS read finished'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1368 OnSslInfo | [role:server, action:'SSLv3/TLS write finished'] Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1414 OnSslInfo | DTLS handshake done Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1165 CheckRemoteFingerprint | valid remote fingerprint Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.312 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1339 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AES128_CM_SHA1_80 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.313 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:211 OnDtlsTransportConnected | wKgAFB+UH5Q=_1 Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.313 D [MediaServer] [76056-event poller 0] SrtpSession.cpp:97 DepLibSRTP | libsrtp version: "libsrtp2 2.3.0" Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.338 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 129 bytes of DTLS data ready to sent to the peer Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.338 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 74ms Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.338 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 74ms Aug 31 14:25:28 sakana zlmediakit[76056]: Last message repeated 2 times Aug 31 14:25:28 sakana zlmediakit[76056]: 2025-08-31 14:25:28.338 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 73ms Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:28.338 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1014 SetTimeout | DTLS timer set in 73ms Aug 31 14:25:29 sakana zlmediakit[76056]: Last message repeated 2 times Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:29.370 W [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:947 onRtcp | 未识别的sr rtcp包:version:2 Aug 31 14:25:29 sakana zlmediakit[76056]: padding:0 Aug 31 14:25:29 sakana zlmediakit[76056]: report_count:0 Aug 31 14:25:29 sakana zlmediakit[76056]: pt:200(RTCP_SR) Aug 31 14:25:29 sakana zlmediakit[76056]: size:28 Aug 31 14:25:29 sakana zlmediakit[76056]: -------- Aug 31 14:25:29 sakana zlmediakit[76056]: ssrc:1231336231 Aug 31 14:25:29 sakana zlmediakit[76056]: ntpmsw:3965639129 Aug 31 14:25:29 sakana zlmediakit[76056]: ntplsw:1586190336 Aug 31 14:25:29 sakana zlmediakit[76056]: ntp time:2025-08-31 14:25:29.369 Aug 31 14:25:29 sakana zlmediakit[76056]: rtpts:6000 Aug 31 14:25:29 sakana zlmediakit[76056]: packet_count:99 Aug 31 14:25:29 sakana zlmediakit[76056]: octet_count:117356 Aug 31 14:25:29 sakana zlmediakit[76056]: Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:29.370 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:1062 createRtpChannel | create rtp receiver of ssrc:1231336231, rid:, codec:H264 Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:29.370 I [MediaServer] [76056-event poller 0] MediaSource.cpp:505 emitEvent | 媒体注册:rtsp://__defaultVhost__/live/test Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:29.371 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:29 sakana zlmediakit[76056]: 2025-08-31 14:25:29.371 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: 2025-08-31 14:25:30.035 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: Last message repeated 298 times Aug 31 14:25:30 sakana zlmediakit[76056]: 2025-08-31 14:25:30.035 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: Last message repeated 198 times Aug 31 14:25:30 sakana zlmediakit[76056]: 2025-08-31 14:25:30.375 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: 2025-08-31 14:25:30.377 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: 2025-08-31 14:25:30.936 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:30 sakana zlmediakit[76056]: Last message repeated 297 times Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:30.936 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:31 sakana zlmediakit[76056]: Last message repeated 198 times Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:31.570 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:31.570 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:31.570 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:31 sakana zlmediakit[76056]: Last message repeated 24 times Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:31.601 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 129 bytes of DTLS data ready to sent to the peer Aug 31 14:25:31 sakana zlmediakit[76056]: 2025-08-31 14:25:31.603 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:32 sakana zlmediakit[76056]: 2025-08-31 14:25:32.126 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:32 sakana zlmediakit[76056]: Last message repeated 274 times Aug 31 14:25:32 sakana zlmediakit[76056]: 2025-08-31 14:25:32.126 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:32 sakana zlmediakit[76056]: Last message repeated 295 times Aug 31 14:25:32 sakana zlmediakit[76056]: 2025-08-31 14:25:32.673 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:32 sakana zlmediakit[76056]: 2025-08-31 14:25:32.673 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:33 sakana zlmediakit[76056]: 2025-08-31 14:25:33.174 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:33 sakana zlmediakit[76056]: Last message repeated 367 times Aug 31 14:25:33 sakana zlmediakit[76056]: 2025-08-31 14:25:33.675 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:33 sakana zlmediakit[76056]: Last message repeated 293 times Aug 31 14:25:33 sakana zlmediakit[76056]: 2025-08-31 14:25:33.675 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:33 sakana zlmediakit[76056]: Last message repeated 34 times Aug 31 14:25:33 sakana zlmediakit[76056]: 2025-08-31 14:25:33.781 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:33 sakana zlmediakit[76056]: 2025-08-31 14:25:33.784 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:34 sakana zlmediakit[76056]: 2025-08-31 14:25:34.284 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:34 sakana zlmediakit[76056]: Last message repeated 408 times Aug 31 14:25:34 sakana zlmediakit[76056]: 2025-08-31 14:25:34.284 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:34 sakana zlmediakit[76056]: Last message repeated 388 times Aug 31 14:25:34 sakana zlmediakit[76056]: 2025-08-31 14:25:34.863 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:34 sakana zlmediakit[76056]: 2025-08-31 14:25:34.863 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.363 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: Last message repeated 387 times Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.363 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: Last message repeated 88 times Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.560 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.560 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: Last message repeated 126 times Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.907 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:35 sakana zlmediakit[76056]: 2025-08-31 14:25:35.908 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:36 sakana zlmediakit[76056]: 2025-08-31 14:25:36.408 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:36 sakana zlmediakit[76056]: Last message repeated 388 times Aug 31 14:25:36 sakana zlmediakit[76056]: 2025-08-31 14:25:36.408 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:36 sakana zlmediakit[76056]: Last message repeated 311 times Aug 31 14:25:36 sakana zlmediakit[76056]: 2025-08-31 14:25:36.948 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:36 sakana zlmediakit[76056]: 2025-08-31 14:25:36.949 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.449 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:37 sakana zlmediakit[76056]: Last message repeated 333 times Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.449 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:37 sakana zlmediakit[76056]: Last message repeated 267 times Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.909 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 129 bytes of DTLS data ready to sent to the peer Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.937 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.937 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:37 sakana zlmediakit[76056]: Last message repeated 92 times Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.977 W [MediaServer] [76056-event poller 0] MediaSink.cpp:68 operator() | Cached frame of unready track(H264) is too much, now cleared Aug 31 14:25:37 sakana zlmediakit[76056]: 2025-08-31 14:25:37.977 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:37.977 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:38 sakana zlmediakit[76056]: Last message repeated 7 times Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.057 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:271 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.059 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.059 W [MediaServer] [76056-event poller 0] SrtpSession.cpp:246 DecryptSrtp | srtp_unprotect() failed:replay check failed (bad index) (srtp_err_status_replay_fail) Aug 31 14:25:38 sakana zlmediakit[76056]: Last message repeated 295 times Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 D [MediaServer] [76056-event poller 0] MediaSink.cpp:196 emitAllTrackReady | All track ready use 10033ms Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 W [MediaServer] [76056-event poller 0] MediaSink.cpp:205 emitAllTrackReady | Track not ready for a long time, ignored: H264 Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 W [MediaServer] [76056-event poller 0] WebRtcSession.cpp:113 onError | 15-31(116.233.23.20:41006) 6(no vaild track data) Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:1284 removeTuple | wKgAFB+UH5Q=_1 remove tuple 116.233.23.20:41006 Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:203 OnIceServerDisconnected | wKgAFB+UH5Q=_1 Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.344 W [MediaServer] [76056-event poller 0] WebRtcPusher.cpp:133 onDestory | RTC推流器(__defaultVhost__/live/test)结束推流,耗时(s):10 Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.345 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:1394 OnSslInfo | sending DTLS warning alert: close notify Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.345 D [MediaServer] [76056-event poller 0] DtlsTransport.cpp:976 SendPendingOutgoingDtlsData | 31 bytes of DTLS data ready to sent to the peer Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.345 W [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:573 onSendSockData | send data failed:31 Aug 31 14:25:38 sakana zlmediakit[76056]: 2025-08-31 14:25:38.345 I [MediaServer] [76056-event poller 0] WebRtcTransport.cpp:561 ~WebRtcTransportImp | wKgAFB+UH5Q=_1 Aug 31 14:25:53 sakana zlmediakit[76056]: 2025-08-31 14:25:53.343 I [MediaServer] [76056-event poller 0] MediaSource.cpp:505 emitEvent | 媒体注销:rtsp://__defaultVhost__/live/test
FFmpeg推流开始至断开期间 FFmpeg的日志
sakana@sakana:~/live/ffmpeg-webrtc$ docker run --rm -it -v $(pwd):/app \ > parallelcc/ffmpeg-whip-whep:7.1.1 \ > -re \ > -f lavfi -i testsrc2=size=1920x1080:rate=60 \ > -vcodec libx264 \ > -b:v 200000k \ > -preset fast \ > -tune zerolatency \ > -f whip "https://<domain>:8086/index/api/whip?app=live&stream=test" ffmpeg version n7.1.1-2-ga4065faa79 Copyright (c) 2000-2025 the FFmpeg developers built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04) configuration: --pkg-config-flags=--static --extra-libs='-lpthread -lm' --ld=g++ --enable-gpl --enable-gnutls --enable-libaom --enable-libass --enable-libdav1d --e nable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 -- enable-nonfree --enable-libdatachannel libavutil 59. 39.100 / 59. 39.100 libavcodec 61. 19.101 / 61. 19.101 libavformat 61. 7.100 / 61. 7.100 libavdevice 61. 3.100 / 61. 3.100 libavfilter 10. 4.100 / 10. 4.100 libswscale 8. 3.100 / 8. 3.100 libswresample 5. 3.100 / 5. 3.100 libpostproc 58. 3.100 / 58. 3.100 Input #0, lavfi, from 'testsrc2=size=1920x1080:rate=60': Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0: Video: wrapped_avframe, yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 60 tbn Stream mapping: Stream #0:0 -> #0:0 (wrapped_avframe (native) -> h264 (libx264)) Press [q] to stop, [?] for help [libx264 @ 0x5640b53f0a00] using SAR=1/1 [libx264 @ 0x5640b53f0a00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0x5640b53f0a00] profile High, level 6.1, 4:2:0, 8-bit Output #0, whip, to 'https://<domain>:8086/index/api/whip?app=live&stream=test': Metadata: encoder : Lavf61.7.100 Stream #0:0: Video: h264, yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200000 kb/s, 60 fps, 90k tbn Metadata: encoder : Lavc61.19.101 libx264 Side data: cpb: bitrate max/min/avg: 0/0/200000000 buffer size: 0 vbv_delay: N/A [libdatachannel] rtc::impl::IceTransport::LogCallback@390: juice: Ignoring candidate with transport TCP [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 3 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 2 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 1 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 2 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 2 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 2 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 1 (over 1 seconds) [libdatachannel] rtc::impl::LogCounter::operator++@29: Number of SRTCP replay packets received: 1 (over 1 seconds) [libdatachannel] rtc::impl::IceTransport::LogCallback@390: juice: Lost connectivity [vost#0:0/libx264 @ 0x5640b53f0540] Error submitting a packet to the muxer: End of file [https @ 0x5640b53ed5c0] HTTP error 404 Not Found [whip @ 0x5640b53efac0] Failed to delete session: Server returned 404 Not Found [out#0/whip @ 0x5640b53ef980] video:27710KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown frame= 239 fps=5.5 q=0.0 Lsize=N/A time=00:00:03.98 bitrate=N/A speed=0.0923x [libx264 @ 0x5640b53f0a00] frame I:2 Avg QP: 0.53 size:138063 [libx264 @ 0x5640b53f0a00] frame P:264 Avg QP: 1.43 size:118643 [libx264 @ 0x5640b53f0a00] mb I I16..4: 87.4% 4.0% 8.6% [libx264 @ 0x5640b53f0a00] mb P I16..4: 1.2% 0.1% 0.3% P16..4: 4.3% 3.4% 2.7% 0.0% 0.0% skip:88.0% [libx264 @ 0x5640b53f0a00] final ratefactor: -12.81 [libx264 @ 0x5640b53f0a00] 8x8 transform intra:5.6% inter:6.4% [libx264 @ 0x5640b53f0a00] coded y,uvDC,uvAC intra: 18.3% 20.2% 20.1% inter: 5.5% 8.3% 8.3% [libx264 @ 0x5640b53f0a00] i16 v,h,dc,p: 94% 4% 1% 0% [libx264 @ 0x5640b53f0a00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 18% 47% 7% 3% 2% 3% 6% 2% [libx264 @ 0x5640b53f0a00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 18% 26% 10% 6% 7% 7% 9% 4% [libx264 @ 0x5640b53f0a00] i8c dc,h,v,p: 84% 5% 11% 0% [libx264 @ 0x5640b53f0a00] Weighted P-Frames: Y:0.0% UV:0.0% [libx264 @ 0x5640b53f0a00] ref P L0: 68.5% 31.5% [libx264 @ 0x5640b53f0a00] kb/s:57018.54
配置
展开查看详细配置
; auto-generated by mINI class { [api] apiDebug=1 defaultSnap=./www/logo.png downloadRoot=./www secret=IM1SG9gJpcdCl4KJfaJ41QBqAglilfrn 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 -i %s -y -f mjpeg -frames:v 1 -an %s [general] broadcast_player_count_changed=0 check_nvidia_dev=1 enableVhost=0 enable_ffmpeg_log=0 flowThreshold=1024 listen_ip=:: maxStreamWaitMS=15000 mediaServerId=your_server_id mergeWriteMS=0 resetWhenRePlay=1 streamNoneReaderDelayMS=20000 unready_frame_cache=100 wait_add_track_ms=3000 wait_audio_track_data_ms=1000 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=0 on_flow_report= on_http_access= on_play= on_publish= on_record_mp4= on_record_ts= on_rtp_server_timeout= on_rtsp_auth= on_rtsp_realm= on_send_rtp_stopped= on_server_exited= on_server_keepalive= on_server_started= on_shell_login= on_stream_changed= on_stream_none_reader= on_stream_not_found= retry=1 retry_delay=3.0 stream_changed_schemas=rtsp/rtmp/fmp4/ts/hls/hls.fmp4 timeoutSec=10 [http] allow_cross_domains=1 allow_ip_range=0.0.0.0-255.255.255.255,::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:94be50e/%aI,branch:,build time:2025-07-26T07:55:13)</center></body></html> port=8085 rootPath=./www sendBufSize=65536 sslport=8086 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=15000 enable_audio=1 enable_fmp4=0 enable_hls=0 enable_hls_fmp4=0 enable_mp4=0 enable_rtmp=0 enable_rtsp=1 enable_ts=0 fmp4_demand=0 hls_demand=1 hls_save_path=./www modify_stamp=2 mp4_as_player=0 mp4_max_second=3600 mp4_save_path=./www paced_sender_ms=1000 rtmp_demand=1 rtsp_demand=0 ts_demand=1 [record] appName=record enableFmp4=0 fastStart=0 fileBufSize=65536 fileRepeat=0 sampleMS=500 [rtc] bfilter=0 datachannel_echo=1 externIP=<domain> maxRtpCacheMS=5000 maxRtpCacheSize=2048 max_bitrate=0 min_bitrate=0 nackIntervalRatio=1.0 nackMaxCount=15 nackMaxMS=3000 nackMaxSize=2048 nackRtpSize=8 port=8084 preferredCodecA=PCMA,PCMU,opus,mpeg4-generic preferredCodecV=H264,H265,AV1,VP9,VP8 rembBitRate=0 start_bitrate=0 tcpPort=8084 timeoutSec=5 [rtmp] directProxy=1 enhanced=0 handshakeSecond=15 keepAliveSecond=15 port=8083 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 merge_frame=1 opus_pt=100 port=10000 port_range=30000-35000 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=554 rtpTransportType=-1 sslport=0 [shell] maxReqSize=1024 port=0 [srt] latencyMul=4 passPhrase= pktBufSize=8192 port=9000 timeoutSec=5 ; } ---
各种环境信息
- 代码提交记录/git commit hash: Linux 94be50e / Windows f524a0e
- 操作系统及版本: Ubuntu 20.04.6 LTS (Hyper-V) / Windows Server 2022 Datacenter 21H2 (在Linux虚拟机内或Windows宿主机或其他更强性能电脑上均可以复现此问题, i7-13700KF机器上启动ZLMediaKit约需要15K码率可复现SRTP及推流切断问题)
- 硬件信息: i5-8259U / 8G
- crash backtrace:
未产生崩溃
- 其他需要补充的信息: 各日志文件对比时可能存在UTC时区与UTC+8时区转换问题
使用OBS推流约20s后推流被断开 ,因为你开了无人观看自动,服务端自动断开,而你obs又重连
感谢您及时回复,我们这边又测试了以下几种情况:
情况1
当推流软件(OBS/FFmpeg)与ZLMediaKit位于同一系统内时,若配置文件中externIP置空或填写127.0.0.1或解析到本地的域名,不会出现srtp_err_status_replay_fail相关的错误,且更高的码率(测试30k / 200k kbps)都可以稳定推流,但无法从公网观看,SDP中地址为ZLMediaKit所在主机的局域网IP。本地可以通过ZLMediaKit的webrtc测试网页观看。
情况2
当推流软件(OBS/FFmpeg)与ZLMediaKit位于同一系统内时,若配置文件中externIP填写服务器外网域名或公网IP,则会持续出现srtp_err_status_replay_fail错误,低码率下可以通过webrtc测试网页观看,高码率由于主机编码性能有限没有测试。
情况3
推流软件(OBS)与ZLMediaKit位于OpenVPN下的同一局域网内,推流主机hosts文件中设置对应域名解析到ZLMediaKit主机的OpenVPN局域网内地址,srtp_err_status_replay_fail错误仅会间歇性出现,但仍会出现断流情况。ZLMediaKit主机可以通过webrtc测试网页观看。
也就是目前测试下来,只有在同一系统内运行推流和ZLMediaKit,且externIP置空时,才能保证不出现srtp_err_status_replay_fail错误且稳定推流,是否可以麻烦提供进一步的排查思路或解决方案?谢谢!
这个问题应该是由于rtp大量的乱序、重传导致了srtp的防重放攻击保护机制触发了 zlm是先进行srtp的解密,然后进行rtp的排序 这样可能会比较容易触发这个机制 如果先rtp排序,应该能减缓这个问题
zlm这个代码 这里修改下试试,把1024加大:
zlm这个代码 这里修改下试试,把1024加大:
![]()
经测试后问题仍然存在,将此处window_size值根据libsrtp中逻辑设置为32767 (0x8000 - 1)后通过GitHub Actions编译,Windows平台测试,OBS和zlm分别运行在不同主机上,zlm配置文件相对默认配置仅更改端口号和externIP,仍然会出现srtp_err_status_replay_fail及OBS切断问题。
使用Docker部署zlm时仍然会出现srtp_err_status_replay_fail 错误。但在网页端设置preferred_tcp=1即使用WebRTC over TCP时网页端推流和播放都不会出现srtp的错误。但使用OBS和FFmpeg使用WHIP推流时,当tcp和udp的candidate同时出现,只会使用udp进行传输;若将配置中rtc.port置0即只使用tcp的情况下,OBS和FFmpeg均无法连接。
docker会丢udp包是比较常见的问题
是否有除zlm网页外第三方客户端使用webrtc over tcp进行推流的方案?