Android:通过 TCP 套接字传输音频

2023-12-29

对于我的应用程序,我需要在 Android 手机上录制来自 MIC 的音频,并通过 TCP 将其发送到需要播放的另一部 Android 手机。

我在用AudioRecord and AudioTrack班级。这对于文件非常有效 - 使用以下命令将音频写入文件DataOutputStream,并使用它读取DataInputStream.

但是,如果我从套接字而不是文件获取相同的流,并尝试写入它,则会出现异常。

我不知道可能出了什么问题。任何帮助将不胜感激。

编辑:即使我尝试使用更大的缓冲区大小(65535 字节,160000 字节),问题也是一样的。

这是代码:

录音机:

int bufferSize = AudioRecord.getMinBufferSize(11025, , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioRecord recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);

byte[] tempBuffer = new byte[bufferSize];

recordInstance.startRecording();

while (/*isRecording*/) {
      bufferRead = recordInstance.read(tempBuffer, 0, bufferSize);
      dataOutputStreamInstance.write(tempBuffer);
}

上面的DataOutputStream的获取方式为:

BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff);

您能否看一下,让我知道我在这里可能做错了什么?

Thanks,


在一些帮助下,我得到了这个工作,但只是部分工作。

我从代码开始http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html,将 File 的流更改为 Socket 的流,并将 isAvailable() 更改为 if(inputStream.read(byteArray) != -1)。

现在正在通过 TCP 进行实时音频流传输。

However,

我在另一端听到的只是噪音,我现在正在寻找 AudioRecorder 和 AudioTrack 的正确参数集 - 频率、通道配置和编码、音频源等。

如果您对此有任何想法,请告诉我。

Thanks,

编辑: 对我来说这是一个愚蠢的错误。 除了我上面所说的之外,在播放器端使用 inputStream ,在记录器端使用 outputStream ,并使用字节数组而不是 Shorts ,它就会起作用。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:通过 TCP 套接字传输音频 的相关文章

随机推荐