2009-12-28 3 views
0

J'essaie de faire un proxy pour internet-radio en mp3. Il fonctionne bien lors de l'accès aux fichiers mp3, mais pas pour les flux mp3.Problème avec python-proxy pour les flux mp3

Je suppose qu'il me manque une différence très basique mais je n'ai pas trouvé d'indice.

Meilleures salutations, loup

Mon code de test:

#!/usr/local/bin/python2.5 
import urllib; 
import SocketServer, BaseHTTPServer 
import subprocess 

class Proxy: 
    def __init__(self, port=4500): 
     self.port = port 
     self.server = SocketServer.ThreadingTCPServer(('', self.port), self.Manager) 

    class Manager(BaseHTTPServer.BaseHTTPRequestHandler): 
     def do_GET(self): 
      self.send_response(200) 
      self.send_header("Content-type", "audio/mpeg"); 
      self.end_headers(); 

      process = subprocess.Popen("lame --mp3input -m m --abr 128 -b 64 - -", shell=True, bufsize=64, 
      stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True) 
      (streamin, streamout) = (process.stdin, process.stdout) 
      # Does not work 
      url = urllib.urlopen("http://stream.srg-ssr.ch:80%s" % "/drs3/mp3_128.m3u") 
      # Does work 
      #url = urllib.urlopen("http://www.openbsd.org:80%s" % "/songs/song46.mp3") 
      buffer = url.read(4096) 
      while len(buffer) > 0: 
       streamin.streamout(buffer); 
       while 1: 
        data = select.select([streamout.fileno()], [],[],.1); 
        if len(data[0]) == 0: 
         break 
        mp3 = streamout.read(4096) 
        self.wfile.write(mp3) 
       buf = url.read(4096) 

Répondre

0

Le problème est que vous lisez pas le flux mp3, mais M3U playlist file. Ce fichier ne contient aucune donnée mp3 elle-même.

Le contenu de votre fichier texte est simple:

http://zlz-stream10.streamserver.ch/1/drs3/mp3_128 
http://glb-stream12.streamserver.ch/1/drs3/mp3_128 
http://zlz-stream13.streamserver.ch/1/drs3/mp3_128 
http://zlz-stream11.streamserver.ch/1/drs3/mp3_128 
http://glb-stream10.streamserver.ch/1/drs3/mp3_128 
http://zlz-stream12.streamserver.ch/1/drs3/mp3_128 
http://glb-stream13.streamserver.ch/1/drs3/mp3_128 
http://glb-stream11.streamserver.ch/1/drs3/mp3_128 

Chaque ligne est une URL du flux lui-même. Lisez le fichier M3U, analysez-le et téléchargez les données de flux à partir de ces URL.

+0

+1. Le fichier M3U est une liste de lecture. –