2011-12-20 23 views
7

Mi piacerebbe capire come funziona il socket, in particolare ho bisogno di alcuni esempi di codice per il lato server per ricevere lo stream inviato dal mediarecorder dal dispositivo.android stream audio al server

Grazie mille per qualsiasi aiuto.

Il mio vero intento finale è quello di parlare in dispositivo e ascoltarlo su PC, solo una direzione.

Al momento sono in grado di inviare il flusso utilizzando il seguente codice:

String hostname = "192.168.1.10"; 
int port = 8000; 
Socket socket = null; 
    try { 
     socket = new Socket(InetAddress.getByName(hostname), port); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     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 { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

recorder.start(); 
+0

Che lingua stai usando sul PC? – Axis

+0

Uso la piattaforma .NET, vb.net o C# è la stessa. – Giuseppe

risposta

4

sembra ok, ma io personalmente preferisco per tamponare l'audio sul dispositivo e la invia al server da un altro thread invece di legare il registratore alla presa direttamente come hai fatto tu. Perché il buffering localmente ti permetterà di gestire le interruzioni di connessione con garbo.

Immagina di registrare e l'utente passa attraverso un tunnel e perde la connessione a Internet: se lo streaming è diretto, il socket si chiude e l'utente si infastidisce :-) Tuttavia, se esegui il buffering dei dati in locale , è possibile ristabilire la connessione e continuare a inviare l'audio al server da dove si era interrotto, e si spera che l'utente non debba nemmeno sapere che è appena avvenuta un'interruzione nella connessione, perché funziona solo magicamente.

Per farlo funzionare, è necessario scrivere la registrazione su un buffer locale e avere un controllo di thread separato per i nuovi dati su quel buffer e inviarlo al server il prima possibile.

+2

qualche punto di esempio? – Giuseppe