I want to have a live audio streaming function on an Android device that captures audio through the device’s MIC and sends it to the server. I know to send sending an audio file after recording, but in case of real time I need help. Maybe this can be done by sending an array of bytes constantly to the server. If so, in what way or in some other way, share your ideas. Thank you
EDIT -
Android Client Code: -
public class Main extends Activity { private MediaRecorder recorder; private final String TAG = "AudioTest"; @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(); } } }
source share