renatofilho@589: import os renatofilho@589: import shlex renatofilho@589: import signal renatofilho@589: import subprocess renatofilho@589: renatofilho@589: import lib.utils as utils renatofilho@589: import lib.server as server renatofilho@589: renatofilho@589: __all__ = ("TranscoderGMencoder",) renatofilho@589: renatofilho@589: class TranscoderGMencoder(server.Transcoder): renatofilho@589: gmencoder_path = utils.which("gmencoder") renatofilho@589: name = "gmencoder" renatofilho@589: priority = -1 renatofilho@589: proc = None renatofilho@589: args = {} renatofilho@589: renatofilho@589: def __init__(self, params): renatofilho@589: server.Transcoder.__init__(self, params) renatofilho@589: self.opts = [] renatofilho@589: # __init__() renatofilho@589: renatofilho@589: def _insert_param (self, name, value): renatofilho@589: if (value != ""): renatofilho@589: self.opts.append(name) renatofilho@589: self.opts.append(value) renatofilho@589: renatofilho@589: def _parser_params (self): renatofilho@589: self._insert_param("-i", \ renatofilho@589: "%s://%s" % (self.params_first("uri_prefix", "file"), self.params_first("uri_path", ""))) renatofilho@589: self._insert_param("--video-encode", self.params_first("ve", "")) renatofilho@589: self._insert_param("--video-opts", "bitrate=200,pass=2,quantizer=5") renatofilho@589: self._insert_param("--video-fps", self.params_first("fps", "")) renatofilho@589: self._insert_param("--video-width", self.params_first("width", "")) renatofilho@589: self._insert_param("--video-height", self.params_first("height", "")) renatofilho@589: self._insert_param("--audio-encode", self.params_first("ae", "")) renatofilho@589: self._insert_param("--output-element", "fdsink") renatofilho@589: # _parse_params renatofilho@589: renatofilho@589: def start(self, outfd): renatofilho@589: self.opts.append (self.gmencoder_path) renatofilho@589: self._parser_params () renatofilho@589: self.opts.append ("--output-opts") renatofilho@589: self.opts.append ("fd=%d" % outfd.fileno()) renatofilho@589: renatofilho@589: cmd = " ".join(self.opts) renatofilho@589: self.log.info ("Gmemconder: %s", cmd) renatofilho@589: renatofilho@589: try: renatofilho@589: self.proc = subprocess.Popen(self.opts, stdin=subprocess.PIPE) renatofilho@589: except Exception, e: renatofilho@589: self.log.error("Error executing gmencoder: %s" % e) renatofilho@589: return False renatofilho@589: renatofilho@589: try: renatofilho@589: self.proc.wait() renatofilho@589: renatofilho@589: except Exception, e: renatofilho@589: self.log.error("Problems handling data: %s" % e) renatofilho@589: return False renatofilho@589: renatofilho@589: return True renatofilho@589: # start() renatofilho@589: renatofilho@589: renatofilho@589: def stop(self): renatofilho@589: if self.proc: renatofilho@589: self.log.info ("STOP") renatofilho@589: try: renatofilho@589: self.proc.stdin.write ("QUIT\n") renatofilho@589: except Exception, e: renatofilho@589: pass renatofilho@589: renatofilho@589: try: renatofilho@589: self.proc.wait() renatofilho@589: except Exception, e: renatofilho@589: pass renatofilho@589: renatofilho@589: self.proc = None renatofilho@589: # stop() renatofilho@589: renatofilho@589: # TranscoderGMencoder