Пример #1
0
 def updatePipeline(self, pipeline, analysis, tees, timeout=None):
     tag = self._getTranscodingTag()
     config = self._getTranscodingConfig()
     outputPath = self._getOutputPath()
     if analysis.hasAudio:
         audioEncBin = makeAudioEncodeBin(config, analysis, tag,
                                          pipelineInfo=self._pipelineInfo,
                                          logger=self)
     else:
         audioEncBin = None
     if analysis.hasVideo:
         videoEncBin = makeVideoEncodeBin(config, analysis, tag,
                                          pipelineInfo=self._pipelineInfo,
                                          logger=self)
     else:
         videoEncBin = None
     encBin = makeMuxerEncodeBin(outputPath, config, analysis, tag,
                                 audioEncBin, videoEncBin,
                                 pipelineInfo=self._pipelineInfo,
                                 logger=self)
     pipeline.add(encBin)
     if videoEncBin:
         tees['videosink'].get_pad('src%d').link(encBin.get_pad('videosink'))
         self._bins["video-encoder"] = videoEncBin
     if audioEncBin:
         tees['audiosink'].get_pad('src%d').link(encBin.get_pad('audiosink'))
         self._bins["audio-encoder"] = audioEncBin
Пример #2
0
    def updatePipeline(self, pipeline, analysis, tees, timeout=None):
        tag = self._getTranscodingTag()
        self.log("Updating transcoding pipeline for thumbnail target '%s'", tag)
        # First connect the custom thumbnail sink
        config = self._getTranscodingConfig()
        unit = config.periodUnit
        value = config.periodValue
        maxCount = config.maxCount
        ensureOne = config.ensureOne
        sampler = self.__createSampler(maxCount, unit, value, ensureOne, analysis)
        thumbSink = ThumbSink(sampler, "ThumbSink-" + tag)
        queue = gst.element_factory_make("queue", "thumbqueue-%s" % tag)
        pipeline.add(queue, thumbSink)
        gst.element_link_many(tees["videosink"], queue, thumbSink)

        # Then create the thumbnailing pipeline with a custom thumnail source
        config = self._getTranscodingConfig()
        thumbPipeName = "thumbnailing-" + tag
        thumbPipeline = gst.Pipeline(thumbPipeName)
        thumbSrc = ThumbSrc("ThumbSrc-" + tag)
        encoderConf = self.EncoderConfig(config)
        videoEncBin = makeVideoEncodeBin(encoderConf, analysis, tag, withRateControl=False, logger=self)
        fileSink = gst.element_factory_make("filesink", "filesink-%s" % tag)
        thumbPipeline.add(thumbSrc, videoEncBin, fileSink)
        gst.element_link_many(thumbSrc, videoEncBin, fileSink)
        self._thumbSink = thumbSink
        self._thumbSrc = thumbSrc
        self._pipeline = thumbPipeline
        self._fileSink = fileSink
        self._bus = self._pipeline.get_bus()
        self._bus.add_signal_watch()
        self._bus.connect("message", self._bus_message_callback)
Пример #3
0
 def updatePipeline(self, pipeline, analysis, tees, timeout=None):
     tag = self._getTranscodingTag()
     config = self._getTranscodingConfig()
     outputPath = self._getOutputPath()
     videoEncBin = makeVideoEncodeBin(config, analysis, tag,
                                      pipelineInfo=self._pipelineInfo,
                                      logger=self)
     encBin = makeMuxerEncodeBin(outputPath, config, analysis, tag,
                                 None, videoEncBin,
                                 pipelineInfo=self._pipelineInfo,
                                 logger=self)
     pipeline.add(encBin)
     tees['videosink'].get_pad('src%d').link(encBin.get_pad('videosink'))
     self._bins["video-encoder"] = videoEncBin