Autore Topic: Streaming  (Letto 646 volte)

Offline Arpanet

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 5
  • Sistema operativo:
    Mac OS X
Streaming
« il: 08 Febbraio 2014, 13:44:19 CET »
0
Salve sono nuovo (come potete vedere dal post count)

Sono incappato un un problema non da poco, un mio amico mi ha chiesto se potevo fargli un'applicazione per inviare la propria voce a un server di shoutcast.
Ora il problema e' che non trovo un manuale o una guida che mi spieghi in che modo shoutcast riceve i dati il tipo di protocollo ecc.

Voi sapete dove posso trovare informazioni ?

Grazie

Offline Arpanet

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 5
  • Sistema operativo:
    Mac OS X
Re:Streaming
« Risposta #1 il: 18 Febbraio 2014, 11:35:55 CET »
0
Salve di nuovo
Aggiorno il problema con maggiori informazioni dopo svariate ricerche.

Premetto che shoutcast accetta solo pacchetti TCP, dopo aver letto questo reply su stackoverflow audio - Broadcast to Icecast / SHOUTcast with Objective-C, C, or C++ - Stack Overflow
sono riuscito egregiamente a collegarmi e autenticarmi in shoutcast nel seguente modo

(non copiero' tutto il codice ma solo le parti dei vari passaggi se occorrerà' copierò il resto)

Codice (Java): [Seleziona]
   
public static final String SERVERIP = "192.168.0.188";
public static final int SERVERPORT = 8001;
public static Socket socket;

socket = new Socket(SERVERIP, SERVERPORT);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));


//invio la password
out.write("changeme\r\n");
out.flush( );


//invio header
String line = null;
                while ((line = in.readLine( )) != null) {
                    if (line.contains("OK2")) {
                        // We are now logged in.
                        out.write("icy-name:Arpa\r\n" );
                        out.write("icy-genre:ArpaStyle\r\n"  );
                        out.write("icy-pub:1\r\n"  );
                        out.write("icy-br:24\r\n"  );
                        out.write("icy-url:\r\n" );
                        out.write("icy-irc:\r\n"  );
                        out.write("icy-icq:\r\n"  );
                        out.write("icy-aim:\r\n"  );
                        out.write("content-type:audio/mpeg\r\n" );
                        out.write("\r\n\r\n\r\n" );
                        out.flush( );
                   
                        break;
                    }
                   
                }

A questo punto sono collegato al server shoutcast, il server mi dice che e' pronto a ricevere client e flusso ed ora il problema ...
inserisco il codice e spiego cosa succede.

Codice (Java): [Seleziona]
                int frequency = 44100;
                int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
                int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
                DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));

                 int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration,audioEncoding);
                AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);
               
                byte[] buffer = new byte[bufferSize];
                audioRecord.startRecording();
 
                while (mRun) {
                       
                               int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
                               //Log.d("int",""+bufferReadResult);
                               for (int i = 0; i < bufferReadResult; i++)
                               {
                                dos.writeByte(buffer[i]);
                                dos.flush();
                               
                               }
         
               
                }

qui shoutcast si comporta nel seguente modo, riceve un flusso , ma quando mi collego con vlc/itunes e simili sento solo un gran sibilo gracchiante.
il log del server vede perfettamente che un client sta ascoltando.

ovviamente sbaglio a inviare il flusso .. ma non riesco a trovare una soluzione.

Ringrazio per ogni aiuto che potete darmi

Grazie

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Streaming
« Risposta #2 il: 18 Febbraio 2014, 18:08:35 CET »
0
Ho solo esaminato velocemente il codice. Comunichi un content type come audio mpeg e poi gli invii dei dati codificati in PCM a 16 bit, sentire dei sibili gracchianti è il minimo. Ci deve essere coerenza tra quello che dichiari di inviare e quello che invii.

Inviato dal mio Nexus 5 utilizzando Tapatalk
« Ultima modifica: 19 Febbraio 2014, 12:40:52 CET da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG