Я пытаюсь получить кадры H264 с веб-камеры USB, подключенной к Raspberry PI
. С помощью модуля камеры RPi я могу запустить следующую команду, чтобы получить данные H264, выводимые в stdin: raspivid -t 0 -w 640 -h 320 -fps 15 -o -
с близка к нулю латентность
Есть ли эквивалентная функция для этого с камерой USB?У меня есть две USB-камеры, с которыми я хотел бы сделать это.
Используя ffprobe /dev/videoX
, я получаю следующий вывод: (коротко до важных деталей):
$ ffprobe /dev/video0
...
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 18876.273861, bitrate: 147456 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 147456 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
$ ffprobe /dev/video1
...
Input #0, video4linux2,v4l2, from '/dev/video1':
Duration: N/A, start: 18980.783228, bitrate: 115200 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 800x600, 115200 kb/s, 15 fps, 15 tbr, 1000k tbn, 1000k tbc
$ ffprobe /dev/video2
...
Input #0, video4linux2,v4l2, from '/dev/video2':
Duration: N/A, start: 18998.984143, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1920x1080, -5 kb/s, 30 fps, 30 tbr, 1000k tbn, 2000k tbc
НасколькоЯ могу сказать, что два из них не H264, который нужно будет "декодировать" до H264, поэтому я понимаю, что там добавлена небольшая задержка.Но третий (video2) - это H264, поэтому я смогу получить от него данные?Я пытался просто передать это с помощью CAT, но там говорится, что у меня неверные аргументы.
Я дошел до того, что использование FFMPEG может быть единственным вариантом здесь.Хотелось бы использовать программное обеспечение, легко доступное для всех RPi (apt install).
Дополнительный вопрос, касающийся пакетов H264: Когда я передаю данные из команды raspivid в мой декодер, он работает отлично.Но если я решу отбросить 10 первых пакетов, он никогда не инициализирует процесс декодирования и просто показывает черный фон.Кто-нибудь знает, что может отсутствовать в первых пакетах, которые я мог бы воссоздать в своем программном обеспечении, поэтому мне не нужно перезапускать поток для каждого вновь подключенного пользователя?
РЕДАКТИРОВАТЬ: Бонусный вопрос Ответ: После поисков вокруг я вижу, что первые два кадра raspivid
посылают мне.Таким образом, игнорируя два первых кадра, мой декодер не будет «декодировать» должным образом.Поэтому, если я сохраню эти кадры и отправлю их сначала всем новым пользователям, это будет работать отлично.Похоже, они используются в каком-то начальном процессе.
0x27 = 01 00111 = type 7 Sequence parameter set (B-frame)
0x28 = 01 01000 = type 8 Picture parameter set (B-frame)