ZLMediaKit icon indicating copy to clipboard operation
ZLMediaKit copied to clipboard

[BUG] WHIP推流高码率下自动断开问题

Open kirakiseki opened this issue 7 months ago • 9 comments

现象描述

使用多种方式(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输出设置

Image

使用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错误,一段时间后推流被切断,相关日志见下:

Image

相关日志或截图

由于相关日志较长,已上传至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时区转换问题

kirakiseki avatar Aug 31 '25 15:08 kirakiseki

使用OBS推流约20s后推流被断开 ,因为你开了无人观看自动,服务端自动断开,而你obs又重连

PioLing avatar Sep 01 '25 02:09 PioLing

Image ,试了下推25m 码率(比你的测试大10倍),测试了几分钟,没有出现你说的情况

PioLing avatar Sep 01 '25 03:09 PioLing

感谢您及时回复,我们这边又测试了以下几种情况:

情况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错误且稳定推流,是否可以麻烦提供进一步的排查思路或解决方案?谢谢!

kirakiseki avatar Sep 01 '25 14:09 kirakiseki

这个问题应该是由于rtp大量的乱序、重传导致了srtp的防重放攻击保护机制触发了 zlm是先进行srtp的解密,然后进行rtp的排序 这样可能会比较容易触发这个机制 如果先rtp排序,应该能减缓这个问题

xia-chu avatar Sep 02 '25 06:09 xia-chu

zlm这个代码 这里修改下试试,把1024加大:

Image

xia-chu avatar Sep 02 '25 06:09 xia-chu

zlm这个代码 这里修改下试试,把1024加大:

Image

经测试后问题仍然存在,将此处window_size值根据libsrtp中逻辑设置为32767 (0x8000 - 1)后通过GitHub Actions编译,Windows平台测试,OBS和zlm分别运行在不同主机上,zlm配置文件相对默认配置仅更改端口号和externIP,仍然会出现srtp_err_status_replay_fail及OBS切断问题。

kirakiseki avatar Sep 02 '25 10:09 kirakiseki

使用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均无法连接。

kirakiseki avatar Sep 02 '25 17:09 kirakiseki

docker会丢udp包是比较常见的问题

xia-chu avatar Sep 04 '25 09:09 xia-chu

是否有除zlm网页外第三方客户端使用webrtc over tcp进行推流的方案?

kirakiseki avatar Sep 05 '25 13:09 kirakiseki