我们正在使用PJSIP开发一款VoIP应用程序。内部核心模块采用C++11编写,外部UI采用Java编写。以下是创建的C++11线程:
[注:我们排除了内置的Android SIP堆栈,因为它不支持3G。]
我怀疑C++11(共8个)线程是罪魁祸首,并发布了一个问题:
c++11 multithreading issues with Android where some threads are not scheduled properly
但对我来说这似乎是一个遥远的可能性,因为在语音通话期间只有4个线程主要活跃:
2个SSL + 2个RTP(此外,在iOS和MacOS上也可以正常工作)。
现在我的怀疑在PJSIP上,因为如果我们从以下方式进行呼叫:
- 主线程
- 观察者线程,每3分钟唤醒一次,然后快速休眠
- SSL读写线程(SSL读取套接字通过互联网连接到服务器)
- 兼职TCP线程,用于RESTful API的活动/非活动状态(在9100上创建套接字)
- SIP线程,与PJSIP连接(在5060上创建套接字)
- 每个呼叫2个RTP线程(创建套接字对,例如40000、40001)
[注:我们排除了内置的Android SIP堆栈,因为它不支持3G。]
我怀疑C++11(共8个)线程是罪魁祸首,并发布了一个问题:
c++11 multithreading issues with Android where some threads are not scheduled properly
但对我来说这似乎是一个遥远的可能性,因为在语音通话期间只有4个线程主要活跃:
2个SSL + 2个RTP(此外,在iOS和MacOS上也可以正常工作)。
现在我的怀疑在PJSIP上,因为如果我们从以下方式进行呼叫:
- 应用程序到应用程序,则语音质量70+%的时间都很好
- 应用程序到GSM,则语音质量始终在应用程序端良好,但在GSM端始终会出现抖动