ZLMediaKit / ZLMediaKit

WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11
https://docs.zlmediakit.com
Other
13.66k stars 3.37k forks source link

[技术咨询]webrtc拉流无法播放 #1277

Closed ibanezsc closed 2 years ago

ibanezsc commented 2 years ago

bug现象

2021-12-16 16:01:57.028 I MediaServer[121921-event poller 0] WebRtcSession.cpp:63 onRecv | 31-zlm_1(192.168.7.68:51696) 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] IceServer.cpp:350 HandleTuple | transition from state 'new' to 'completed' 2021-12-16 16:01:57.028 I MediaServer[121921-event poller 0] WebRtcTransport.cpp:79 OnIceServerSelectedTuple | 2021-12-16 16:01:57.028 I MediaServer[121921-event poller 0] WebRtcTransport.cpp:87 OnIceServerCompleted | 2021-12-16 16:01:57.028 I MediaServer[121921-event poller 0] WebRtcTransport.cpp:120 OnDtlsTransportConnecting | 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:738 Run | running [role:server] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1450 OnSslInfo | DTLS handshake start 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'before SSL initialization'] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1446 OnSslInfo | role: server, waiting:'before SSL initialization'] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'before SSL initialization'] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read client hello'] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write server hello'] 2021-12-16 16:01:57.028 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write key exchange'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write certificate request'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1446 OnSslInfo | role: server, waiting:'SSLv3/TLS write server done'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1016 SendPendingOutgoingDtlsData | 706 bytes of DTLS data ready to sent to the peer 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1054 SetTimeout | DTLS timer set in 99ms 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write server done'] 2021-12-16 16:01:57.029 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read client certificate'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read client key exchange'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read certificate verify'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read change cipher spec'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS read finished'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write change cipher spec'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1408 OnSslInfo | [role:server, action:'SSLv3/TLS write finished'] 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1454 OnSslInfo | DTLS handshake done 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1016 SendPendingOutgoingDtlsData | 67 bytes of DTLS data ready to sent to the peer 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1205 CheckRemoteFingerprint | valid remote fingerprint 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] DtlsTransport.cpp:1379 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM 2021-12-16 16:01:57.030 I MediaServer[121921-event poller 0] WebRtcTransport.cpp:109 OnDtlsTransportConnected | 2021-12-16 16:01:57.030 D MediaServer[121921-event poller 0] SrtpSession.cpp:78 DepLibSRTP | libsrtp version: "libsrtp2 2.3.0" 2021-12-16 16:02:00.683 W MediaServer[121921-event poller 0] EventPoller.cpp:218 onPipeEvent | take time:11ms, thread may be overloaded



**bug产生时的使用场景**
- obs进行rtmp推流:rtmp://192.168.6.198/live/test 
- webrtc拉流:https://192.168.6.198/index/api/webrtc?app=live&stream=test&type=play  出现一帧画面卡住不动
- 使用ffmpeg进行rtsp推流:ffmpeg    -re  -i  demo.mp4    -vcodec h264 -acodec aac -strict -2   -f rtsp -rtsp_transport udp  rtsp://192.168.6.198/live/test,
- webrtc拉流,https://192.168.6.198/index/api/webrtc?app=live&stream=test&type=play  ,画面转圈无图像;
- **webrtc推流和webrtc拉流正常**。

**bug是否可以复现,怎么复现**
- bug必现。使用如上。

**zlm代码git commit hash值**
- 4291c31

**操作系统环境**
ubuntu1804
xiongguangjie commented 2 years ago

rtc播放的流不能有B帧, ffmpeg可以新增参数 –bf 0, 或者干脆设置为baseline profile

ibanezsc commented 2 years ago

忽视了,obs推流禁用b帧确实可以正常播放了,但是ffmpeg的rtsp推流还是不行,不用b帧,画面转圈没有图像,但是可以rtsp/rtmp拉流播放成功。请问是本身不支持吗? 另外:如果单纯使用rtp推流,是否可以用webrtc|rtsp|rtmp拉流进行播放。如果能,需要怎么操作?谢谢

wasphin commented 2 years ago

忽视了,obs推流禁用b帧确实可以正常播放了,但是ffmpeg的rtsp推流还是不行,不用b帧,画面转圈没有图像,但是可以rtsp/rtmp拉流播放成功。请问是本身不支持吗? 另外:如果单纯使用rtp推流,是否可以用webrtc|rtsp|rtmp拉流进行播放。如果能,需要怎么操作?谢谢

需要在配置文件中设置 directProxy=0, ffmpeg 生成的 rtsp 流中不带 sps/pps 信息, webrtc 播放会有问题.

xia-chu commented 2 years ago

webrtc播放记得还需要设置配置文件的externIP

YukiYlf commented 2 years ago

大华摄像头,本身的rstp推流模式 http://default.zlmediakit.com/index/api/addStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=__defaultVhost__&app=live&stream=test&url=rtsp://admin:admin12345@192.168.0.108:554/cam/realmonitor?channel=1%26subtype=0

Zlm的 config.ini关键点配置 rstp:
directProxy=0

webrtc播放的时候 基本上10s就不行了

2022-03-06 14:28:21.553 D MediaServer[29493-event poller 2] DtlsTransport.cpp:1381 GetNegotiatedSrtpCryptoSuite | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM
2022-03-06 14:28:21.553 I MediaServer[29493-event poller 2] WebRtcTransport.cpp:112 OnDtlsTransportConnected |
2022-03-06 14:28:39.196 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:28:40.166 T MediaServer[29493-event poller 2] HttpSession.cpp:121 onError | 43(192.168.0.4:58152) session timeout
2022-03-06 14:28:40.167 T MediaServer[29493-event poller 2] HttpSession.cpp:33 ~HttpSession | 43(192.168.0.4:58152)
2022-03-06 14:28:44.167 T MediaServer[29493-event poller 2] HttpSession.cpp:121 onError | 29(192.168.0.4:50517) session timeout
2022-03-06 14:28:44.167 T MediaServer[29493-event poller 2] HttpSession.cpp:33 ~HttpSession | 29(192.168.0.4:50517)
2022-03-06 14:28:55.194 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)2022-03-06 14:29:12.631 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:29:13.326 T MediaServer[29493-event poller 3] HttpSession.cpp:27 HttpSession | 29(192.168.0.4:59442)
2022-03-06 14:29:13.327 T MediaServer[29493-event poller 3] HttpSession.cpp:27 HttpSession | 43(192.168.0.4:29283)
2022-03-06 14:29:13.448 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:29:23.229 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:29:24.268 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:29:44.179 T MediaServer[29493-event poller 3] HttpSession.cpp:121 onError | 43(192.168.0.4:29283) session timeout
2022-03-06 14:29:44.180 T MediaServer[29493-event poller 3] HttpSession.cpp:121 onError | 29(192.168.0.4:59442) session timeout
2022-03-06 14:29:44.180 T MediaServer[29493-event poller 3] HttpSession.cpp:33 ~HttpSession | 43(192.168.0.4:29283)
2022-03-06 14:29:44.180 T MediaServer[29493-event poller 3] HttpSession.cpp:33 ~HttpSession | 29(192.168.0.4:59442)
2022-03-06 14:29:54.656 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:29:58.824 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:30:15.791 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:30:55.906 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:30:57.722 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
    Last message repeated 2 times
2022-03-06 14:31:06.072 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:07.273 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:17.672 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:25.683 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:41.624 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:45.734 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
^C2022-03-06 14:31:45.734 W MediaServer[29493-event poller 2] SrtpSession.cpp:290 DecryptSrtcp | srtp_unprotect_rtcp() failed:replay check failed (bad index) (srtp_err_status_replay_fail)
2022-03-06 14:31:51.023 I MediaServer[29493-MediaServer] main.cpp:335 operator() | SIGINT:exit
xia-chu commented 2 years ago

@YukiYlf 看日志是解析rtcp失败,你是什么浏览器播放rtsp?

zhanpc commented 1 year ago

obs推流 webrtc拉流 无法播放 一直转圈 image

下面时一个报错 image

xia-chu commented 1 year ago

@zhanpc 可以提供下完整日志

zhanpc commented 1 year ago

@xia-chu 以下是ZlMediaKit的完整日志 目前分支master和tranceCode都试过 webrtc拉流 都是转圈圈 没有画面 完整日志.txt

xia-chu commented 1 year ago

@zhanpc 配置文件externIP不要设置为127.0.0.1 你要么不设置 要么设置为网卡ip或公网ip 不设置默认采用网卡ip

zhanpc commented 1 year ago

@xia-chu 不设置ip 网卡ip和 公网ip都试过了 webrtc拉流还是没有画面 以下是三种的日志 完整日志-不设置extenIP.txt 完整日志-公网ip.txt 完整日志-网卡ip.txt

Dw9 commented 1 year ago

rtpSession.cpp:214 SrtpSession | srtp_create() failed: unspecified failure (srtp_err_status_fail)

@zhanpc hi~ 你这个是srtp 编译的时候没有依赖 zlm使用的openssl导致的 参照wiki编译 或者知识星球里面有编译好的win程序https://github.com/ZLMediaKit/ZLMediaKit/wiki/zlm%E5%90%AF%E7%94%A8webrtc%E7%BC%96%E8%AF%91%E6%8C%87%E5%8D%97

fanlei199805 commented 10 months ago

我使用obs推流,webrtc无法拉流,是因为我docker安装的原因吗,试过以上的关闭obs的b帧,我使用srs时可以播放 报错.txt 下面是我的配置文件,请大佬看看,谢谢 config.txt