#ffmpeg
Вопрос:
Я пытаюсь записать свою веб-камеру с помощью FFmpeg.
Я перечислил устройства с этой строкой:
ffmpeg -list_devices true -f dshow -i dummy
И я проверяю настройки с помощью этого:
ffplay -loglevel verbose -f dshow -rtbufsize 100M -video_size 1280x720 -framerate 60 -video_device_number 0 -audio_device_number 0 -i video="C922 Pro Stream Webcam":audio="Microphone (C922 Pro Stream Web"
Первая команда выводит это:
ffmpeg version n4.4-10-g75c3969292 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10-win32 (GCC) 20210408
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
[dshow @ 000000000035a000] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000000000035a000] "C922 Pro Stream Webcam"
[dshow @ 000000000035a000] Alternative name "@device_pnp_\?usb#vid_046damp;pid_085camp;mi_00#9amp;1da24acamp;0amp;0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}global"
[dshow @ 000000000035a000] DirectShow audio devices
[dshow @ 000000000035a000] "Microphone (C922 Pro Stream Web"
[dshow @ 000000000035a000] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}Microphone (C922 Pro Stream Web"
[dshow @ 000000000035a000] "Microphone (Realtek High Defini"
[dshow @ 000000000035a000] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}Microphone (Realtek High Defini"
dummy: Immediate exit requested
И второе, это:
ffplay version n4.4-10-g75c3969292 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 10-win32 (GCC) 20210408
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Initialized direct3d renderer.
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
dshow passing through packet of type video size 170103 timestamp 2074640340000 orig timestamp 2074640336004 graph timestamp 2074640340000 diff 3996 C922 Pro Stream Webcam
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
dshow passing through packet of type video size 166381 timestamp 2074640500000 orig timestamp 2074640502670 graph timestamp 2074640500000 diff -2670 C922 Pro Stream Webcam
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
dshow passing through packet of type video size 173348 timestamp 2074640820000 orig timestamp 2074640816017 graph timestamp 2074640820000 diff 3983 C922 Pro Stream Webcam
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
...
Однако, если я использую удлинитель USB — кабеля (USB через UTP-эта штука состоит из двух частей: первая имеет разъем, вторая-разъем USB A, и они соединены через разъемы RJ45 и кабель Cat5e UTP), он вообще не работает. Первая команда выводит то же самое:
ffmpeg version n4.4-10-g75c3969292 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10-win32 (GCC) 20210408
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
[dshow @ 000000000039a000] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000000000039a000] "C922 Pro Stream Webcam"
[dshow @ 000000000039a000] Alternative name "@device_pnp_\?usb#vid_046damp;pid_085camp;mi_00#9amp;1da24acamp;0amp;0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}global"
[dshow @ 000000000039a000] DirectShow audio devices
[dshow @ 000000000039a000] "Microphone (C922 Pro Stream Web"
[dshow @ 000000000039a000] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}Microphone (C922 Pro Stream Web"
[dshow @ 000000000039a000] "Microphone (Realtek High Defini"
[dshow @ 000000000039a000] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}Microphone (Realtek High Defini"
dummy: Immediate exit requested
Но второй сбой с «Не удалось установить параметры видео»:
ffplay version n4.4-10-g75c3969292 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 10-win32 (GCC) 20210408
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Initialized direct3d renderer.
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
[dshow @ 00000000004de180] Could not set video options
video=C922 Pro Stream Webcam:audio=Microphone (C922 Pro Stream Web: I/O error
В чем может быть проблема? Это удлинительный кабель? Каковы требования FFmpeg к USB-кабелям (и удлинителям)?
Ответ №1:
Это не проблема программного обеспечения/конфигурации — это чисто электрическая проблема. Я предполагаю, что у вас есть пассивные адаптеры USB через Ethernet, которые преобразуют только проводку, не касаясь самого сигнала. 5-10 метров-это реалистичный максимум, который вы можете ожидать от такого кабеля (я проверил на себе с помощью iPhone и Mac Mini).
Могут помочь активные адаптеры USB через Ethernet. Они работают совершенно по — другому и полностью прозрачны как для хоста, так и для гостевого устройства-дополнительная настройка не требуется.
Для получения подробной информации об ограничениях USB-кабелей см. Этот ответ https://superuser.com/a/64747/416084
Комментарии:
1. И как я могу отличить активный USB через Ethernet от пассивного? Я прочитал описание многих продуктов, и ни в одном из них не говорится ни об активном, ни о пассивном.
2. Активным в большинстве случаев требуется дополнительный источник питания (5 В от USB недостаточно).