Me mandaron esto del instituto y creo que seria interesante compartir esta clase con ustedes, asi contribuyo un poquito ^^. Asi mientras todos hagamos esto, cumplimos con esa frase muy sonada y buena: "Ningún problema debería resolverse 2 veces".
Esta clase se encarga de mantenerse en escucha a la emisora de streaming que le digamos con el método setSource, y devuelve por pantalla el título de las canciones que esta ha reproducido.
La URL debe apuntar al stream directamente y no al playlist. Ha sido probada con servidores como shoutcast y icecast ( y el que usa M80 radio para emitir que no me acuerdo en estos momentos ) Para poner al programa en escucha se llama al método startLog.
Los comentarios los tengo escritos en ingles, pero he añadido una linea mas para los que lo quieran leer en español.
El codigo aqui:
Código
/** * Lectura de tags de streams de audio. * * 16BITBoy */ import java.io.BufferedInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.*; public class StreamTitles { /** * @param args */ StreamTitleLog log = new StreamTitleLog(); //Especificamos la emisora a escuchar | Set stream URL. try { // TODO Auto-generated catch block e.printStackTrace(); } //Que empiece el registro ;) | Start logging. try { log.startLog(); // TODO Auto-generated catch block e.printStackTrace(); } } } class StreamTitleLog { //Default constructor public StreamTitleLog(){ } this.url = url; } return url; } StringBuilder buffer = new StringBuilder(); while(true){ while(is.available() < 0){ continue; } buffer.append((char)is.read()); if(buffer.charAt(buffer.length() - 1) == '\''){ buffer.deleteCharAt(buffer.length() - 1); titles.add(buffer.toString()); break; } } } ArrayList<Character> buffer = new ArrayList<Character>(); //This is the get header info we need to send in order to retrieve stream titles //Esta es la info de cabecera del get que necesitamso enviar para recibir los titulos uc.setRequestProperty("Connection", "close"); uc.setRequestProperty("icy-metadata", " 1"); uc.setRequestProperty("transferMode.dlna.org", "Streaming"); //El metodo, como una videoconsola trata a un mando de juegos a la espera de //una combinacion de botones. Esa combinación será que cada uno de los caracteres //llegue al stream, si solo llega uno, tres o casi todos no nos sirve, lo queremos entero //This method is like trying to retrieve the desired sequence of button presses. //If the sequence does not match at some point, buffer is cleared. while(true){ while(is.available() < 0){ continue; } buffer.add((char)is.read()); if(buffer.get(buffer.size() - 1) == tag.charAt(buffer.size() - 1)){ if(buffer.size() == tag.length()){ getTitle(is); buffer.clear(); } } else{ buffer.clear(); } } } }
Espero que os sea de alguna utilidad. Saludos