2015-01-09 3 views
4

Мы разрабатываем VoIP-приложение с использованием PJSIP. Внутренний основной модуль находится на C++ 11, а внешний интерфейс - на Java. После C++ 11 потоков создано:Проблема с качеством голоса в приложении Android VoIP с PJSIP

  1. Основной поток
  2. Observer нить, которая просыпается каждые 3 минуты и быстро идет к сна
  3. SSL Чтение + запись нить (SSL чтения сокет подключен через интернет-сервер)
  4. часть времени TCP поток, который является активным/неактивным для RESTful API (создает сокет на 9100)
  5. SIP поток, который соединяется с PJSIP (создает сокет на 5060)
  6. 2 потока RTP для каждого вызова (создает пару гнезд, например. 40000, 40001)

Тот же модуль C++ 11 также присутствует в приложении iOS/MAC, где он работает нормально. Приложение Android также отлично работает, но качество голоса не всегда хорошо.
[Примечание: Мы исключили встроенный стек Android SIP, поскольку он не поддерживает 3G.]

Я подозревал, что C++ 11 (всего 8) нити виновника, а также отвечал на вопрос:

Но это кажется удаленной возможностью для меня, потому что во время голосового вызова активно только 4 потока:
2 SSL + 2 RTP (Кроме того, он отлично работает в iOS. MacOS).

Сейчас мое подозрение на PJSIP, потому что, если мы делаем звонок из:

  1. App в App то качество передачи голоса 70 +% времени хорошо
  2. приложение для GSM, то качество передачи голоса всегда хорош на стороне приложения, но всегда сотрясается со стороны GSM.

Любая помощь будет высоко оценена, и если она исправит проблему, вознаграждение будет вознаграждено. (Я уже начал щедрость около 12 января, но в то время не было ответа/комментария)

ответ

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)); 

Подробнее о TCP_NODELAY флага в this article.

Смежные вопросы