Я пытаюсь записать видео с карты PCI, Blackmagic DeckLink Mini Recorder, через 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 не хватает этой man-страницы, но у него есть несколько /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 only device» не осталось, от cat или ffmpeg.
Нет ссылки на палубу
ffmpeg -f decklink ...
завершается с Unknown input format: 'decklink'
.
Ни чёрный, ни колода, ни ссылка не упоминаются ffmpeg -devices
(fbdev, lavfi, oss, v4l2) и ffmpeg -formats
(около 350), ни для собственной версии Ubuntu 3.4.4-0ubuntu0.18.04.1, ни для версия N-93330-g7ff89574c7, скомпилированная из исходного кода в 2019 году 13 марта:
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-nonfree --disable-doc --disable-w32threads --enable-pthreads
(Хотя в ./configure --help
упоминается --enable-decklink
, с использованием того, что привело к "ОШИБКА: DeckLinkAPI.h не найден". updatedb && locate DeckLinkAPI.h
также не находит файл с таким именем.)
PCI-карта DeckLink распознается hwinfo
и lspci
.
lsmod
сообщает о загруженных модулях blackmagic
и blackmagic_io
.
Возможно, карта PCI установлена нормально, но ffmpeg просто не может достучаться до нее, потому что я не могу настроить ее для этого.
Редактировать: Перезагрузка ничего не исправила.