【发布时间】:2015-07-18 14:41:05
【问题描述】:
我编写了一个应用程序,通过 TCP 将音频从客户端流式传输到服务器,但它不起作用,即没有声音输出。你能检查我的代码告诉我它有什么问题吗?
客户:
public void startStreaming() {
Thread streamThread = new Thread(new Runnable() {
@Override
public void run() {
try {
int minBufSize =AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
Log.d("VD ", "Bufer intioalised "+minBufSize);
short[] buffer=new short[minBufSize];
Log.d("VS","Buffer created of size .c" + minBufSize);
// DatagramPacket packet;
final InetAddress destination = InetAddress.getByName(target.getText().toString());
port=Integer.parseInt(target_port.getText().toString());
Socket socket=new Socket(destination,port);
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
Log.d("VS", "Address retrieved.c");
if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize);
Log.d("VS", "Recorder initialized.c");}
if (recorder.getState() == AudioRecord.STATE_INITIALIZED){
Log.d("VS", "Recorder working....c");
recorder.startRecording();}
BufferedWriter input;
while(status == true) {
//reading data from MIC into buffer
int bufferReadResult = recorder.read(buffer, 0, buffer.length);
dos.write(buffer,0,bufferReadResult);
dos.flush();
}
} catch(UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
Log.e("IOException message:",e.getMessage().toString());
}
}
服务器:
公共无效 startStreaming() { 线程streamThread = new Thread(new Runnable() {
@Override
public void run() {
try {
int minBufSize =1024;//recorder.getMinBufferSize(sampleRate,channelConfig,audioFormat);
ServerSocket serversocket = new ServerSocket(50005);
// DatagramSocket socket = new DatagramSocket(50005);
byte[] buffer = new byte[1024];
if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {
speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM);
speaker.play();
Log.d("VR", "spekaer playing...");
}
// }
Log.d("VR", ""+status);
BufferedReader input;
InputStream is;
ObjectInputStream ois;
ByteArrayInputStream baiss;
socket = serversocket.accept();
DataInputStream dis=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
while(status == true) {
//DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
InputStream in = socket.getInputStream();
Log.d("content :", socket.getOutputStream().toString());
int i=0;
while (dis.available() > 0 && i < buffer.length) {
buffer[i]=(byte) dis.readShort();
i++;
}
speaker.write(buffer,0,buffer.length);
请给我你最好的帮助。
【问题讨论】:
-
请停止编辑我的问题。帮我解决这个问题
-
请先解释一下这应该如何工作。然后解释哪些部分工作正常。然后准确地解释你遇到的问题。完成后,我们将查看代码。
-
你好。 tnx to replyaing...我现在有点工作了。我整晚都在更改我的代码。所以它现在正在工作,但仍然存在问题。问题是它太吵了。有语音转换但太爱管闲事。所以我编辑了我的第一篇文章给你看。谢谢。
-
请先解释一下这应该如何工作。然后解释哪些部分工作正常。然后准确地解释你遇到的问题。完成后,我们将查看代码。
-
服务器监听特定端口客户端获取服务器的ip然后连接到它。DataOutputStream获取套接字信息。客户端开始录制并放入缓冲区。然后将其刷新到服务器。当客户端连接时,服务器正在侦听特定端口。DataOutputStream 获取客户端的套接字信息,然后播放语音。难以逐步解释