gmyth-stream/server/0.2/plugins/transcoders/gmencoder.py
author morphbr
Tue May 15 23:25:17 2007 +0100 (2007-05-15)
branchtrunk
changeset 660 ba4a948c4a55
parent 595 5c5cff842d57
child 672 4e623a4274a1
permissions -rw-r--r--
[svn r666] * GMyth-Streamer
- Updated report status on mencoder.py
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", "")))
renatofilho@589
    30
        self._insert_param("--video-encode", self.params_first("ve", ""))
renatofilho@589
    31
        self._insert_param("--video-opts", "bitrate=200,pass=2,quantizer=5")
renatofilho@589
    32
        self._insert_param("--video-fps", self.params_first("fps", ""))
renatofilho@589
    33
        self._insert_param("--video-width", self.params_first("width", ""))
renatofilho@589
    34
        self._insert_param("--video-height", self.params_first("height", ""))
renatofilho@602
    35
        self._insert_param("--audio-rate", "32000")
renatofilho@589
    36
        self._insert_param("--audio-encode", self.params_first("ae", ""))
morphbr@595
    37
    # _parse_params
morphbr@595
    38
renatofilho@589
    39
    def start(self, outfd):
renatofilho@589
    40
        self.opts.append (self.gmencoder_path)
renatofilho@589
    41
        self._parser_params ()
renatofilho@602
    42
        self._insert_param ("-o", "fd://%d" % outfd.fileno())
renatofilho@589
    43
renatofilho@589
    44
        cmd = " ".join(self.opts)
morphbr@595
    45
        self.log.info ("GMencoder: %s", cmd)
renatofilho@589
    46
renatofilho@589
    47
        try:
renatofilho@589
    48
            self.proc = subprocess.Popen(self.opts, stdin=subprocess.PIPE)
renatofilho@589
    49
        except Exception, e:
morphbr@595
    50
            self.log.error("Error executing GMencoder: %s" % e)
renatofilho@589
    51
            return False
renatofilho@589
    52
renatofilho@589
    53
        try:
renatofilho@589
    54
             self.proc.wait()
renatofilho@589
    55
        except Exception, e:
renatofilho@589
    56
            self.log.error("Problems handling data: %s" % e)
renatofilho@589
    57
            return False
renatofilho@589
    58
renatofilho@589
    59
        return True
renatofilho@589
    60
    # start()
renatofilho@589
    61
renatofilho@589
    62
renatofilho@589
    63
    def stop(self):
renatofilho@589
    64
        if self.proc:
morphbr@595
    65
            self.log.info ("STOPed GMencoder plugin")
renatofilho@589
    66
            try:
renatofilho@589
    67
                self.proc.stdin.write ("QUIT\n")
renatofilho@589
    68
            except Exception, e:
renatofilho@589
    69
                pass
renatofilho@589
    70
renatofilho@589
    71
            try:
renatofilho@589
    72
                self.proc.wait()
renatofilho@589
    73
            except Exception, e:
renatofilho@589
    74
                pass
renatofilho@589
    75
renatofilho@589
    76
            self.proc = None
renatofilho@589
    77
    # stop()
renatofilho@589
    78
renatofilho@589
    79
# TranscoderGMencoder