Transmisión de voz sobre tcp
He codificado una aplicación que transmite audio a través de TCP de cliente a servidor, pero no funciona, es decir, no hay salida audible. ¿Podría comprobar mi código me dicen lo que está mal con él?
Cliente:
- ¿Cómo mantener una conexión TCP establecida indefinidamente?
- Escritura de audio en el servidor a través de un socket TCP
- Descodificación de H264 streaming usando android de bajo nivel api
- ¿Cómo los sockets TCP / IP de Java informan sobre el éxito o el fallo de la transmisión en la aplicación?
- Obtener la puerta de enlace predeterminada mediante programación utilizando getHostAddress () de la clase InetAddress
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()); } }
Servidor:
Public void startStreaming () {Thread streamThread = new Thread (nuevo 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);
Por favor, dame tu mejor ayuda.
- ANDROID - Enviar una captura de pantalla de java a android via tcp socket
- No se puede conectar Android ADB a TCP / IP
- React-native-tcp no funciona en Android 7+
- Cómo hacer que dos dispositivos Android se comuniquen a través de TCP
- La pila TCP XBox 360 no responde a sondas TCP Zero Window con una carga útil de 0 bytes
- ¿Por qué HttpURLConnection de Android no devuelve FIN?
- Android cómo enviar y recibir imagen y ubicación (usando mapa) en el chat de grupo usando xmpp-smack
- Mejores prácticas de la conexión TCP de Android
Las respuestas están en los comentarios. Tanto para el servidor como para el cliente read () / write () debían implementarse mejor.