moin
ich bin hier schon am verzeifeln, vielleicht weiß einer von euch weiter
hat jemand mit dem lesen von mp3 metainformationen aus nem icecast stream? ich frickel hier schon stunden rum, aber bekomm nie was brauchbares raus.
ich orientiere mich an folgender anleitung
- = [ AMPLE - An MP3 LEnder ] = -
das ist kein code für den lifebetrieb, ist zum test runtergebrochen, aber der theorie nach müsste es doch klappen, oder?
der metaint wert ist definitiv 16000, das bekomme ich aus dem header. also warum bekommt man nach diesem schema nichts brauchbares raus?? jemand ne idee?? ist das auslesen des längenbytes für die metainf richtig? oder die konvertierung von byte in den string?
*edit*
oh, wohl falsches thema, kann ja dann bitte verschoben werden
ich bin hier schon am verzeifeln, vielleicht weiß einer von euch weiter
hat jemand mit dem lesen von mp3 metainformationen aus nem icecast stream? ich frickel hier schon stunden rum, aber bekomm nie was brauchbares raus.
ich orientiere mich an folgender anleitung
- = [ AMPLE - An MP3 LEnder ] = -
Java:
public static void getDamnMetaInf() throws IOException {
final String url = "http://ws.stream.radio11.co.uk:8000/1";
InputStream stream = new URL(url).openStream();
int metaInt = 16000; // vorher aus dem header mit icy-metaint ermittelt
byte[] soundBuffer = new byte[1];
byte[] metaInfBlockLength = new byte[1];
while (true) {
int mp3Bytes = 0;
while (mp3Bytes < metaInt) {
mp3Bytes += stream.read(soundBuffer);
}
System.out.println("Read " + mp3Bytes + " bytes data"); // sollten 16000 sein
int readLength = stream.read(metaInfBlockLength);
System.out.println("Read " + readLength + " bytes metalength"); // sollte 1 sein
int metaBytes = signedByteToInt(metaInfBlockLength[0]) * 16; // wert des header-längen-bytes mal 16
System.out.println("Awaiting " + readLength + " bytes of metainf");
// wenn meta vorhanden ist
if (metaBytes > 0) {
byte[] metaBuffer = new byte[metaBytes];
int readMetaInf = stream.read(metaBuffer);
System.out.println("Read " + readMetaInf + " bytes meta");
String header = new String(metaBuffer);
System.out.println("Header: " + header);
}
}
}
public static int signedByteToInt(byte value) {
return (value & 0x7F) + (value < 0 ? 128 : 0);
}
das ist kein code für den lifebetrieb, ist zum test runtergebrochen, aber der theorie nach müsste es doch klappen, oder?
der metaint wert ist definitiv 16000, das bekomme ich aus dem header. also warum bekommt man nach diesem schema nichts brauchbares raus?? jemand ne idee?? ist das auslesen des längenbytes für die metainf richtig? oder die konvertierung von byte in den string?
*edit*
oh, wohl falsches thema, kann ja dann bitte verschoben werden
Zuletzt bearbeitet: