ffmpeg, /dev /video0, -f decklink

#ffmpeg #video-capture #ubuntu-18.04

#ffmpeg #захват видео #ubuntu-18.04

Вопрос:

Я пытаюсь захватить видео с PCI-карты, мини-рекордера Blackmagic DeckLink, через ffmpeg, на безголовом хосте под управлением Ubuntu 18.04.2 LTS, надеюсь, с помощью команды типа

 ffmpeg -f decklink -i /dev/video0 ...
  

Как я могу заставить это работать? У меня есть два препятствия.

Нет /dev/video0

ffmpeg -i /dev/video0 ... сбой: /dev/video0: No such device or address . v4l2-ctl --list-devices сбой с тем же сообщением об ошибке.

Я создал /dev / video0, и все выглядит нормально:

 mknod /dev/video0 c 81 0
chown root.video /dev/video0
chmod g rw /dev/video0
  

Чтобы сравнить этот файл с рабочим, я запустил strace cat /dev/video0 на этом хостинге и на другом хосте (Ubuntu 14) с рабочим файлом /dev / video0. Здесь результаты начали отличаться (хорошие, затем плохие):

 fstat(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
open("/dev/video0", O_RDONLY)           = 3  
fstat(3, {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
----

fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
openat(AT_FDCWD, "/dev/video0", O_RDONLY) = -1 ENXIO (No such device or address)
  

Таким образом, /dev / video0 сломан на уровне ниже, чем ffmpeg или v4l2 или даже cat.

В Ubuntu 14 man 8 MAKEDEV предполагает, что сообщение об ошибке означает, что «в ядре не настроен или не загружен драйвер».

На этом хосте Ubuntu 18 отсутствует эта страница руководства, но у него все равно есть несколько /snap/core/*/sbin/MAKEDEV , поэтому я попытался

 /snap/core/6350/sbin/MAKEDEV -n -v video
  

Это создало бы более сотни устройств videoXX, radioXX, VTxxx, vbiXX. Этих устройств еще не существовало, поэтому попытка казалась безвредной.

 rm /dev/video0; /snap/core/6350/sbin/MAKEDEV video
  

Это восстановило /dev / video0, но «Такого устройства» не осталось, из cat или ffmpeg.

Нет decklink

ffmpeg -f decklink ... сбой с Unknown input format: 'decklink' .

Ни black, ни deck, ни link не упоминаются ffmpeg -devices (fbdev, lavfi, oss, v4l2) и ffmpeg -formats (около 350) ни для собственной версии Ubuntu 3.4.4-0ubuntu0.18.04.1, ни для версии N-93330-g7ff89574c7, скомпилированной из исходного кода 13 марта 2019 года:

 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-nonfree --disable-doc --disable-w32threads --enable-pthreads
  

(Хотя ./configure --help упоминается --enable-decklink , использование этого выдало «ОШИБКА: DeckLink.h не найден». updatedb amp;amp; locate DeckLinkAPI.h файл с таким именем также не найден.)

PCI-карта DeckLink распознается hwinfo и lspci .

lsmod сообщает о загруженных модулях blackmagic и blackmagic_io .

Возможно, PCI-карта установлена нормально, но ffmpeg просто не может до нее добраться, потому что я не могу ее для этого настроить.

Редактировать: перезагрузка ничего не исправила.

Комментарии:

1. я удалил v4l2 тег, потому что устройства decklink не поддерживают V4L2.

Ответ №1:

Вам необходимо установить программное обеспечение «Desktop Video» для Linux, которое поддерживает x64 и i386 (но не arm). Он предоставит DeckLink.h, и udev должен автоматически создать видеоустройство в / etc.

Комментарии:

1. Да, я скачал Blackmagic_DeckLink_SDK_10.11.4.zip разархивировал его в /foo, а затем сделал ./configure --enable-decklink --extra-cflags='-I/foo/Blackmagic_DeckLink_SDK_10.11.1/Linux/include' ... amp;amp; make . Затем ./ffmpeg -f decklink -list_formats 1 -i 'DeckLink Mini Recorder' перечисляется дюжина форматов. Теперь я предполагаю, какой формат создает что-то другое, кроме цветных полос. Также похоже, что /dev / video0 вообще не используется. Я приму ответ, когда добьюсь фактического захвата видео.

2. Просто остаток /dev/video0 не имеет ничего общего с Decklink Mini Monitor (или любыми картами decklink). Вероятно, это была (есть) веб-камера или что-то в этом роде, и, вероятно, с драйверами проблемы или они вообще отсутствуют.

3. Для захвата видео просто требовалось угадать, что -format_code xxxx соответствует тому, что передавал кабель hdmi. Похоже, что драйвер Linux предлагает лишь часть форматов, которые рекламирует окно.

4. Моя последняя рабочая команда, к вашему сведению: ./ffmpeg -y -format_code hp60 -f decklink -video_input hdmi -i 'DeckLink Mini Recorder' ...

5. iirc, устройства blackmagic не выполняют никакого (или значительного) преобразования. итак, если вы видите только «часть форматов», то это, скорее всего, потому, что ваш входной поток использует только часть форматов (возможно, только один формат).