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)
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)
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)
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))