Internetradio aufnehmen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
starki
User
Beiträge: 8
Registriert: Freitag 17. August 2012, 19:59

Hallo Leute,

ich versuche gerade mich darin einzuprogrammieren, wie man Internetradio aufnehmen kann. Hier mal das bisherige Skript von mir:

Code: Alles auswählen

import socket
import time

BUFSIZE = 1024
url = "http://ruhit.imgradio.pro/RusHit48"

host = "ruhit.imgradio.pro"
afterhost = "/RusHit48"
useragent = "VLC/2.1.5 LibVLC/2.1.5"
range = "bytes=6867051-"
connection = "close"
icymetadata = "1"

sendtosocket = "GET {0} HTTP/1.1\n".format(afterhost)
sendtosocket = "{0}Host: {1}\n".format(sendtosocket, host)
sendtosocket = "{0}User-Agent: {1}\n".format(sendtosocket, useragent)
sendtosocket = "{0}Range: {1}\n".format(sendtosocket, range)
sendtosocket = "{0}Connection: {1}\n".format(sendtosocket, connection)
sendtosocket = "{0}Icy-MetaData: {1}\n\n".format(sendtosocket, icymetadata)

s = socket.socket()
s.connect((host, 80))
s.send(bytes(sendtosocket, 'utf-8'))

filename = "test - {0}.mp3".format(time.strftime("%d - %m - %Y %H'%M'%S"))

f = open(filename, "wb")

running = True

try:
    while running:
        try:
            print("Attempting to read from socket...")
            while True:
                data = s.recv(BUFSIZE)
                if len(data) == 0:      # remote end closed
                    print("Remote end closed")
                    running = False
                    break;
                # print("Received %d bytes: %r" % (len(data), data))
                f.write(data)
        except socket.error as e:
            if e[0] != 11:      # Resource temporarily unavailable
                print(e)
                raise
        # Perform other program tasks
        print("Sleeping...")
        time.sleep(1)
except KeyboardInterrupt:
    print("Programm wird beendet...")
print("Socket wird geschlossen...")
s.close()
print("Datei wird geschlossen...")
f.close()
Im Grunde genommen funktioniert das soweit auch: Es empfängt Daten von dem Sender, und speichert es in eine MP3-Datei. Problem ist jedoch: Es funktioniert nicht immer. Und ich frage mich woran das liegt. Habt ihr eventuell ein paar Ideen woran das liegen könnte?

Ein weiteres Problem das ich hier habe ist dass wenn eine Aufnahme funktioniert, dass es ab und zu mal so Stellen gibt, wo es für Millisekunden lang kurz nichts zu hören ist und dann wieder was. Aber ich glaube, das liegt daran, dass ich ja meine Daten speichere und in der Zeit ich keine Daten empfange.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Hallo starki,

Dass es nicht an der Verzögerung durch das Schreiben liegt kannst du ausschließen indem du mit time.sleep(3) einige Sekunden wartest vor dem schreiben. Wenn das nichts ausmacht, kann es nicht daran liegen.
Ich würde connection auf keep-alive setzen, glaube aber nicht, dass das einen bemerkbaren unterschied macht.
Antworten