gpt4 book ai didi

java - 是 webRTC 原生 Android 应用程序所需的特定线程模型

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:07 25 4
gpt4 key购买 nike

首先,我不清楚引用其他代码的链接是否合适,如果是的话,我深表歉意,并且想了解对于我引用库的这种情况,更合适的机制可能是什么(这些链接主要作为引用提供给感兴趣的各方)。

我们有一个适用于 Android 的 webrtc native 应用程序,在调用 peerconnectionfactory 的处置时遇到困难。当用户选择结束 Activity session 时,我们有一个清理例程来关闭对等连接然后处理它(尽管关闭并不是真正必要的,因为对处理的调用也会在释放其他资源之前关闭连接 - 例如,例如流和 native 观察器 - 请参阅 libjingle - talk/app/webrtc/java/src/org/webrtc/PeerConnection.java )。在我们的例子中,peerconnectionfactory 的创建是由通过 runnable 创建的线程执行的,而工厂的处理是从主 UI 线程执行的。

这就是我们遇到问题的地方 - 即,当尝试处理 peerconnectionfactory 时,应用程序崩溃了。

在查看与 webRTC 演示代码相关的帖子时(参见 https://chromium.googlesource.com/external/webrtc/+/master/webrtc/examples/androidapp/src/org/appspot/apprtc),他们似乎没有这个问题。

此外,在查看对等连接工厂实现的 native 代码时(请参阅 https://code.google.com/p/chromium/codesearch#chromium/src/third_party/webrtc/api/peerconnectionfactory.cc 中的 peerconnectionfactory.cc),我们看到对等连接工厂析构函数的工作线程的展开和删除。

此外,在查看 chromium webrtc 问题列表时,我们看到了几个问题(例如 https://bugs.chromium.org/p/webrtc/issues/detail?id=3100 或 4196),这些问题导致人们认为需要特别注意在以下情况下使用的线程/循环模型:使用 peerconnectionfactory。

所以,我的基本问题是,从不同的线程创建 peerconnectionfactory 时是否存在问题,而不是处理 peerconnectionfactory,以及是否有一组特定的线程/循环要求来管理 peerconnectionfactory。

谢谢,

最佳答案

所以,事实证明,线程不是问题,至于我可以通过代码等告诉跟踪的最好情况。问题是我们有一个实现 SDPObserver、PCObserver 和 DataObserver 的私有(private)类以及其他一些逻辑。

这样做的结果是,当对等连接被初始化时,实现所有观察者(和一些其他逻辑)的类被作为观察者传递,并被记录为 libjingle 中的 native 观察者,因此,调用处理 peerconnection 导致释放 native 观察者,这不仅导致 PCObserver 被释放(在 libjingle peerconnection.dispose() 中)而且因为对我们来说,它是同一个类,所有东西都被释放 - 导致当假定其他类仍然存在时崩溃。

因此,为每个观察者使用单独的私有(private)类进行重新设计,并正确地将适当的观察者传递给 peerconnection 创建(以及 sdp/data 观察者,以适应不同的调用),然后所有工作 - 处理只是释放 PCObserver,一切都是好。

关于java - 是 webRTC 原生 Android 应用程序所需的特定线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com