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
..
answer.sdp answer sdp通过chrome校验 2021-04-01 11:42:40 +08:00
CMakeLists.txt Build without usrsctp 2022-12-30 08:51:37 +03:00
DtlsTransport.cpp 整理命名空间 (#1409) 2022-02-02 20:34:50 +08:00
DtlsTransport.hpp 添加版权信息 2021-04-09 20:44:47 +08:00
IceServer.cpp RTC: 删除过多stun包日志 2021-11-15 10:40:31 +08:00
IceServer.hpp 添加版权信息 2021-04-09 20:44:47 +08:00
janus_answer.sdp answer sdp通过chrome校验 2021-04-01 11:42:40 +08:00
janus_offer.sdp answer sdp通过chrome校验 2021-04-01 11:42:40 +08:00
logger.h MS_ASSERT改成抛异常 2022-06-18 21:09:57 +08:00
Nack.cpp 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
Nack.h Header refactor (#2115) 2022-11-29 11:07:13 +08:00
offer-simulcast.sdp 完善simulcast接收及处理 2021-06-24 11:39:55 +08:00
offer.sdp 适配webrtc AV1编码: #2091 2022-11-18 16:47:02 +08:00
readme.md 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
RtpExt.cpp 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
RtpExt.h 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
SctpAssociation.cpp Header refactor (#2115) 2022-11-29 11:07:13 +08:00
SctpAssociation.hpp 添加bom头 2022-06-18 14:34:58 +08:00
Sdp.cpp 修复手机推rtc,其他协议拉流画面旋转 2022-12-08 21:52:55 +08:00
Sdp.h Header refactor (#2115) 2022-11-29 11:07:13 +08:00
SrtpSession.cpp 调整switch case语句缩进 2022-08-05 17:42:17 +08:00
SrtpSession.hpp 避免对外传递 srtp 依赖 2022-07-26 00:04:03 +08:00
StunPacket.cpp Header refactor (#2115) 2022-11-29 11:07:13 +08:00
StunPacket.hpp 添加版权信息 2021-04-09 20:44:47 +08:00
TwccContext.cpp 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
TwccContext.h Header refactor (#2115) 2022-11-29 11:07:13 +08:00
Utils.hpp Header refactor (#2115) 2022-11-29 11:07:13 +08:00
WebRtcEchoTest.cpp 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
WebRtcEchoTest.h 整理webrtc相关代码命名空间 2022-09-18 21:03:05 +08:00
WebRtcPlayer.cpp 修复WebRTC播放导致媒体延迟注销问题 (#2246) 2023-02-20 16:23:29 +08:00
WebRtcPlayer.h 修复WebRTC播放导致媒体延迟注销问题 (#2246) 2023-02-20 16:23:29 +08:00
WebRtcPusher.cpp 修正代码拼写错误 2022-11-30 18:24:35 +08:00
WebRtcPusher.h 修正代码拼写错误 2022-11-30 18:24:35 +08:00
WebRtcSession.cpp Header refactor (#2115) 2022-11-29 11:07:13 +08:00
WebRtcSession.h Unified code style (#2137) 2022-12-02 14:43:06 +08:00
WebRtcTransport.cpp avoid bug for #2159 2022-12-15 19:17:09 +08:00
WebRtcTransport.h Unified code style (#2137) 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