Запись веб-камеры с помощью FFmpeg через USB через UTP

#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 недостаточно).