gmyth-stream/server/plugins/media/mencoder.py
branchtrunk
changeset 515 18f08fa8e216
parent 511 16312d0021cb
child 516 f353f0da6f07
     1.1 --- a/gmyth-stream/server/plugins/media/mencoder.py	Fri Apr 06 22:58:06 2007 +0100
     1.2 +++ b/gmyth-stream/server/plugins/media/mencoder.py	Mon Apr 09 23:33:35 2007 +0100
     1.3 @@ -23,12 +23,17 @@
     1.4          self.mplayer_pid = None
     1.5          signal.signal(signal.SIGABRT, self.kill_handler)
     1.6  
     1.7 +    # __init__
     1.8 +
     1.9      def kill_handler(self, sig, frame):
    1.10          try:
    1.11 -            os.kill(self.mplayer_pid.pid + 1, signal.SIGKILL)
    1.12 +            os.kill(self.mplayer_pid.pid, signal.SIGKILL)
    1.13 +            log.debug("Killed Mplayer")
    1.14              sys.exit(0)
    1.15          except:
    1.16 -            lib.log("Problems closing child")
    1.17 +            log.error("Problems closing child")
    1.18 +
    1.19 +    # kill_handler
    1.20  
    1.21      def set_args(self, options):
    1.22  
    1.23 @@ -41,58 +46,67 @@
    1.24                  try:
    1.25                      self.language = opt.split("=")[1]
    1.26                  except:
    1.27 -                    lib.log("Bad language option")
    1.28 +                    log.error("Bad language option")
    1.29  
    1.30              elif opt.find("format=") >= 0:
    1.31                  try:
    1.32                      self.mux += " -mpegopts format=%s" % opt.split("=")[1]
    1.33                  except:
    1.34 -                    lib.log("Bad format option")
    1.35 +                    log.error("Bad format option")
    1.36  
    1.37 +    # set_args
    1.38  
    1.39      def run_mplayer(self):
    1.40 -        msg = "%s 1>/dev/null 2>/dev/null" % self.filename
    1.41 +        msg = self.filename
    1.42  
    1.43          if self.kind == "dvd":
    1.44              msg = "dvd://" + msg
    1.45  
    1.46 -        self.mplayer += " " + msg
    1.47 -        self.mplayer_pid = Popen(self.mplayer, shell=True, close_fds=True)
    1.48 +        self.mplayer_pid = Popen([self.mplayer, self.filename, "1> %s" % os.devnull,\
    1.49 +                                  "2> %s" % os.devnull], stdout=PIPE, close_fds=True)
    1.50 +
    1.51 +    # run_mplayer
    1.52 +
    1.53  
    1.54      def setup_mencoder(self):
    1.55          self.path = self.config.get("Mencoder", "path")
    1.56 -        a, b = os.popen2(self.path)
    1.57 -        version = b.read().split("MEncoder ")[1].split(" (C)")[0].split("-")[-1]
    1.58 +        mp = Popen([self.path], stdout=PIPE, close_fds=True)
    1.59 +
    1.60 +        version = mp.stdout.read().split("MEncoder ")[1].split(" (C)")[0].split("-")[-1]
    1.61  
    1.62          if version > "4.1.1": self.mencoder_old = False
    1.63          else: self.mencoder_old = True
    1.64  
    1.65 -        lib.log("Mencoder version: %s" % version)
    1.66 -
    1.67 -        a.close()
    1.68 -        b.close()
    1.69 +        os.kill(mp.pid, signal.SIGKILL)
    1.70 +        log.info("Mencoder version: %s" % version)
    1.71  
    1.72          if self.mencoder_old:
    1.73              self.fifo = self.config.get("Mencoder", "fifo_path")
    1.74          else:
    1.75              self.fifo = "-"
    1.76  
    1.77 +    # setup_mencoder
    1.78 +
    1.79 +    def setup_audio(self, acodec):
    1.80 +
    1.81 +        if acodec == "mp3lame":
    1.82 +            return "-oac mp3lame -lameopts cbr:br=%s vol=5" % self.abitrate
    1.83 +        else:
    1.84 +            return = "-oac lavc -lavcopts acodec=%s:abitrate=%s" % (\
    1.85 +                self.acodec, self.abitrate)
    1.86 +
    1.87      def setup_filename(self, filename):
    1.88          try:
    1.89              self.kind, self.filename = filename.split("://")
    1.90          except:
    1.91              return (False, "Wrong filename protocol")
    1.92  
    1.93 -        if self.acodec == "mp3lame":
    1.94 -            audio = "-oac mp3lame -lameopts cbr:br=%s vol=5" % self.abitrate
    1.95 -        else:
    1.96 -            audio = "-oac lavc -lavcopts acodec=%s:abitrate=%s" % (\
    1.97 -                    self.acodec, self.abitrate)
    1.98 +        audio = setup_audio(self.acodec)
    1.99  
   1.100          if self.kind == "file":
   1.101              if not os.path.exists(self.filename):
   1.102                  msg = "File requested does not exist. SETUP failed."
   1.103 -                lib.log(msg)
   1.104 +                log.error(msg)
   1.105                  return (False, msg)
   1.106  
   1.107              self.args += " %s -mf fps=%s -of %s %s"\
   1.108 @@ -110,6 +124,24 @@
   1.109  
   1.110          return (True, "")
   1.111  
   1.112 +    # setup_filename
   1.113 +
   1.114 +    def setup_socket(self, socket):
   1.115 +        if socket != None:
   1.116 +            del(socket)
   1.117 +
   1.118 +        socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   1.119 +        socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
   1.120 +
   1.121 +        try:
   1.122 +            socket.bind( ('', self.port) )
   1.123 +            socket.listen(1)
   1.124 +        except Exception, e:
   1.125 +            log.error("Could not create socket: %s" % e)
   1.126 +            return (False, e)
   1.127 +
   1.128 +        return (True, "")
   1.129 +
   1.130      '''
   1.131      MENCODER SETUP DESCRIPTION
   1.132      ===========================
   1.133 @@ -146,16 +178,14 @@
   1.134          # good one: /tmp/dvb.mpg avi mpeg4 400 25 mp3lame 192 320 240 5000 file
   1.135          # /tmp/dvb.mpg mpeg mpeg1video 400 25 mp2 192 320 240 5000 format=mpeg1 file
   1.136          #4 mpeg mpeg1video 400 25 mp3lame 192 400 240 5000 language=en local dvd
   1.137 -        if self.socket != None:
   1.138 -            del(self.socket)
   1.139 +        ret_val = setup_socket(self.socket)
   1.140  
   1.141 -        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   1.142 -        self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
   1.143 -        self.socket.bind( ('', self.port) )
   1.144 -        self.socket.listen(1)
   1.145 +        if not ret_val[0]:
   1.146 +            return ret_val[1]
   1.147  
   1.148 -        return 0
   1.149 +        return True
   1.150  
   1.151 +    # setup
   1.152  
   1.153      def play(self):
   1.154