Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Liste von Winamp Radio Streams (https://www.delphipraxis.net/64042-liste-von-winamp-radio-streams.html)

Chris P 26. Feb 2006 17:29


Liste von Winamp Radio Streams
 
Hi Leute,

ich habe eine kleines Internetradio programmiert.
Man kann die Adressen der einzelnen Streams per Hand eingeben!
Besser wäre aber wenn mein Programm das automatisch machen würde!
Hat jemand eine Idee, wie ich die Adressen der Winamp Shoutcast Streams in mein Programm laden kann?

Winamp macht das ja auch...

Wishmaster 27. Feb 2006 13:52

Re: Liste von Winamp Radio Streams
 
Hi

Also ich habe den Link zu Winamp Shoutcast DB, in der DB findest du alle Links zu den einzelnen Playlists, die DB ist in XML normal Komprimiert.

XML-Code:
  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <WinampXML>
- <playlist num_entries="600" label="SHOUTcast top 600">
- <entry Playstring="http://www.shoutcast.com/sbin/tunein-station.pls?id=7807&filename=playlist.pls">
  <Name>.977 The 80s Channel (80s Grooves)</Name>
  <Genre>80s Pop Rock</Genre>
  <Nowplaying>Steve Winwood - Higher Love</Nowplaying>
  <Listeners>3327</Listeners>
  <Bitrate>128</Bitrate>
  </entry>
- <entry Playstring="http://www.shoutcast.com/sbin/tunein-station.pls?id=4907&filename=playlist.pls">
  <Name>D I G I T A L L Y - I M P O R T E D - European Trance, Techno, Hi-NRG... we can't define it!</Name>
  <Genre>Trance Techno Dance</Genre>
  <Nowplaying>Airwave vs. Rising Star - Sunspot (original mix)</Nowplaying>
  <Listeners>2939</Listeners>
  <Bitrate>96</Bitrate>
  </entry>

Chris P 27. Feb 2006 18:11

Re: Liste von Winamp Radio Streams
 
Danke erstmal für die Antwort.

Aber wie kann ich jetzt mit Delphi auf diese DB zugreifen bzw. die Sender in mein Programm laden?

Wishmaster 28. Feb 2006 00:49

Re: Liste von Winamp Radio Streams
 
Ups den link habe ich wohl vergessen, Sorry!

Shoutcast XML

Lade dir die XML runter, Extrahiere die einzelne links zu den Playlists, dann lade die playlist runter extrahiere die einzelne links zu den Server (http://160.79.128.62:6038) fertig.

Wen du ne bessere Methode weist das sag bescheid. Das würde mich auch Interessieren.

Chris P 1. Mär 2006 09:33

Re: Liste von Winamp Radio Streams
 
Eine andere Möglichkeit wäre die XML-Datei mit der Komponente TXMLDocument auszulesen.
Aber wie genau das funktioniert weiß ich auch noch nicht!

Vielleicht hat ja jemand eine kleine Idee wie man gezielt die Radiosender aus der Datenbank bekommt?

Chris P 2. Mär 2006 19:04

Re: Liste von Winamp Radio Streams
 
Hat jemand vielleicht eine Idee, wie man diesen XML Code auslesen könnte?
Delphi-Quellcode:
<entry Playstring="http://www.shoutcast.com/sbin/tunein-station.pls?id=3281&amp;filename=playlist.pls">
     <Name>CLUB 977 The Hitz Channel (HIGH BANDWIDTH)</Name>
     <Genre>Pop Rock Top 40</Genre>
     <Nowplaying></Nowplaying>
     <Listeners>3682</Listeners>
     <Bitrate>128</Bitrate>
    </entry>
Wie könnte ich zum Beispiel <Name>, <Genre> usw. auslesen?

Habe zwar schon im Forum gesucht aber ich bin nicht weitergekommen.

Könnt ihr mir helfen?

Chris P 5. Mär 2006 19:27

Re: Liste von Winamp Radio Streams
 
Also ich habe es jetzt geschafft die XML-Datei mit allen Informationen auszulesen!

Nun möchte ich die einzelnen Radiostreams auch abspielen!
Das mache ich mit Hilfe von BASS_StreamCreateURL(...) und BASS_ChannelPlay(...);

Zuerst extrahiere ich die URLs aus der XML-Datei!

Im 1. Eintrag der Datei wäre es zum Beispiel:

"http://www.shoutcast.com/sbin/tunein-station.pls?id=7807&filename=playlist.pls"

Das ist ja nun eine vollständige ULR eines Radiosenders. Wenn ich dies nun als Adresse in den IE eingebe,
dann wird der Stream ohne Probleme in Winamp abgepielt!

Aber wenn ich in meinem eigenen Programm folgendes aufrufe:
Delphi-Quellcode:
Chan := BASS_StreamCreateURL(PCHAR('http://www.shoutcast.com/sbin/tunein-station.pls?id=7807&filename=playlist.pls'), 0, 0, nil, 0);
BASS_ChannelPlay(Chan, FALSE)
Kommt immer eine Meldung, dass der Channel nicht erzeugt werden konnte

Liegt der Fehler an der URL?

Chris P 5. Mär 2006 19:46

Re: Liste von Winamp Radio Streams
 
Wenn ich das ganze unter Winamp abspiele, dann bekomme ich für den selben Sender wie oben genannt auch
folgende URL:

http://195.225.46.132:8000

Welche URL ist jetzt richtig?

Wishmaster 5. Mär 2006 22:59

Re: Liste von Winamp Radio Streams
 
Hi

Das ist nur der link zu der Playlist. (.pls) size = 1kb
http://www.shoutcast.com/sbin/tunein...e=playlist.pls

jede Playlist (.pls) enthält in der Regel mehrere links zu den Server (http://195.225.46.132:8000). Und wen du die links zu den Servern has dann kannst du diese auch mit der Bass.dll Abspielen

Chan := BASS_StreamCreateURL(PCHAR(http://195.225.46.132:8000), 0, 0, nil, 0);


  • [playlist]
    numberofentries=4
    File1=http://64.236.34.196:80/stream/1038
    Title1=HitzRadio.com - #1 for all the hits!
    Length1=-1
    File2=http://64.236.34.67:80/stream/1038
    Title2=HitzRadio.com - #1 for all the hits!
    Length2=-1
    File3=http://64.236.34.4:80/stream/1038
    Title3=HitzRadio.com - #1 for all the hits!
    Length3=-1
    File4=http://64.236.34.97:80/stream/1038
    Title4=HitzRadio.com - #1 for all the hits!
    Length4=-1
    Version=2

Chris P 6. Mär 2006 09:29

Re: Liste von Winamp Radio Streams
 
Danke erstmal...

Doch wie bekomme ich jetzt anhand der Links die einzelnen Adressen bzw. wie bekomme
ich das mit delphi hin?

Wenn ich das jetzt noch wüsste dann wäre mein Problem gelöst!

Chris P 6. Mär 2006 21:31

Re: Liste von Winamp Radio Streams
 
Also jetzt habe ich auch geschafft, die Einträge der Playlist auszulesen mit Hilfe von GetHTML von Delphi-Source.de!

Ich bekomme den kompletten Inhalt der HTML als string zurück!

Wie kann man nun zum Beispiel File1, Title1 usw. gezielt auslesen?

Chris P 9. Mär 2006 18:42

Re: Liste von Winamp Radio Streams
 
Hi,

also ich habe jetzt erstmal die Anzahl der Einträge ausgelesen:
Delphi-Quellcode:

t := GetHTML(S);
p1 := pos('=', t);
temp := Copy(t, p1+1, length(t)) ;
p2 := pos(#10, Temp);
temp := Copy(temp, 1, p2-1);
a := strtoint(temp);
Bemerkung: Die einzelnen Einträge sind immer mit dem Zeichen #10 getrennt!

Ich bekomme somit die Zahl 4 zurück.
Nun kann ich nach den 4 Einträgen suchen.
Mich interessieren nur File und Title:
Delphi-Quellcode:
 for i := 1 to a do
       begin
            temp := t;
            str := Format('File%d=',[i]);
            p1 := Pos(Str,temp);
            temp := Copy(temp, p1 + Length(str), length(temp));
            p2 := pos(#10,temp);

            temp := Copy(temp,1,p2-1);
            Memo1.Lines.add(Format('Stream%d %s', [i, temp]));
            temp := t;
            str := Format('Title%d=',[i]);
            p1 := Pos(Str,temp);
            temp := Copy(temp, p1 + Length(str), length(temp));
            p2 := pos(#10,temp);
            temp := Copy(temp,1,p2-1);
            Memo1.Lines.add(Format('Title%d %s', [i, temp]));

       end;
Das klappt alles gut! Jetzt wollte ich nur mal wissen, ob man das ganze noch besser
machen kann? Vielleicht hat ja jemand einen Vorschlag?

Wishmaster 10. Mär 2006 01:45

Re: Liste von Winamp Radio Streams
 
Hi

Sorry das ich nicht auf deine Letzte PN geantwortet habe, ich hatte kaum zeit. Aber wie ich sehe has du es selbst geschafft. Das (p1, p2) kannst du eigentlich weglassen. Ich habe deinen Code einwenig umgeschrieben. Das Ergebnis wird in eine Stringlist geschrieben siehe meine PlayListClass.

Du solltest dir feileicht en TThread erstellen. Ich meine wegen der Auslastung

Delphi-Quellcode:
Procedure TPlaylist.ParseWebPLS(wPLS : String);
var i, a : integer;
    temp, t : String;
    str : string;
begin
    FileList.Clear;
    t := GetHTML(wPLS);
  try
    temp := Copy(t, pos('=', t) + 1, length(t)) ;
    temp := Copy(temp, 1, pos(#10, Temp)-1);
    a := strtoint(temp);
  finally
   for i := 1 to a do
    begin
     {Get Server/FileName}
       temp := t;
       str := Format('File%d=', [i]);
       temp := Copy(temp, Pos(Str, temp) + Length(str), length(temp));
       FileList.Add(Copy(temp, 1, pos(#10, temp)-1));

     {Get Title}
       temp := t;
       str := Format('Title%d=', [i]);
       temp := Copy(temp, Pos(Str, temp) + Length(str), length(temp));
       FileTitle.Add(Copy(temp, 1, pos(#10, temp)-1));
     end;
  end;
end;
Delphi-Quellcode:
   Playlist.ParseWebPLS(‘URL’);

  for I := 0 to Playlist.Count - 1 do
  begin
    Memo1.Lines.Add(Playlist.GetFileName(i));
    Memo1.Lines.Add(Playlist.GetText(i))
  end;

Chris P 10. Mär 2006 09:54

Re: Liste von Winamp Radio Streams
 
Hi,

@Wishmaster: Funktioniert hervoragend! :hello:

Mit dem TThread werde ich mal in Angriff nehmen, aber jetzt bin ich
erstmal mit der Lösung vollstens zufrieden...

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz