У меня есть два USB-устройства, подключенных к RPi, оба отображаются как обычно как / dev / video0. Вот некоторая дополнительная информация, поступающая с двух входов командной строки:
Устройство 1, только видео (подключено к RPi4):
ffmpeg -f v4l2 -list_formats all -i /dev/video0
отчеты
[video4linux2,v4l2 @ 0xe5e1c0] Compressed: mjpeg :
Motion-JPEG : 1280x720 640x480 320x240
v4l2-ctl --list-formats-ext
сообщает
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Stepwise 0.033s - 0.033s with step 0.000s
(30.000-30.000 fps)
Size: Discrete 640x480
Interval: Stepwise 0.033s - 0.033s with step 0.000s
(30.000-30.000 fps)
Size: Discrete 320x240
Interval: Stepwise 0.033s - 0.033s with step 0.000s
(30.000-30.000 fps)
Работает: ffmpeg -f v4l2 -i /dev/video0 -vcodec h264_omx -preset ultrafast -tune zerolatency -g 300 -b:v 1M -mpegts_service_type advanced_codec_digital_hdtv -f mpegts udp://OtherMachine:Port?pkt_size=1316
Устройство 2, видео и аудио (подключено к RPi3, но не работает на RPi4):
ffmpeg -f v4l2 -list_formats all -i /dev/video0
отчеты
[video4linux2,v4l2 @ 0x2c41210] Compressed: mjpeg :
Motion-JPEG : 1920x1080 1280x720
v4l2-ctl --list-formats-ext
отчеты
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1920x1080
Interval: Discrete 0.033s
(30.000 fps)
Interval: Discrete 0.067s
(15.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s
(30.000 fps)
Interval: Discrete 0.067s
(15.000 fps)
После довольно утомительной работы и слишком много часов я запустил эту работу:
Только видео : ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy -preset ultrafast -tune zerolatency -g 300 -f matroska udp://OtherMachine:Port?pkt_size=1316
Не работает вообще: ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy -preset ultrafast -tune zerolatency -g 300 -f mpegts udp://OtherMachine:Port?pkt_size=1316
, в "OtherMachine" я вижу, что есть входящий поток данных через VL C, но он не может быть переварен должным образом.
Только аудио: ffmpeg -f alsa -thread_queue_size 1024 -i plughw:1 -c:a mp2 -ac 2 -ar 44100 -preset ultrafast -tune zerolatency -b:a 128K -f mpegts udp://OtherMachine:Port?pkt_size=1316
Но это тоже не работает:
ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -f alsa -thread_queue_size
1024 -i plughw:1 -c:v copy -c:a mp2 -ac 2 -ar 44100 -preset ultrafast -tune zerolatency -g 300 -b:a 128K -f mpegts udp://OtherMachine:Port?pkt_size=1316
Не могли бы вы дать подсказку о том, как получить эти два потоки для устройства 2 работают вместе? Оба они получены от одного и того же оборудования / устройства, я предполагаю, что видеопоток MJPG каким-то образом не полностью соответствует стандарту mpegts (как и для устройства 1), поскольку он работает с matroska, но не с mpegts. Может ли это быть? Что нужно сделать в этом случае?
Еще один совет, с такой же настройкой оборудования, как я могу это сделать
cvlc -vvv v4l2:///dev/video0 --input-slave=alsa://plughw:1,0 --sout='#transcode{acodec=mpga,ab=128}:std{access=http,mux=asf,dst=:Port}'
Итак, мое понимание это видео передается без изменений (mjpeg), а аудио транскодируется через mpga vl c, что, по-видимому, соответствует mp2 для ffmpeg. Формат контейнера asf, но я не смог запустить его с помощью ffmpeg без видимой причины. В любом случае, захват этого широковещательного потока vl c через http://StreamingMachine: порт на любом другом компьютере в моей сети работает нормально. Но как этого добиться с помощью ffmpeg напрямую и, возможно, не как http: //, а как udp: // или pipe pipe?
В качестве альтернативы, позвольте мне задать этот вопрос: учитывая, что у меня также есть входящий видеопоток mjpeg в качестве входящего аудиопотока в формате mp2, какой формат контейнера (хорошо, это явно не mpegts) является наиболее подходящим для объединения потоков через мою локальную сеть или даже в канал для дальнейшей обработки? Поверьте мне, я старался изо всех сил в течение нескольких часов, чтобы выяснить, как действовать, но безуспешно. По крайней мере, насколько мне известно, нет ничего такого, как таблица с ответами на вопросы такого рода.
Я был бы рад получить некоторые идеи.
Лучший