Esempio n. 1
0
    def format_location_callback (self,splitmux, fragment_id,sample,data=None):
        times=self.calculate_times(sample)

        if (self._real_base == None):
            clock = Gst.SystemClock(clock_type=Gst.ClockType.REALTIME)
            self._real_base = clock.get_time()
            self._stream_base = times["segment.time"]
            metaconvert = self.pipeline.get_by_name("jsonmetaconvert")
            
            if metaconvert:
                if ("tags" not in self.request):
                    self.request["tags"]={}
                self.request["tags"]["real_base"] = self._real_base
                metaconvert.set_property("tags", json.dumps(self.request["tags"]))

        adjusted_time = self._real_base + (times["stream_time"] - self._stream_base)
        self._year_base = time.strftime("%Y", time.localtime(adjusted_time / 1000000000))
        self._month_base = time.strftime("%m", time.localtime(adjusted_time / 1000000000))
        self._day_base = time.strftime("%d", time.localtime(adjusted_time / 1000000000))
        self._dirName = "%s/%s/%s/%s" %(self.request["parameters"]["recording_prefix"],self._year_base,self._month_base,self._day_base)

        try:
            os.makedirs(self._dirName)
        except FileExistsError:
            logger.debug("Directory already exists")

        return "%s/%d_%d.mp4" %(self._dirName,
                                adjusted_time,
                                times["stream_time"]-self._stream_base)
Esempio n. 2
0
    def create_source_pipeline(self):
        self.source_pipeline = Gst.parse_launch(
            self.source_pipeline_description)
        source_bus = self.source_pipeline.get_bus()
        source_bus.connect("message::error", self.on_error)
        source_bus.connect("message::warning", self.on_warning)
        source_bus.connect("message::eos", self.on_eos_from_source_pipeline)
        source_bus.add_signal_watch()
        appsink = self.source_pipeline.get_by_name("appsink")
        appsink.connect("new-sample", self.on_new_sample)

        # A realtime clock gives timestamps compatible with time.time()
        self.source_pipeline.use_clock(
            Gst.SystemClock(clock_type=Gst.ClockType.REALTIME))
    def format_location_callback(self,
                                 unused_element,
                                 unused_fragement_id,
                                 sample,
                                 unused_data=None):

        times = self.calculate_times(sample)

        if (self._real_base is None):
            clock = Gst.SystemClock(clock_type=Gst.ClockType.REALTIME)
            self._real_base = clock.get_time()
            self._stream_base = times["segment.time"]
            metaconvert = self.pipeline.get_by_name("metaconvert")

            if metaconvert:
                if ("tags" not in self.request):
                    self.request["tags"] = {}
                self.request["tags"]["real_base"] = self._real_base
                metaconvert.set_property("tags",
                                         json.dumps(self.request["tags"]))

        adjusted_time = self._real_base + \
            (times["stream_time"] - self._stream_base)
        self._year_base = time.strftime(
            "%Y", time.localtime(adjusted_time / 1000000000))
        self._month_base = time.strftime(
            "%m", time.localtime(adjusted_time / 1000000000))
        self._day_base = time.strftime(
            "%d", time.localtime(adjusted_time / 1000000000))
        template = "{prefix}/{yearbase}/{monthbase}/{daybase}"
        self._dir_name = template.format(
            prefix=self.request["parameters"]["recording_prefix"],
            yearbase=self._year_base,
            monthbase=self._month_base,
            daybase=self._day_base)

        try:
            os.makedirs(self._dir_name)
        except FileExistsError:
            self._logger.debug("Directory already exists")

        template = "{dirname}/{adjustedtime}_{time}.mp4"
        return template.format(dirname=self._dir_name,
                               adjustedtime=adjusted_time,
                               time=times["stream_time"] - self._stream_base)
Esempio n. 4
0
    def create_source_pipeline(self):
        self.source_pipeline = Gst.parse_launch(
            self.source_pipeline_description)
        source_bus = self.source_pipeline.get_bus()
        source_bus.connect("message::error", self.on_error)
        source_bus.connect("message::warning", self.on_warning)
        source_bus.connect("message::eos", self.on_eos_from_source_pipeline)
        source_bus.add_signal_watch()
        appsink = self.source_pipeline.get_by_name("appsink")
        appsink.connect("new-sample", self.on_new_sample)

        # A realtime clock gives timestamps compatible with time.time()
        self.source_pipeline.use_clock(
            Gst.SystemClock(clock_type=Gst.ClockType.REALTIME))

        if self.restart_source_enabled:
            # Handle loss of video (but without end-of-stream event) from the
            # Hauppauge HDPVR capture device.
            source_queue = self.source_pipeline.get_by_name(
                "_stbt_user_data_queue")
            source_queue.connect("underrun", self.on_underrun)
            source_queue.connect("running", self.on_running)
Esempio n. 5
0
 def __init__(self):
     clock = Gst.SystemClock().obtain()
     self.ntp = GstNet.NetTimeProvider.new(clock, '0.0.0.0', 9998)
     print('Clock listening on UDP port {}'.format(9998))