android - 音轨 : Playing sound coming in over WiFi

标签 android audio

我的应用程序中有一个 AudioTrack,它设置为 Stream 模式。我想编写通过无线连接接收到的音频。 AudioTrack 声明如下:

mPlayer = new AudioTrack(STREAM_TYPE,
                         FREQUENCY,
                         CHANNEL_CONFIG_OUT,
                         AUDIO_ENCODING,
                         PLAYER_CAPACITY,
                         PLAY_MODE);

参数定义如下:

private static final int FREQUENCY = 8000,
                         CHANNEL_CONFIG_OUT = AudioFormat.CHANNEL_OUT_MONO,
                         AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT,
                         PLAYER_CAPACITY = 2048,
                         STREAM_TYPE = AudioManager.STREAM_MUSIC,
                         PLAY_MODE = AudioTrack.MODE_STREAM;

但是,当我用 write() 向 AudioTrack 写入数据时,它会播放断断续续的......调用

byte[] audio = packet.getData();
mPlayer.write(audio, 0, audio.length);

每当通过网络连接接收到数据包时都会生成。有人知道为什么它听起来很不稳定吗?也许它与WiFi连接本身有关?我不这么认为,因为当我通过 UDP 从 Android 手机向另一个来源发送数据时,声音听起来并不可怕。然后声音听起来完整而且一点也不起伏...那么有人知道为什么会这样吗?

最佳答案

您知道每秒接收多少字节、数据包之间的平均时间比较以及数据包之间的最长时间吗?如果不是,你可以添加代码来计算它吗?

您需要平均 8000 个样本/秒 * 2 字节/样本 = 16,000 字节/秒才能保持流充满。

传入数据包之间的间隔超过 2048 字节/(16000 字节/秒)= 128 毫秒 将导致您的流干涸并且音频断断续续。

防止它的一种方法是增加 缓冲区大小 (PLAYER_CAPACITY)。较大的缓冲区将更能够处理传入数据包大小和速率的变化。额外稳定性的代价是在等待缓冲区最初填满时开始播放的延迟更大。

关于android - 音轨 : Playing sound coming in over WiFi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297923/

相关文章:

ios - AVQueuePlayer-在缓冲项目时保持事件状态

audio - 实时音频流容器格式

iPhone SDK : recording system sounds

android - Android RTSP 流媒体协议(protocol)支持多少种音频编解码器?

android - 如何在所有情况下保持 Android GridView 的位置?

Android Gps 保存了太多点

java - 如何在 Android 中将 ListView 文本右对齐?

android - Android MediaPlayer暂停流

使用 Urban Airship 的带标签的 Android 推送

java - 通过android应用程序获取执行命令的输出