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

时间:2016-03-24 00:38:09

标签: java android multithreading webrtc libjingle

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

我们有一个用于android的webrtc本机应用程序,在调用peerconnectionfactory的配置时会遇到困难。当用户选择结束活动会话时,我们有一个清理例程,关闭对等连接,然后处理它(虽然关闭并不是必需的,因为对dispose的调用也会在释放其他资源之前关闭连接 - 例如,例如流和本地观察者 - 参见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),他们似乎没有此问题。

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

此外,在审查铬webrtc问题列表时,我们看到几个问题(例如,https://bugs.chromium.org/p/webrtc/issues/detail?id=3100或4196)导致人们相信需要采取相对于线程/循环模型的特殊关注在使用peerconnectionfactory时使用。

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

感谢,

1 个答案:

答案 0 :(得分:5)

所以,事实证明,线程不是问题,我可以告诉通过代码跟踪等等。问题是我们有一个私有类实现了SDPObserver,PCObserver和DataObserver以及其他一些逻辑。

这样做的结果是,当初始化对等连接时,实现所有观察者(以及其他一些逻辑)的类作为观察者传递,并作为本机观察者记录在libjingle中,因此,调用处理peerconnection导致释放本机观察者,导致PCObserver不仅被释放(在libjingle peerconnection.dispose()中),但是因为对我们来说,它是同一个类,所有东西都被释放了 - 导致了当其他班级被认为仍在那里时会崩溃。

因此,为每个观察者重写单独的私有类并正确地将相应的观察者传递给对等连接创建(以及适合于不同调用的sdp / data观察者)然后所有工作 - dispose只释放PCObserver而且所有都是好。