Пример #1
0
def grab_and_write():
    while True:
        if not append_queue.empty():
            path, content = append_queue.get()
            log.n(tag, "Writing to " + path)
            with open(path, "ab") as f:
                f.write(content)
Пример #2
0
def tracking():
    while True:
        if not __q__.empty():
            path = __q__.get()
            log.n("detection_queue.py", "Начал детектить: " + path)
            os.system('cmd /c ' + 'python object_tracker.py --model yolov4 '
                      '--video ' + path + ' '
                      '--output ' + path + '.avi ')
Пример #3
0
    def __close_file__(self):
        log.n(
            self.tag, "uTS закрыт: " + self.__cur_ts_file_name__ + " (" +
            "{:.3f}".format(self.__ts_buffer_duration__) + " сек)")

        self.__start_tracking__(self.__config__.name,
                                self.__cur_ts_file_name__)

        self.__cur_ts_file_name__ = None
        self.__ts_buffer_duration__ = 0
Пример #4
0
 def start(self):
     """
     Запускает работу M3u8Watcher, начинается скачивание трансляции.
     """
     if not self.isReadyToUse:
         log.e(self.tag,
               "Конфиг настроен неправильно. Старт потока невозможен")
         return
     # Связываем формулятор с нашей очередью
     self.__config__.formulator.queue = self.__q__
     log.n(self.tag, "Старт потока")
     self.__running_code__()
Пример #5
0
    def __init__(self, config: Config):
        self.isReadyToUse = False  # Готов ли этот M3u8Watcher к запуску
        self.tag = "M3u8Watcher@" + config.non_null_name()
        if config.isValid():
            self.__config__ = config
            log.n(self.tag, "Поток настроен успешно и готов к использованию")
            self.isReadyToUse = True
        else:
            log.e(self.tag,
                  "Конфиг настроен неправильно. Поток не будет подключён")
            self.isReadyToUse = False

        # Локальные переменные
        self.__q__ = Queue()
        self.__ts_buffer_duration__ = 0
        self.__cur_ts_file_name__ = None
        self.__start_is_discontinuity__ = True
Пример #6
0
    def __append_ts_content__(self, ts_seg: TsSegment, ts_content):
        camera_path = os.path.join(self.__config__.output_path,
                                   str(self.__config__.non_null_name()))

        if not os.path.exists(camera_path):
            os.makedirs(camera_path)

        if ts_seg.type == TsSegment.TYPE_TS_CONTENT:
            if self.__cur_ts_file_name__ is None:  # Файл дозаписи ещё не создан
                # Нужно сгенерировать имя этого файла, чтобы туда можно было дозаписывать
                self.__cur_ts_file_name__ = self.__generate_full_uTS_file_name__(
                    ts_seg)

            # Дозаписываем в файл - добавлем в mp.Queue а file_manager в едином потоке по очереди всё записывает в
            # соотвествующие файлы
            files.append_queue.put(
                (os.path.join(camera_path,
                              str(self.__cur_ts_file_name__)), ts_content))
            self.__ts_buffer_duration__ += ts_seg.duration
            log.n(
                self.tag, "Буфер дополнен. Новая длительность буфера: " +
                "{:.3f}".format(self.__ts_buffer_duration__) + " сек")

            # Проверяем на длительность uTS
            if self.__ts_buffer_duration__ + self.__config__.tolerance >= self.__config__.uTS_duration:
                # Если uTS достаточно длинный, закрываем этот файл
                self.__close_file__()

        elif ts_seg.type == TsSegment.TYPE_TS_AD:
            if self.__cur_ts_file_name__ is None:  # Файл дозаписи ещё не создан
                log.n(
                    self.tag,
                    "Получен рекламный сегмент, но файл дозаписи ещё не создан. Действия не требуются"
                )
                return  # Ничего делать не нужно
            else:  # Файл открыт на дозапись
                log.w(
                    self.tag,
                    "Получен рекламный сегмент, текущий uTS будет закрыт, "
                    "дальнейшее видео запишется в новый uTS")
                self.__close_file__(
                )  # Закрываем этот файл, писать будем в новый
                self.__start_is_discontinuity__ = True
Пример #7
0
def add_to_queue(path):
    log.n("detection_queue.py", "Добавил в очередь: " + path)
    __q__.put(path)