我通过Android.net.rtp库实现了一个使用Voip的安卓应用程序。它只需从设备话筒中获取声音,并以Voip方式(发送到另一个Android或PC接收器)。问题是,在某些设备上,voip传输在2-3秒后开始。我并不是说在传送数据包时有2-3秒的延迟,我的意思是前2-3秒的语音没有发送。在那2-3秒之后,一切都正常了。奇怪的是,它只发生在某些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);发布于 2016-10-18 16:21:49
经过一些调试后,我发现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时,我在启动我的应用程序时调用了构造函数。这样的话,当我需要说话的时候,我就不用浪费时间了.
希望对其他人有用。
发布于 2016-02-10 23:58:40
检查是否可以在Android.net.rtp中禁用ICE和/或眩晕。这些通常是媒体设置延迟的原因。
https://stackoverflow.com/questions/35239422
复制相似问题