使用Android.net.rtp开始发送Voip会延迟几秒钟

时间:2016-02-06 09:30:07

标签: java android voip rtp

我实现了一个Android应用程序,该应用程序使用了Android.net.rtp库中的Voip。 它只是从设备麦克风获取语音并将其发送到Voip(发送到另一个Android或PC接收器)。 问题是在某些设备上,voip trasmission在2-3秒后开始。我并不是说传送数据包有2-3秒的延迟,我的意思是没有发出前2-3秒的声音。在这2-3秒之后一切正常。 奇怪的是它只发生在一些Android设备上,它不是设备性能或Android版本的问题。例如,它发生在一个非常旧的设备和一个新的设备上,而它不会发生在另一个非常旧的设备和另一个新的设备... 我想到了一些延迟麦克风捕获的Android服务/功能,但我现在没有发现任何东西......

在下面,我用来发送Voip的代码,它是一个经典的代码:

myAudioStream = new AudioStream(myIPAddress);
myAudioStream.setCodec(AudioCodec.PCMU);
myAudioGroup = new AudioGroup();
myAudioManager = (AudioManager) myContext.getSystemService(Context.AUDIO_SERVICE);

myAudioGroup.setMode(RtpStream.MODE_SEND_ONLY);
myAudioStream.join(null);
myAudioStream.setMode(RtpStream.MODE_SEND_ONLY);
myAudioStream.associate(ipAddress_Receiver, port_Receiver);
myAudioStream.join(myAudioGroup);
myAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
myAudioManager.setSpeakerphoneOn(false);
myAudioManager.setMicrophoneMute(false);

2 个答案:

答案 0 :(得分:0)

检查您是否可以在Android.net.rtp中禁用ICE和/或STUN。这些通常是媒体设置延迟的原因。

答案 1 :(得分:0)

经过一些调试后,我发现AudioManager在setMode调用中引入了延迟:

myAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION))

奇怪的是它取决于设备。对于某些设备,它也可以引入2-3秒,而其他设备没有引入延迟。

见类似的答案: Is there any significant delay in initializing AudioTrack on Android?

最后我找到了这个解决方案,设置:

myAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

在我班级的构造函数中,然后只有一次。当我没有启动语音TX时,我在启动我的App时调用了costructor。 通过这种方式,当我不得不说话时,我不必放松那些秒......

希望对其他人有用。