【问题标题】:Random native crash in Webrtc peerconnection while disconnecting断开连接时Webrtc对等连接中的随机本机崩溃
【发布时间】:2017-05-30 23:01:38
【问题描述】:

我正在使用 webrtc 进行视频通话。我的用例是我一个接一个地连接到队列中的用户。因此连接到 user1,结束与 user1 的连接,然后连接到 user2,依此类推。

有时在与用户断开连接并处理对等连接时,我会遇到本机崩溃

E/rtc(6882): #\
05-26 17:30:44.374: E/rtc(6882): # Fatal error in ../../webrtc/sdk/android/src/jni/peerconnection_jni.cc, line 1074\
05-26 17:30:44.374: E/rtc(6882): # last system error: 17\
05-26 17:30:44.374: E/rtc(6882): # Check failed: 0 == (reinterpret_cast<PeerConnectionInterface*>(j_p))->Release() (0 vs. 1)\
05-26 17:30:44.374: E/rtc(6882): # Unexpected refcount.\
05-26 17:30:44.374: E/rtc(6882): #\

此崩溃非常随机地发生,据我猜测是某些东西在处理时保留了对 peerconnection 的引用。

这是我处理对等连接的代码,我正在为新连接重用本地媒体流。

videoCapturer.stopCapture();
if (peerConnection != null) {
        peerConnection.close();
        peerConnection.removeStream(localMediaStream);
        peerConnection.dispose();
        peerConnection = null;
}

上面的 sn-p 是处理对等连接的正确方法吗?这次崩溃的随机性可能是什么原因?泄露的引用是在 Java 层还是原生层?

【问题讨论】:

    标签: android android-ndk webrtc


    【解决方案1】:

    如果您从同一个工厂创建多个 peerConnections 并处理它们,则这些崩溃是预期的。

    解决方法:停止释放 peerConnection,因为peerConnection.dispose(); 会破坏本地流等。
    只需使用peerConnection.close(); 并仅将peerConnection.dispose(); 用于最终的peerConnection 对象。

    为错误加注星标 75437691 以获取此更新

    【讨论】:

    • 嗯,我确实从同一个工厂创建了多个对等连接,但不应该只这样做吗?如果我不处置 peerConnection,将检查内存使用情况如何受到影响,因为我预计会创建大量 peerConnections(有时超过 20 个)。
    • 不,如果您在最后处理,它不会泄漏任何内存。见chromium.googlesource.com/external/webrtc/+/master/webrtc/sdk/…
    猜你喜欢
    • 2017-11-21
    • 2014-10-13
    • 2019-04-16
    • 2023-04-07
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多