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