Перенаправить фрагменты видеоданных из сокета в 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 байта (как в приведенном выше примере),
- Как я могу перенаправить эти фрагменты данных в функции opencv, то есть cv2.VideoCapture(), для захвата и обработки видео?
- Есть ли другой способ реконструировать видео, предполагая, что сторона передатчика осталась неизменной?