shoutcast stream auslesen

cesupa

Erfahrenes Mitglied
Hallo,

ich versuche gerade das shoutcast protokoll etwas näher zu verstehen. Dazu sende ich erstmal ein GET-Request an einen shoutcastserver und schau mir dann die Antwort des Servers an. Wenn ich das richtig verstanden habe, kommt da zu erst der Header mit allen Infos und gleich danach die mp3-daten. Die mp3-daten habe ich mir mal in eine Datei gespeichert und mal über Audacious ausgeben lassen. Leider kommt da nicht wie erhofft Musik, sondern nur mist raus. Muss ich mit den empfangenen Daten noch irgendwas machen, um eine ordentliche mp3-file zu erzeugen?

Ich arbeite mit QT unter Linux (Ubuntu) und lese den stream wie folgt aus:

Code:
void radio_stream::readStream()
{
	qDebug()<<"Reading..."<<saving;
	char buf[16000];
	int n=s->read(buf,sizeof(buf)-1);   //Daten empfangen
	buf[n]='\0';
	if(saving)                                          //Header überspringen, sodass nur mp3-daten gespeichert werden
			out<<buf;
	else
		saving=true;
	qDebug()<<buf;                              //empfangene Daten noch in Konsole ausgeben
}

Schöne Grüße
cesupa
 

Anhänge

Hallo,

Also:
Erstmal zu deinem Anhang:
Bei mir kommt immer "Unerwartetes Archivende". Bitte mal prüfen.

So und nun zu dem Empfagen der Daten.

Ich habe auch mal nen Programm geschrieben das nen Radio-Stream aufzeichnet.

Dazu habe ich lediglich zu der Adresse verbunden und alle eingehenden Daten in eine .mp3 Datei geschrieben. Hat alles wunderbar funktioniert.

Zu dem Shoutcast-Protokoll habe ich leider nichts gefunden, hast du mal nen Link?

Gruß
Anfänger
 
Hi,

also die zip kann ich im Nachhinein wunderbar öffnen, hab jetzt auch momentan kein andres prog, um die nochmal zu packen.

Wenn du aber alle eingehenden Daten speicherst, dann hast du ja auch die Headerinfos mit drin, die meiner Meinung nach Probleme beim Abspielen bringen dürften. Aber ansonsten mache ich das ja auch so, ich speichere die MP3-Daten in eine MP3-Datei und spiele das ab, aber mehr als "bbbrrrrrllllll" kommt da nicht raus.

Protokollmäßig habe ich leider keine doku gefunden...zumindest keine offizielle. Nur eine Doku mit den Metadaten, aber das reicht ja aus:

http://www.smackfu.com/stuff/programming/shoutcast.html

Ich werde jetzt noch versuchen das ganze ohne QT zu machen.

Schöne Grüße
cesupa
 
So, ich hab das ganze jetzt mal mit guter alter "manueller" Socketprogrammierung gemacht;) und siehe da...es funktioniert einwandfrei. Also scheints wohl irgendwie an meinem QT-code zu liegen....
 
So, ich hab das ganze jetzt mal mit guter alter "manueller" Socketprogrammierung gemacht;) und siehe da...es funktioniert einwandfrei. Also scheints wohl irgendwie an meinem QT-code zu liegen....
Was du dort machst ist aber auch reichlich merkwürdig. Wieso behandelst du den Datenpuffer denn wie einen String? Warum terminierst du den Puffer? Warum verwendest du die den Ausgabeoperator anstatt der write() Methode? :confused:

Gruß
 
Hallo,

Wollte das auch mal ausprobieren und hat gleich funktioniert, weiß zwar noch nicht ob mir die Metadaten reinpfuschen werden, aber einen schnell-Lösung ist es auf jeden Fall.

Code:
... 
TCP Verbindung aufbauen auf port 80
...
sprintf(command, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", "dsl.tb-stream.net");
send(s, command, strlen(command), 0);			
				
while(1)
{
	size=recv(s,data,sizeof(data),0);
	fwrite(&data,1,size,f);
}

Bei Smackfu ist die Sache mit den Metadaten recht gut erklährt, weiß aber nicht wie groß die mp3daten die ich pro recv bekomme sind. Wenn ich wüsste wie groß die MP3 daten sind, könnte ich mir das Byte immer auslesen und somit auch auf die Metadaten kommen, kann mir jemand helfen****

mfg. Poseidon
 
Zurück