gmyth-stream/server/0.2/plugins/transcoders/gmencoder.py
author renatofilho
Thu Apr 26 22:33:00 2007 +0100 (2007-04-26)
branchtrunk
changeset 600 7da2a5e32fa6
parent 589 549c4664701e
child 602 4b0b8c58b532
permissions -rw-r--r--
[svn r606] added suport for multiple files
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
renatofilho@589
    17
    def __init__(self, params):
renatofilho@589
    18
        server.Transcoder.__init__(self, params)
renatofilho@589
    19
        self.opts = []
renatofilho@589
    20
    # __init__()
renatofilho@589
    21
renatofilho@589
    22
    def _insert_param (self, name, value):
renatofilho@589
    23
        if (value != ""):
renatofilho@589
    24
            self.opts.append(name)
renatofilho@589
    25
            self.opts.append(value)
renatofilho@589
    26
renatofilho@589
    27
    def _parser_params (self):
renatofilho@589
    28
        self._insert_param("-i", \
renatofilho@589
    29
            "%s://%s" % (self.params_first("uri_prefix", "file"), self.params_first("uri_path", "")))
morphbr@595
    30
morphbr@595
    31
        #self._insert_param("-i", self.params_first("uri", ""))
morphbr@595
    32
renatofilho@589
    33
        self._insert_param("--video-encode", self.params_first("ve", ""))
renatofilho@589
    34
        self._insert_param("--video-opts", "bitrate=200,pass=2,quantizer=5")
renatofilho@589
    35
        self._insert_param("--video-fps", self.params_first("fps", ""))
renatofilho@589
    36
        self._insert_param("--video-width", self.params_first("width", ""))
renatofilho@589
    37
        self._insert_param("--video-height", self.params_first("height", ""))
renatofilho@589
    38
        self._insert_param("--audio-encode", self.params_first("ae", ""))
renatofilho@589
    39
        self._insert_param("--output-element", "fdsink")
morphbr@595
    40
    # _parse_params
morphbr@595
    41
renatofilho@589
    42
    def start(self, outfd):
renatofilho@589
    43
        self.opts.append (self.gmencoder_path)
renatofilho@589
    44
        self._parser_params ()
renatofilho@589
    45
        self.opts.append ("--output-opts")
renatofilho@589
    46
        self.opts.append ("fd=%d" % outfd.fileno())
renatofilho@589
    47
renatofilho@589
    48
        cmd = " ".join(self.opts)
morphbr@595
    49
        self.log.info ("GMencoder: %s", cmd)
renatofilho@589
    50
renatofilho@589
    51
        try:
renatofilho@589
    52
            self.proc = subprocess.Popen(self.opts, stdin=subprocess.PIPE)
renatofilho@589
    53
        except Exception, e:
morphbr@595
    54
            self.log.error("Error executing GMencoder: %s" % e)
renatofilho@589
    55
            return False
renatofilho@589
    56
renatofilho@589
    57
        try:
renatofilho@589
    58
             self.proc.wait()
renatofilho@589
    59
        except Exception, e:
renatofilho@589
    60
            self.log.error("Problems handling data: %s" % e)
renatofilho@589
    61
            return False
renatofilho@589
    62
renatofilho@589
    63
        return True
renatofilho@589
    64
    # start()
renatofilho@589
    65
renatofilho@589
    66
renatofilho@589
    67
    def stop(self):
renatofilho@589
    68
        if self.proc:
morphbr@595
    69
            self.log.info ("STOPed GMencoder plugin")
renatofilho@589
    70
            try:
renatofilho@589
    71
                self.proc.stdin.write ("QUIT\n")
renatofilho@589
    72
            except Exception, e:
renatofilho@589
    73
                pass
renatofilho@589
    74
renatofilho@589
    75
            try:
renatofilho@589
    76
                self.proc.wait()
renatofilho@589
    77
            except Exception, e:
renatofilho@589
    78
                pass
renatofilho@589
    79
renatofilho@589
    80
            self.proc = None
renatofilho@589
    81
    # stop()
renatofilho@589
    82
renatofilho@589
    83
# TranscoderGMencoder