2015-06-20 4 views
4

Я реализовал проект для VOIP с использованием PJSU (PJSUA2).(180 звонков) Нет сигнала вызова при подключении вызова android pjsip (pjsua2)

Все в порядке, но я не слышу звонкий звук, когда я звоню кому-то. Но другой конец, он получает звонок.

Здесь мы не можем судить, что звонок подключается к другому.

Пожалуйста, помогите мне. Спасибо.

ответ

5

Создайте тон самостоятельно. Вы можете использовать android.media.ToneGenerator. Что-то вроде этого:

ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, 100); 
toneGenerator.startTone(ToneGenerator.TONE_CDMA_NETWORK_USA_RINGBACK, 1000); 

EDIT

Вы можете получить CallInfo в notifyCallState.

CallInfo ci = call.getInfo(); 
if (ci.getState() == pjsip_inv_state.PJSIP_INV_STATE_EARLY 
    && ci.getRole() == pjsip_role_e.PJSIP_ROLE_UAC 
    && ci.getLastReason().equals("Ringing")) { 
    toneGeneratorHelper.startRingBack(); 
} else { 
    toneGeneratorHelper.stopRingBack(); 
} 

И для повторения тона вы можете использовать обработчик с postDelayed. Создайте для этого вспомогательный класс.

+0

Благодарим за сообщение. Да, я использовал его. но как получить 180 из CallInfo. и Tone не повторяется ни разу (цикл). –

+0

Я отредактировал ответ. – manao

+0

Я делал это только вчера. Ваш ответ правильный и принят. Спасибо, приятель. Давайте будем друзьями, вы дали мне ответ много раз. –

0

Лучший способ сделать это - использовать библиотеку pjsua2. При этом я хочу пропустить Android API и сделать следующее:

import org.pjsip.pjsua2.ToneDesc; 
import org.pjsip.pjsua2.ToneDescVector; 

private ToneDesc toneDesc; 
private org.pjsip.pjsua2.ToneGenerator toneGenerator; 
private ToneDescVector toneDescVector; 

public class RINGBACK_TONES { 
     public final static int kSPRingbackFrequency1 = 440, 
       kSPRingbackFrequency2 = 480, 
       kSPRingbackOnDuration = 1000, 
       kSPRingbackOffDuration = 4000, 
       kSPRingbackCount = 1, 
       kSPRingbackInterval = 4000; 
    } 

protected synchronized void startRingbackTone() { 

     toneDesc = new ToneDesc(); 
     toneGenerator = new org.pjsip.pjsua2.ToneGenerator(); 
     toneDescVector = new ToneDescVector(); 

     toneDesc.setFreq1((short) RINGBACK_TONES.kSPRingbackFrequency1); 
     toneDesc.setFreq2((short) RINGBACK_TONES.kSPRingbackFrequency2); 
     toneDesc.setOn_msec((short) RINGBACK_TONES.kSPRingbackOnDuration); 
     toneDesc.setOff_msec((short) RINGBACK_TONES.kSPRingbackOffDuration); 

     toneDescVector.add(toneDesc); 

     try { 
      toneGenerator.createToneGenerator(); 
      toneGenerator.play(toneDescVector, true); 
      toneGenerator.startTransmit(Endpoint.audDevManager().getPlaybackDevMedia()); 

     } catch (Exception ex) { } 
} 

protected synchronized void stopRingbackTone() { 

    try { 
     if (toneGenerator != null) 
      toneGenerator.stop(); 
     toneGenerator = null; 

    } catch (Exception ex) { } 

}