ffmpeg, /dev/video0, -f 甲板链接

ffmpeg, /dev/video0, -f decklink

我正在尝试通过 ffmpeg 在无头主机 运行 Ubuntu 18.04.2 LTS 上从 PCI 卡 Blackmagic DeckLink Mini Recorder 捕获视频,希望使用类似的命令

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

我怎样才能做到这一点?我有两个障碍。

没有/dev/video0

ffmpeg -i /dev/video0 ... 失败:/dev/video0: No such device or addressv4l2-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的级别被破坏。

关于Ubuntu14,man 8 MAKEDEV提示错误信息的意思是"the kernel does not have the driver configured or loaded."

这个 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,但 "No such device" 仍然存在,来自 cat 或 ffmpeg。

没有套牌link

ffmpeg -f decklink ... 失败 Unknown input format: 'decklink'

ffmpeg -devices(fbdev、lavfi、oss、v4l2)和ffmpeg -formats(约350)都没有提到black、deck和link,要么是为了Ubuntu自己的版本 3.4.4-0ubuntu0.18.04.1,或 2019 年 3 月 13 日从源代码编译的版本 N-93330-g7ff89574c7:

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

(虽然 ./configure --help 提到了 --enable-decklink,但使用 "ERROR: DeckLinkAPI.h not found." updatedb && locate DeckLinkAPI.h 也找不到具有该名称的文件。)

DeckLink PCI 卡被 hwinfolspci 识别。

lsmod 报告加载的模块 blackmagicblackmagic_io.

也许 PCI 卡安装正常,但 ffmpeg 无法访问它,因为我无法为此配置它。

编辑:重新启动没有解决任何问题。

您必须为 Linux 安装“Desktop Video”软件,它支持 x64 和 i386(但不支持 arm)。它将提供 DeckLinkAPI.h 并且 udev 应该会自动在 /etc 中创建视频设备。