gmyth-stream/server/0.2/plugins/transcoders/gmencoder.py
author melunko
Tue Apr 24 00:43:20 2007 +0100 (2007-04-24)
branchtrunk
changeset 590 1c421f2531d3
child 595 5c5cff842d57
permissions -rw-r--r--
[svn r596] Fixed memory leak when dealocating GMythChannelInfo.
renatofilho@589
     1
import os
renatofilho@589
     2
import shlex
renatofilho@589
     3
import signal
renatofilho@589
     4
import subprocess
renatofilho@589
     5
renatofilho@589
     6
import lib.utils as utils
renatofilho@589
     7
import lib.server as server
renatofilho@589
     8
renatofilho@589
     9
__all__ = ("TranscoderGMencoder",)
renatofilho@589
    10
renatofilho@589
    11
class TranscoderGMencoder(server.Transcoder):
renatofilho@589
    12
    gmencoder_path = utils.which("gmencoder")
renatofilho@589
    13
    name = "gmencoder"
renatofilho@589
    14
    priority = -1
renatofilho@589
    15
    proc = None
renatofilho@589
    16
    args = {}
renatofilho@589
    17
renatofilho@589
    18
    def __init__(self, params):
renatofilho@589
    19
        server.Transcoder.__init__(self, params)
renatofilho@589
    20
        self.opts = []
renatofilho@589
    21
    # __init__()
renatofilho@589
    22
renatofilho@589
    23
    def _insert_param (self, name, value):
renatofilho@589
    24
        if (value != ""):
renatofilho@589
    25
            self.opts.append(name)
renatofilho@589
    26
            self.opts.append(value)
renatofilho@589
    27
renatofilho@589
    28
    def _parser_params (self):
renatofilho@589
    29
        self._insert_param("-i", \
renatofilho@589
    30
            "%s://%s" % (self.params_first("uri_prefix", "file"), self.params_first("uri_path", "")))
renatofilho@589
    31
        self._insert_param("--video-encode", self.params_first("ve", ""))
renatofilho@589
    32
        self._insert_param("--video-opts", "bitrate=200,pass=2,quantizer=5")
renatofilho@589
    33
        self._insert_param("--video-fps", self.params_first("fps", ""))
renatofilho@589
    34
        self._insert_param("--video-width", self.params_first("width", ""))
renatofilho@589
    35
        self._insert_param("--video-height", self.params_first("height", ""))
renatofilho@589
    36
        self._insert_param("--audio-encode", self.params_first("ae", ""))
renatofilho@589
    37
        self._insert_param("--output-element", "fdsink")
renatofilho@589
    38
    # _parse_params 
renatofilho@589
    39
    
renatofilho@589
    40
    def start(self, outfd):
renatofilho@589
    41
        self.opts.append (self.gmencoder_path)
renatofilho@589
    42
        self._parser_params ()
renatofilho@589
    43
        self.opts.append ("--output-opts")
renatofilho@589
    44
        self.opts.append ("fd=%d" % outfd.fileno())
renatofilho@589
    45
renatofilho@589
    46
        cmd = " ".join(self.opts)
renatofilho@589
    47
        self.log.info ("Gmemconder: %s", cmd)
renatofilho@589
    48
renatofilho@589
    49
        try:
renatofilho@589
    50
            self.proc = subprocess.Popen(self.opts, stdin=subprocess.PIPE)
renatofilho@589
    51
        except Exception, e:
renatofilho@589
    52
            self.log.error("Error executing gmencoder: %s" % e)
renatofilho@589
    53
            return False
renatofilho@589
    54
renatofilho@589
    55
        try:
renatofilho@589
    56
             self.proc.wait()
renatofilho@589
    57
            
renatofilho@589
    58
        except Exception, e:
renatofilho@589
    59
            self.log.error("Problems handling data: %s" % e)
renatofilho@589
    60
            return False
renatofilho@589
    61
renatofilho@589
    62
        return True
renatofilho@589
    63
    # start()
renatofilho@589
    64
renatofilho@589
    65
renatofilho@589
    66
    def stop(self):
renatofilho@589
    67
        if self.proc:
renatofilho@589
    68
            self.log.info ("STOP")
renatofilho@589
    69
            try:
renatofilho@589
    70
                self.proc.stdin.write ("QUIT\n")
renatofilho@589
    71
            except Exception, e:
renatofilho@589
    72
                pass
renatofilho@589
    73
renatofilho@589
    74
            try:
renatofilho@589
    75
                self.proc.wait()
renatofilho@589
    76
            except Exception, e:
renatofilho@589
    77
                pass
renatofilho@589
    78
renatofilho@589
    79
            self.proc = None
renatofilho@589
    80
    # stop()
renatofilho@589
    81
renatofilho@589
    82
# TranscoderGMencoder