因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通信
| Name |
Last commit
|
Last Update |
|---|---|---|
| .github | 正在载入提交数据... | |
| 3rdpart | 正在载入提交数据... | |
| Android | 正在载入提交数据... | |
| api | 正在载入提交数据... | |
| cmake | 正在载入提交数据... | |
| conf | 正在载入提交数据... | |
| docker | 正在载入提交数据... | |
| package/rpm | 正在载入提交数据... | |
| player | 正在载入提交数据... | |
| postman | 正在载入提交数据... | |
| server | 正在载入提交数据... | |
| src | 正在载入提交数据... | |
| srt | 正在载入提交数据... | |
| tests | 正在载入提交数据... | |
| webrtc | 正在载入提交数据... | |
| webrtc_player/android | 正在载入提交数据... | |
| www | 正在载入提交数据... | |
| .clang-format | 正在载入提交数据... | |
| .gitattributes | 正在载入提交数据... | |
| .gitignore | 正在载入提交数据... | |
| .gitmodules | 正在载入提交数据... | |
| .gitmodules_github | 正在载入提交数据... | |
| AUTHORS | 正在载入提交数据... | |
| CMakeLists.txt | 正在载入提交数据... | |
| LICENSE | 正在载入提交数据... | |
| README.md | 正在载入提交数据... | |
| README_en.md | 正在载入提交数据... | |
| build_docker_images.sh | 正在载入提交数据... | |
| default.pem | 正在载入提交数据... | |
| dockerfile | 正在载入提交数据... | |
| k8s_readme.md | 正在载入提交数据... | |
| sources.list | 正在载入提交数据... | |
| version.h.ini | 正在载入提交数据... |