Files
ZLMediaKit/webrtc
Talus 46842e6f29 修复WebRTC播放导致媒体延迟注销问题 (#2246)
因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通信
2023-02-20 16:23:29 +08:00
..
2021-04-01 11:42:40 +08:00
2022-12-30 08:51:37 +03:00
2022-02-02 20:34:50 +08:00
2021-04-09 20:44:47 +08:00
2021-11-15 10:40:31 +08:00
2021-04-09 20:44:47 +08:00
2021-04-01 11:42:40 +08:00
2021-04-01 11:42:40 +08:00
2022-06-18 21:09:57 +08:00
2022-09-18 21:03:05 +08:00
2022-11-29 11:07:13 +08:00
2022-11-18 16:47:02 +08:00
2022-09-18 21:03:05 +08:00
2022-09-18 21:03:05 +08:00
2022-11-29 11:07:13 +08:00
2022-06-18 14:34:58 +08:00
2022-11-29 11:07:13 +08:00
2022-08-05 17:42:17 +08:00
2022-07-26 00:04:03 +08:00
2022-11-29 11:07:13 +08:00
2021-04-09 20:44:47 +08:00
2022-11-29 11:07:13 +08:00
2022-11-29 11:07:13 +08:00
2022-11-30 18:24:35 +08:00
2022-11-30 18:24:35 +08:00
2022-11-29 11:07:13 +08:00
2022-12-02 14:43:06 +08:00
2022-12-15 19:17:09 +08:00
2022-12-02 14:43:06 +08:00

致谢与声明

本文件夹下部分文件提取自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