Transmisión de audio en tiempo real
Quiero tener una funcionalidad de streaming de audio en tiempo real en el dispositivo android que está captando el audio a través de la MIC del dispositivo y enviarlo al servidor. Sé enviar un archivo de audio después de la grabación pero en caso de tiempo real necesito ayuda. Puede ser que se puede hacer mediante el envío de matriz de bytes continuamente al servidor. Si es así, ¿cómo o si cualquier otra forma, Por favor comparta sus ideas. Gracias.
EDITAR-
- Reproducción de vídeo mediante la clase MediaPlayer
- Cómo adjuntar MediaPlayer con SurfaceView en android?
- ¿Qué significa MediaPlayer info / warning (973, 0)?
- El tipo mime de la salida de grabación de audio se establece como video
- Android Media Player no jugará después de la parada
Código del cliente de Android: –
public class Main extends Activity { private MediaRecorder recorder; private final String TAG = "AudioTest"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String hostname = "192.168.50.25"; int port = 2004; Socket socket = null; try { socket = new Socket(InetAddress.getByName(hostname), port); } catch (UnknownHostException e) { Log.d(TAG, "Inside UnknownHostException@@@@@@@@@@@@@@@@@@@@@@"); e.printStackTrace(); } catch (IOException e) { Log.d(TAG, "Inside IOException%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); e.printStackTrace(); } ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(pfd.getFileDescriptor()); try { Log.i(TAG, pfd.getFileDescriptor().toString()); } catch (Exception e) { Log.d(TAG, "Inside MyException################################"); } try { recorder.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } recorder.start(); }
JAVA Server Code-
public class Provider { ServerSocket providerSocket; Socket connection = null; ObjectOutputStream out; ObjectInputStream in; String message; Provider() { } void run() { try { // 1. creating a server socket providerSocket = new ServerSocket(2004, 10); // 2. Wait for connection System.out.println("Waiting for connection"); connection = providerSocket.accept(); System.out.println("Connection received from " + connection.getInetAddress().getHostName()); // 3. get Input and Output streams out = new ObjectOutputStream(connection.getOutputStream()); out.flush(); in = new ObjectInputStream(connection.getInputStream()); sendMessage("Connection successful"); // 4. The two parts communicate via the input and output streams do { try { message = (String) in.readObject(); System.out.println("client>" + message); if (message.equals("bye")) sendMessage("bye"); } catch (ClassNotFoundException classnot) { System.err.println("Data received in unknown format"); } } while (!message.equals("bye")); } catch (IOException ioException) { ioException.printStackTrace(); } finally { // 4: Closing connection try { in.close(); out.close(); providerSocket.close(); } catch (IOException ioException) { ioException.printStackTrace(); } } } void sendMessage(String msg) { try { out.writeObject(msg); out.flush(); System.out.println("server>" + msg); } catch (IOException ioException) { ioException.printStackTrace(); } } public static void main(String args[]) { Provider server = new Provider(); while (true) { server.run(); } } }
- Android: Reproducción de video de MediaPlayer sin golpes o sin problemas
- Reproductor de medios Android Reiniciar audio después de llamar a Stop
- Android: Reproducción y grabación simultánea de vídeo
- Archivo de audio de streaming en Android no funciona un android 2.3
- ¿Cómo implementar un reproductor de audio para Android usando MediaPlayer y MediaController?
- Android MediaPlayer getCurrentPosition () hace que el audio tartamudea
- ¿Qué es AwesomePlayer en android?
- ¿Por qué mediaPlayer.seekTo (msec) no actualiza surfaceView cuando mediaPlayer está pausado?
Usted puede utilizar sockets como tal:
String hostname = "1.2.3.4"; int port = 865; Socket socket = null; try { socket = new Socket(InetAddress.getByName(hostname), port); } catch (Exception e) { e.printStackTrace(); } ParcelFileDescriptor socketedFile = ParcelFileDescriptor.fromSocket(socket);
A continuación, establezca el archivo socketed en el archivo de salida (socketedFile.getFileDescriptor ()) del grabador de audio. Esto lo enviará como bytes.
Alternativamente, para que sea más estable, escriba los datos del MediaRecorder en un búfer local y luego haga que un hilo separado verifique ese búfer y escríbalo al socket en su lugar, para permitir pequeñas desconexiones en la conexión de socket.
Vea esta pregunta para más información: streaming de audio de Android al servidor
Obviamente, entonces necesita tener una aplicación que se ejecuta en un servidor para recibir sus bytes y convertirlo en datos de audio.
- Android: ¿Cómo rastrear si el teclado virtual está abierto?
- RxJava y Sqlbrite – qué operador utilizar