Во-первых, встроенная поддержка клавиатуры в VirtualBox (и любом другом диспетчере виртуальных машин )не перенаправляет сигналы USB HID с клавиатуры, а интерпретирует скан-коды, предоставленные ОС, и генерирует эмулированные скан-коды в виртуальной машине (. и это, вероятно, клавиатура PS/2 в виртуальной машине, а не USB ). То же самое относится к мыши и любому другому устройству ввода.
Во-вторых, в разделе 3.10 руководства VirtualBox (, где вы должны искать подобные вещи в первую очередь ), очень четко объясняется, как подключать USB-устройства к виртуальной машине.
Я до сих пор точно не знаю почему, но сработало следующее:
ffmpeg \
-f x11grab \
-video_size 1920x1080 \
-framerate 60 \
-i :0.0 \
-f v4l2 \
-video_size 320x240 \
-framerate 15 \
-i /dev/video0 \
-filter_complex '[0:v]setpts=RTCTIME-RTCSTART[dt];[1:v]setpts=PTS-STARTPTS[wc];[dt][wc]overlay=10:(H-h)/2[o]' \
-map '[o]' \
-r 60 \
-vcodec libx264 \
-an \
-f mpegts \
udp://127.0.0.1:3333
Хотя в документации указано, что RTCTIME
устарело, и большинство людей используют PTS-STARTPTS
, кажется, я заставил поток основываться на времени, а не на числовой последовательности.
Редактировать:
Со следующим фильтром также работает, и я считаю, что он лучше подходит:
[0:v]setpts=N/FRAME_RATE/TB[dt];[1:v]setpts=N/FRAME_RATE/TB,fps=fps=60[wc];[dt][wc]overlay=10:(H-h)/2[o]
Он обеспечивает фиксированную частоту кадров, а также настраивает веб-камеру так, чтобы на выходе она была такой же, как и ожидалось.