我们正在使用PJSIP开发VoIP应用程序。内部核心模块使用C ++ 11,外部UI使用Java。以下是C ++ 11线程的创建:
iOS / MAC应用程序中也存在相同的C ++ 11模块,它可以正常工作。 Android应用也运行良好,但语音质量并不总是很好 [注意:我们排除了内置的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,因为,如果我们打电话:
任何帮助都将非常感激,如果它解决了问题,赏金将得到回报。 (我已经在1月12日左右开始获得赏金,但在此期间没有回复/评论)
答案 0 :(得分:0)
此问题可能不是由于PJSIP或Android中的多线程。实际上我们用来连接移动设备和服务器的TLS隧道是TCP,这对于发送RTP数据来说是个不错的选择。
但是,我不知道iOS和Mac如何设法产生如此好的音质。
说了这些,下面的选项确实有助于降低语音质量问题:
const int optionValue = 1; // `int` is preferred
(void) ::setsockopt(m_ID, IPPROTO_TCP, TCP_NODELAY, &optionValue, sizeof(optionValue));
在this article中了解有关TCP_NODELAY标志的更多信息。