Domanda

Ho un flusso da un server di download Icecast, e posso afferrare le informazioni nelle intestazioni facendo quanto segue:

 URLConnection cn = new URL(mediaUrl).openConnection();   
    cn.connect();   

    int pos=1;
    String x;
    String y;

mentre (cn.getHeaderField (pos)! = Null)         {    x = cn.getHeaderFieldKey (pos);    y = cn.getHeaderField (x);    Log.e ( ":::::", "" + x + ":" + y);    pos ++;         }

Quando faccio questo tutte le intestazioni che ricevo sono mostrati come:

Content-Type: audio / mpeg  ghiacciata-br: 64  ice-audio-info: ice-campionamento = 22050; ice-bitrate = 64; ghiaccio canali = 2  ghiacciata-br: 64  ghiacciata-Descrizione: RadioStation  ghiacciata-genere: classica, New Age, Ambient  ghiacciata-name: RadioStation Esempio  ghiacciata-privato: 0  ghiacciata-pub: 1  ghiacciata-url: http://exampleradio.com  server: Icecast 2.3.2  cache-control: no-cache

Tuttavia, se apro il mio flusso in mplayer ottengo:

 ICY Info: StreamTitle='artist - album - trackname' 

e ogni volta che la canzone è cambiata, le nuove informazioni traccia viene inviato appaiono allo stesso modo in MPlayer.

in Android quando tento di leggere il ghiaccio-info tutto quello che ottiene restituito è nullo. Inoltre come potrei fare per recuperare le nuove informazioni dalle intestazioni mentre sto il buffer dal flusso? Perché anche se cerco di leggere l'intestazione di una cosa che esiste già il know mentre il buffering come ad esempio:

  Log.e(getClass().getName()," "+cn.getHeaderField("icy-br"));

tutto quello che ottiene restituito è nullo.

Spero che questo ha un senso, non posso postare più codice su richiesta.

È stato utile?

Soluzione

Mi rendo conto che questa domanda è vecchia, ma per gli altri che si trovano ad affrontare questa sfida, io sto usando questo progetto: http://code.google.com/p/streamscraper/ per ottenere informazioni sulle tracce da un flusso di icecast. Lo sto usando su Android e finora funziona come previsto.

Altri suggerimenti

Tutto ciò che serve è quello di setDataSource () e passare l'URL come stringa, allora è necessario prepareAsync () e con un mp.setOnPreparedListener (questo); o ecc avrete notato che quando il MediaPlayer è fatto buffering, quindi tutto quello che dovete fare è mp.start (); P.S .: Non dimenticare di mp.stop, mp.reset e mp.release a distruggere l'applicazione. ;) Sto ancora pensando a un modo per leggere le informazioni ICY ... devo neanche fare il mio meccanismo di buffering e scrivere un file di buffer (init il MediaPlayer con FileDescriptor) o effettuare una connessione separata di tanto in tanto per verificare la presenza di informazioni ICY tag e chiudere la connessione ... meglio le idee a qualcuno?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top