Перенаправить фрагменты видеоданных из сокета в opencv для реконструкции видео

Я пробовал использовать документацию по pycam 3.13. Запись в сетевой поток, где клиентом является pycam, которая отправляет видео H.264 через сокет, а сервер постепенно считывает файловый объект и перенаправляет данные на видеоплеер. Код работает "из коробки".

Клиентская сторона из приведенного выше примера кажется мне идеальным решением, поскольку я использую pizero для захвата видео, и этот подход отправляет данные без какой-либо дополнительной обработки на стороне передатчика. Таким образом, клиент постоянно отправляет данные:

      camera.start_recording(socket_connection, format='h264')
while(True):
  # break
camera.stop_recording

С другой стороны, получатель считывает данные через сокет из файлового объекта и передает поток данных проигрывателю:

      # server reads data from file-like object
connection = server_socket.accept()[0].makefile('rb')
cmdline = ['mplayer', '-fps', '25', '-cache', '1024', '-']
player = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
while True:
    # Repeatedly read 1k of data from the connection and write it to
    # the media player's stdin
    data = connection.read(1024)
    if not data:
        break
    player.stdin.write(data)

Плеер «знает», как декодировать видео из полученных данных, но если я хочу сохранить видео в файл и / или обработать / изменить его размер на стороне получателя , мне нужно будет знать, как восстанавливать кадры.

Конечная цель - получить данные видеопотока и затем сохранить их в стандартный видеофайл, одновременно уменьшая размер видео и передавая его дальше по сети. Я нашел много решений , как это и учебники , как это о том , как отправить / получить видео с помощью OpenCV, но я не могу понять, как настроить их для моего конкретного случая. Насколько я понимаю, cv2.VideoCapture() может захватывать только с камеры или файла. Но поскольку у меня есть непрерывный видеопоток, который я получаю кусками по 1024 байта (как в приведенном выше примере),

  1. Как я могу перенаправить эти фрагменты данных в функции opencv, то есть cv2.VideoCapture(), для захвата и обработки видео?
  2. Есть ли другой способ реконструировать видео, предполагая, что сторона передатчика осталась неизменной?

0 ответов

Другие вопросы по тегам