v4l2loopback 장치의 해상도/기능을 동적으로 변경하는 방법은 무엇입니까?

v4l2loopback 장치의 해상도/기능을 동적으로 변경하는 방법은 무엇입니까?

다른 응용 프로그램이 v4l2loopback 소스를 사용하는 동안 광고된 해상도/프레임 속도에서 다른 해상도/프레임 속도로 전환하려고 합니다. 예를 들어 1920x1080 검은 화면 비디오를 에 입력한 /dev/video2다음 vlc. 이것은 잘 작동합니다:

$ ffmpeg -f lavfi -i color=c=black:s=1920x1080:r=25/1 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video2
$ ffmpeg -f v4l2 -list_formats all -i /dev/video2
ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.1.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[video4linux2,v4l2 @ 0x55864f9b06c0] Raw       :     yuv420p :     Planar YUV 4:2:0 : 1920x1080
/dev/video2: Immediate exit requested

그러나 이전 피드를 종료한 다음 다른 해상도를 장치로 스트리밍해도 광고된 기능은 변경되지 않고 vlc의 화면만 엉망이 됩니다.

$ ffmpeg -f lavfi -i color=c=black:s=1280x800:r=25/1 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video2

# The list_formats options are still the same (only 1920x1080)
# vlc shows a green instead of a black screen

이 설정을 즉시 변경할 수 있나요?

답변1

장치가 켜져 있는 동안에는 해상도(및 형식)가 고정됩니다.

따라서 귀하의 질문에 대한 대답은 다음과 같습니다. 아니요, 이러한 설정은 즉시 변경할 수 없습니다.

(새 소비자를 시작하기 전에 모든 소비자를 종료하지 않는 한(귀하의 경우: VLC) ffmpeg; 그러나 이것이 "인스턴트"라고 부르는 것이 아닙니다.)

이는 V4L2 API의 제한 사항으로, 추가 응용 프로그램에 해상도/형식 변경 사항을 알릴 수 없습니다.

문제가 있는 것 같습니다 ffmpeg.

  • 변경할 수 없는 경우 출력 프레임 크기를 조정하세요.
  • 아니면 달리기를 거부하거나

(이것은 모듈의 버그일 수도 있지만 v4l2loopback(프레임 크기가 변경되지 않았다고 올바르게 보고하지 않음) GStreamer를 사용하면 예상대로 작동하는 것 같아서 확실하지 않습니다.)

관련 정보