我正在尝试在 android 中将流媒体直播到服务器。我的程序运行良好。
开始流的方法是:
private void startStreaming() {
Thread startRecord = new Thread(
new Runnable() {
@Override
public void run() {
try {
socket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
buffer = new byte[minBufSize];
DatagramPacket packet;
try {
destination = InetAddress.getByName("10.31.0.12");
} catch (UnknownHostException e) {
e.printStackTrace();
}
record = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize * 10);
record.startRecording();
while ( status )
{
minBufSize = record.read(buffer,0,buffer.length);
packet = new DatagramPacket(buffer,buffer.length,destination,port);
Log.d(LOG,"Writing in status " + destination );
try {
Log.d(LOG, "Trying to send. " + minBufSize);
socket.send(packet);
Log.d(LOG, "Sent successfully.");
} catch (IOException e) {
Log.d(LOG,"Socket is not sending properly.");
e.printStackTrace();
}
}
}
}
);
startRecord.start();
}
停止录音的方法:
public void stopRecording(View view) {
start.setVisibility(View.VISIBLE);
stop.setVisibility(View.GONE);
status = false;
Log.d(LOG,"I am about to release the record.");
record.release();
Log.d(LOG, "I have released.");
}
我正在使用
获取 minBufSize minBufSize = record.read(buffer,0,buffer.length);
如果我不停地停下来播放录音,minBufSize
会不断减少。
值从 1280 变为 512 变为 256 变为 -3 最后我得到:
java.lang.NegativeArraySizeException: -3 at
com.example.khan.safevoicerecorder.MainActivity$1.run(MainActivity.java:81)
为什么会这样?请帮我解决这个问题。
最佳答案
您使用当前的 minBufSize
创建了 buffer
。然后,您的循环会读取一段时间:minBufSize = record.read(buffer,0,buffer.length)
。由于读取最多为 buffer.length
字节,您现在可能已经减小了 minBufSize
。
下次您开始录制时,您的缓冲区将使用新的、更小的 minBufSize
创建。同样,读取最多为 buffer.length
字节(现在比上次小)。
冲洗并重复——最终,您会得到一个非常小的缓冲液。我猜这会给你 -3 错误值。最后,当 minBufSize
为 -3
时,您的 buffer
分配将失败;数组的大小不能为负数。
关于java - BufferSize 在 android AudioRecord 中减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048847/