我实现了一个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);
答案 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。 通过这种方式,当我不得不说话时,我不必放松那些秒......
希望对其他人有用。