mp3-Stream abspielen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Guten Tag,
ich würde gerne einen mp3-Stream mit Python 2.6 auf Windows abzuspielen. Hab mir schon ein paar Sachen angeschaut, aber alles was ich gefunden habe konnte nur Dateien abspielen. Das ganze sollte wie youtube funktionieren, es soll den Stream laden und auch vorladen, aber auch gleichzeitig abspielen. Hat jemand Erfahrungen damit und kann mir helfen?


gruß waki
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir mal Phonon aus dem Qt-Framework an. Ich vermute das kann so etwas.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Hyperion hat geschrieben:Schau Dir mal Phonon aus dem Qt-Framework an. Ich vermute das kann so etwas.
Ich behaupte nein :-) Phonon ist eine Abstraktionsschicht zwischen den KDE(4)-Applikationen und dem Audio-Backend. Dabei stellt Phonon eine einheitliche API bereit - mehr aber nicht. Die Audio-Funktionalität an sich wird durch das Backend bereit gestellt.

Da es aber auch ein GStreamer Backend gibt kann es schon gut sein, dass die Kombi der beiden das kann. Wissen tu' ich das aber auch nicht.

Gehen muss es mit Python aber auf jeden Fall, weil der Audioplayer [urlhttp://de.wikipedia.org/wiki/Quod_Libet_%28Medienspieler%29]Quod Libet[/url] streamen kann - und der ist bekanntlich in Python geschrieben. Im Zweifelsfall also mal den Quellcode lesen ;-)

Gruß, noisefloor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

noisefloor hat geschrieben:Hallo,
Hyperion hat geschrieben:Schau Dir mal Phonon aus dem Qt-Framework an. Ich vermute das kann so etwas.
Ich behaupte nein :-) Phonon ist eine Abstraktionsschicht zwischen den KDE(4)-Applikationen und dem Audio-Backend. Dabei stellt Phonon eine einheitliche API bereit - mehr aber nicht. Die Audio-Funktionalität an sich wird durch das Backend bereit gestellt.
Behaupten kannst Du vieles, ich kann es belegen: Link. Ich zitiere:
Qt uses the Phonon multimedia framework to provide functionality for playback of the most common multimedia formats. The media can be read from files or streamed over a network, using a QURL to a file.
Natürlich benötigt Phonon ein Backend, aber der OP fragte ja nicht nach einem Backend, sondern einer Lib, die das "kann". Und Pakete von Qt sollten das Backend umfassen oder dagegen linken. Insofern kann man dann direkt "loslegen", da es Bindings für Python (PyQt / PySide) gibt.

Vielleicht gibt es ja auch direkte GStreamer-Bindings - ich habe einen Vorschlag gemacht, bei dem ich davon ausging, dass es damit geht.

Ob es nun noch ein Backend gibt oder nicht, ist da imho Haarspalterei, sofern Du Dich darauf weiterhin beziehen willst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

hab mir Phonon mal angekuckt und erstmal nichts passendes gefunden, aber hab aber nur eine Doku in ner anderen Scriptsprache gefunden und das versteh ich leider nicht komplett. Außerdem hab ich nichts passendes zu meinem Problem geunden. Gstreamer hab ich mir auch schon angekuckt, find aber auch nichts gutes dazu.

Das besondere bei mir ist dabei auch, das ich nicht mit der url darauf zugreifen kann, denn ich nutze die grooveshark api aus dem showcase und da kann man auf den stream per read() zugreifen. Das heißt eigentlich brauch ich eine Funktion mit der ich immer einen heruntergeladenen Teil mit z.B. play(buff) abspielen kann.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

waki hat geschrieben:hab mir Phonon mal angekuckt und erstmal nichts passendes gefunden, aber hab aber nur eine Doku in ner anderen Scriptsprache gefunden und das versteh ich leider nicht komplett.
Naja, man muss sich dafür sicherlich ein wenig in die Qt-Doku "einlesen". PyQt und PySide bieten ja keine eigene "übersetzte" Doku für die von Nokia. Also muss man sich eben die C++-Beispiele in Python übersetzen. Speziell bei den kurzen Snipptes sollte das aber auch ohne C++-Kenntnisse nicht so schwer sein.

Du könntest mal lunars Snippet zu Phonon als Basis für kleinere Experimente nehmen:
Snippet

Natürlich wirst Du nix spezielles fürs Streamen finden - da musst Du mal genauer die Doku studieren, wie man z.B. Musik von Web-Adressen als Quelle angibt. Evtl. findet man da dann doch noch was.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Gibt es denn kein Modul das sowas ermöglicht:

Code: Alles auswählen

buff = stream.read(2048)
GESUCHTES_MODUL.play(buff)
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

hab ich gemacht, und genau so hab ich mir das eig vorgestellt, außer dass ich pymad nicht installiert bekomme. Wenn ich config_unix ausführe bekomme ich immer einen Error:

Code: Alles auswählen

C:\Users\xxxxx\Programme\pymad\pymad-0.6>python config_unix.py
Checking for MAD ...Der Befehl "rm" ist entweder falsch geschrieben ode
konnte nicht gefunden werden.
Der Befehl "cc" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "rm" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
 test program failed
Config failure
Was kann ich machen?
deets

Nicht auf Windows ein Kommando ausfuehren welches fuer unix gedacht ist? Waere ein Anfang..
deets

Tut mir leid, da war ich etwas vorschnell. Es scheint laut Doku schon so gedacht zu sein. Aber wahrscheinlich hat der Author das Skript fuer cygwin geschrieben.

In jedem Fall brauchst du einen Compiler, oder jemanden der das fuer dich fertig compiliert.
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Hyperion: Den Satz habe ich auch gelesen - basierend darauf hast du Recht. Das mit dem Backend ist aber trotzdem ein wichtiges Detail. ;-)

Was mir aber später noch eingefallen ist: Der OP sucht ja was für Windows - du müsste man so wie so prüfen, welche Backends überhaupt für Win verfügbar sind.

In sofern ist der Vorschlag "Quellcode lesen" für Quod Libet vielleicht doch nicht so doof, weil das Prog lt. Projektseite unter Win läuft. :-)

Gruß, noisefloor
lunar

@noisefloor: Unter Windows nutzt Phonon DirectX, die Frage nach den verfügbaren Backends stellt sich nicht. Im Allgemeinen gibt es eh kein Backend, bei dem Streaming nicht funktionieren würde ...

Der Vorschlag Quod-Libet läuft darauf hinaus, dass der OP gstreamer verwendet, welches unter Windows aufgrund diverser Abhängigkeiten nicht einfach zu installieren ist. Da ist Phonon mit den entsprechenden Installern von PyQt4 oder PySide deutlich einfacher. Aber natürlich auch größer, und als Bibliothek nicht so gut wie gstreamer.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

deets hat geschrieben:Tut mir leid, da war ich etwas vorschnell. Es scheint laut Doku schon so gedacht zu sein. Aber wahrscheinlich hat der Author das Skript fuer cygwin geschrieben.

In jedem Fall brauchst du einen Compiler, oder jemanden der das fuer dich fertig compiliert.

Was für einen Compiler brauch ich da? Und kann mir das jemand machen(also für pymad)? Dannn hätte ich schon die Lösung ohne den Quellecode von QuodLibet zu lesen.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

*push* :)
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

hast du schon den Quellcode von Quod Libet gelesen?

Gruß, noisefloor
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

hast du schonmal meine beiträge gelesen? ^^ es geht gerade darum pymad unter windows zum laufen zu bringen...
lunar

@waki: Die letzte Version von pymad ist vier Jahre alt, und lässt sich wohl auch nicht so ohne weiteres für Windows übersetzen. Zumindest enthält das Quellarchiv keine gleichwertige Konfigurationsdatei für Windows, zudem benötigt man überhaupt erst einmal libmad samt Header-Dateien für Windows. Insofern bezweifele ich, dass Dir jemand pymad für Windows übersetzen wird.

Dir ist eigentlich klar, dass pymad nur zum Dekodieren dient? Zum Abspielen der Daten benötigst Du dann nochmal ein zusätzliches Modul.

Insofern ist gstreamer wirklich die sinnvollere Lösung.
Benutzeravatar
snafu
User
Beiträge: 6870
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hier geht jemand einen Weg, bei dem er Befehle an die MCI sendet. Ich habe hier kein Windows zum Testen, aber vielleicht klappt es ja so.

EDIT: Und das Projekt mp3play nutzt ebenfalls MCI-Befehle zum Abspielen eines MP3-Files.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Abspielen bekomm ich hin, wenn ich es decodieren kann. Hab nur noch kein passendes Modul gefunden, mit dem ich nicht nur Dateien, sondern nur Teile decodeiren kann...
Antworten