mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 19:00:01 +08:00
46842e6f29
因WebRtcPlayer中使用RtspMediaSource的共享指针,特定情况下引起媒体注销无法触发的问题。 - 重现步骤 在ZL的webrtc demo页面推流 浏览器打开如下html webrtc.html 关闭推流器页面,推流器停止推流 webrtc.htm浏览器console->network将观察到:即使推流停止,但webrtc sdp请求一直能成功获取sdp,且流媒体一直不注销 - 原因 因为每个WebRtc 播放 SDP请求都会产生 WebRtcPlayer,产生RtspMediaSource的共享指针,产生强引用。 而DTLS超时释放需要一定的时间,WebRtcPlayer销毁需要超时。如果请求sdp的时间足够短,强引用会一直存在。将永远无法触发媒体注销 - 场景 webrtc播放存在重试,但是udp不通。DTLS无法创建 有人对ZLM执行恶意攻击,短时间内不断请求SDP但是不建立WebRTC通信 |
||
---|---|---|
.. | ||
answer.sdp | ||
CMakeLists.txt | ||
DtlsTransport.cpp | ||
DtlsTransport.hpp | ||
IceServer.cpp | ||
IceServer.hpp | ||
janus_answer.sdp | ||
janus_offer.sdp | ||
logger.h | ||
Nack.cpp | ||
Nack.h | ||
offer-simulcast.sdp | ||
offer.sdp | ||
readme.md | ||
RtpExt.cpp | ||
RtpExt.h | ||
SctpAssociation.cpp | ||
SctpAssociation.hpp | ||
Sdp.cpp | ||
Sdp.h | ||
SrtpSession.cpp | ||
SrtpSession.hpp | ||
StunPacket.cpp | ||
StunPacket.hpp | ||
TwccContext.cpp | ||
TwccContext.h | ||
Utils.hpp | ||
WebRtcEchoTest.cpp | ||
WebRtcEchoTest.h | ||
WebRtcPlayer.cpp | ||
WebRtcPlayer.h | ||
WebRtcPusher.cpp | ||
WebRtcPusher.h | ||
WebRtcSession.cpp | ||
WebRtcSession.h | ||
WebRtcTransport.cpp | ||
WebRtcTransport.h |
致谢与声明
本文件夹下部分文件提取自MediaSoup ,分别为:
-
ice相关功能:
- IceServer.cpp
- IceServer.hpp
- StunPacket.cpp
- StunPacket.hpp
- Utils.hpp
-
dtls相关功能:
- DtlsTransport.cpp
- DtlsTransport.hpp
-
srtp相关功能:
- SrtpSession.cpp
- SrtpSession.hpp
-
datachannel相关功能:
- SctpAssociation.cpp
- SctpAssociation.hpp
以上源码有一定的修改和裁剪,感谢MediaSoup开源项目及作者, 用户在使用本项目的同时,应该同时遵循MediaSoup的开源协议。
同时,在此也感谢开源项目easy_webrtc_server 及作者, 在集成MediaSoup相关代码前期,主要参考这个项目。
另外,感谢big panda 开发并贡献的webrtc js测试客户端(www/webrtc目录下文件), 其开源项目地址为:https://gitee.com/xiongguangjie/zlmrtcclient.js