Ansatz gesucht zum gepufferten Pipelining eines HTTP-Streams
Verfasst: Mittwoch 31. Januar 2007, 11:48
Hallo,
ich habe ein Problem, zu dem es (nach meinem Anfaengerhaften Wissensstand) zu viele moegliche Ansaetze gibt und ich nicht weiss, welcher der einfachste/effizienteste ist.
Mein Ziel: Wiedergabe von Internetradio via mpg321.
mpg321 ist ein Kommandozeilenplayer unter Linux. Leider kommt er nicht selbst mit HTTP-Streams klar (zum Beispiel somaFM: http://64.236.34.97:80/stream/1018 ), wohl aber kann er Daten, die ueber STDIN eintrudeln, wiedergeben.
Auf der Kommanozeile fuehrt somit ein
wget -qO - http://64.236.34.97:80/stream/1018 | mpg321 -
zu einem Teilerfolg. Teilerfolg deshalb, weil die Daten nicht gepuffert werden und es deshalb oft zu kurzen Aussetzern kommt.
Python benutze ich, weil ich schon das gesamte Rahmenprogramm (inkl. Jukebox fuer lokale MP3s und LCD-Ansteuerung) damit geschrieben habe und es gut funktioniert.
Der Ablauf muesste m.E. so werden:
(1) initialisiere Puffer mit 1/2MB
(2) subprocess: lese HTTP-Stream in Puffer ein
(3) wenn Puffer zu 80% gefuellt:
(4) while Puffer nicht leer:
(4.1) starte 'Pufferinhalt | mpg321 -'
(4.2) gib den Pufferstatus an LCD aus
(5) stop HTTP stream and kill subprocess
Wo kann ich ansetzen?
Sollte ich fuer das Lesen des HTTP Streams des externe wget benutzen oder python-interne Libs benutzen?
Wie kann ich den Puffer realisieren?
Danke,
Blumi
ich habe ein Problem, zu dem es (nach meinem Anfaengerhaften Wissensstand) zu viele moegliche Ansaetze gibt und ich nicht weiss, welcher der einfachste/effizienteste ist.
Mein Ziel: Wiedergabe von Internetradio via mpg321.
mpg321 ist ein Kommandozeilenplayer unter Linux. Leider kommt er nicht selbst mit HTTP-Streams klar (zum Beispiel somaFM: http://64.236.34.97:80/stream/1018 ), wohl aber kann er Daten, die ueber STDIN eintrudeln, wiedergeben.
Auf der Kommanozeile fuehrt somit ein
wget -qO - http://64.236.34.97:80/stream/1018 | mpg321 -
zu einem Teilerfolg. Teilerfolg deshalb, weil die Daten nicht gepuffert werden und es deshalb oft zu kurzen Aussetzern kommt.
Python benutze ich, weil ich schon das gesamte Rahmenprogramm (inkl. Jukebox fuer lokale MP3s und LCD-Ansteuerung) damit geschrieben habe und es gut funktioniert.
Der Ablauf muesste m.E. so werden:
(1) initialisiere Puffer mit 1/2MB
(2) subprocess: lese HTTP-Stream in Puffer ein
(3) wenn Puffer zu 80% gefuellt:
(4) while Puffer nicht leer:
(4.1) starte 'Pufferinhalt | mpg321 -'
(4.2) gib den Pufferstatus an LCD aus
(5) stop HTTP stream and kill subprocess
Wo kann ich ansetzen?
Sollte ich fuer das Lesen des HTTP Streams des externe wget benutzen oder python-interne Libs benutzen?
Wie kann ich den Puffer realisieren?
Danke,
Blumi