0

基本想法是创建一个应用程序,该应用程序可以记录来自一个设备的音频,并使用套接字通过 Wlan 将其发送到另一个将播放它的设备。简而言之,一个局域网语音聊天程序。

我正在使用 AudioRecord 对象从麦克风录制实时音频,然后将录制的数据读入字节数组,然后将字节数组写入 TCP 套接字。接收设备然后从套接字读取该字节数组并将其写入 AudioTrack 对象的缓冲区。

就像是

录音-->字节数组-->socket--->LAN--->socket-->字节数组-->AudioTrack

使用 while 循环重复该过程。

尽管音频在那里播放,但它在帧之间存在滞后。即当我说你好时,接收者听到He-ll--O。虽然音频是完整的,但缓冲块之间存在延迟。

据我所知,延迟是由于局域网传输延迟

我该如何改进它?我应该使用什么方法才能像在 Skype 和 gtalk 等商业在线聊天应用程序中一样流畅?

4

1 回答 1

0

听起来你需要一个更长的缓冲区来处理局域网上音频传输的变化。为了解决这个问题,您可以在套接字字节数组和音轨之间创建一个中间缓冲区。您的缓冲区可以是 AudioTrack 对象中使用的缓冲区大小的 x 倍。所以是这样的:

Socket bytes -> Audio Buffer -> Buffer to get fed to Audio Track -> Audio Track

当音频开始录制时,不要播放任何内容,直到它完全填满较长的缓冲区。之后,您可以将音轨缓冲区大小的块提供给音轨对象。

于 2013-07-17T18:47:36.150 回答