【问题标题】:WebRtc Native-Crashed when I call peerconnection->Close()当我调用 peerconnection->Close() 时 WebRtc Native-Crashed
【发布时间】:2023-04-05 07:38:02
【问题描述】:

如何关闭或破坏 PeerConnectionInterface 对象?当我尝试这样做时它崩溃了。

我有一个这样声明的对象: rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;

我通过工厂创建 PeerConnectionInterface 后它工作正常。

但是,当会话结束并且我尝试调用 _peerConnection->Close();程序崩溃了。

我也尝试调用 _peerConnection.release()->Release();也崩溃了。

我在WebRtc源码的PeerConnection.cc中打印日志,发现这里crash了,在Close()函数和~PeerConnection()函数中:

webrtc_session_desc_factory_.reset(); //PeerConnection.cc

声明为 std::unique_ptr<WebRtcSessionDescriptionFactory> webrtc_session_desc_factory_;

于是我继续登录WebRtcSessionDescriptionFactory.cc,~WebRtcSessionDescriptionFactory()函数。在这个函数中崩溃:FailPendingRequests()。

进入FailPendingRequests()函数:

RTC_DCHECK(signaling_thread_->IsCurrent());
  while (!create_session_description_requests_.empty()) {
    const CreateSessionDescriptionRequest& request =
        create_session_description_requests_.front();
    //Crashed here in third or fourth loop
    PostCreateSessionDescriptionFailed(request.observer,
        ((request.type == CreateSessionDescriptionRequest::kOffer) ?
            "CreateOffer" : "CreateAnswer") + reason);
    create_session_description_requests_.pop();
  }

如果有任何建议,我将不胜感激!

【问题讨论】:

    标签: webrtc peer-connection


    【解决方案1】:

    在实现 Kurento Library 时,我在 iOS 中遇到了同样的问题。解决此问题的关键是以正确的方式处置资源。

    我遵循的步骤:

    创作顺序:

    创建的 WebRTCPeer 对象

    创建 RoomClient 对象

    RoomClient 连接后,生成 SDP Offer。

    等等。

    处置顺序:

    首先断开 RoomClient。

    密切关注 WebRTC 事件中的“RTCIceConnectionState”、“RTCIceGatheringState”。

    一旦“RTCIceConnectionState”关闭且iceGatheringState为“RTCIceGatheringStateComplete”,则处理WebRTCPeer对象。

    这样问题就解决了,否则资源被初始化,主对象被释放,导致崩溃。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多