(180 ringing)连接呼叫时没有铃声 android pjsip (pjsua2)
(180 ringning)No ringing tone while connecting call android pjsip (pjsua2)
我已经使用 PJSIP(PJSUA2) 实现了一个 VOIP 项目。
一切正常,但我打电话给某人时没有听到铃声。但是另一端,他正在接电话。
这里,我们无法判断呼叫正在连接到另一个。
请帮帮我。谢谢。
自己生成音调。您可以使用 android.media.ToneGenerator。像这样:
ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, 100);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_NETWORK_USA_RINGBACK, 1000);
编辑
您可以在notifyCallState中获取CallInfo。
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 的处理程序。为此创建助手 class。
更好的方法是使用 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) { }
}
您可以使用媒体播放器循环播放您的自定义音调。
将 AudioManager 模式设置为 MODE_IN_COMMUNICATION
我已经使用 PJSIP(PJSUA2) 实现了一个 VOIP 项目。
一切正常,但我打电话给某人时没有听到铃声。但是另一端,他正在接电话。
这里,我们无法判断呼叫正在连接到另一个。
请帮帮我。谢谢。
自己生成音调。您可以使用 android.media.ToneGenerator。像这样:
ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, 100);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_NETWORK_USA_RINGBACK, 1000);
编辑
您可以在notifyCallState中获取CallInfo。
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 的处理程序。为此创建助手 class。
更好的方法是使用 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) { }
}
您可以使用媒体播放器循环播放您的自定义音调。
将 AudioManager 模式设置为 MODE_IN_COMMUNICATION