v4l2 проблемы с веб-камерой, закодированной в H.264

Я пытаюсь отправить видео с веб-камеры H.264 через Wi-Fi на другой компьютер с помощью gstreamer. Я использую этот учебник в качестве руководства. Я использую Creative Live! Cam Connect HD в качестве моей веб-камеры. Сайт утверждает, что веб-камера имеет встроенный кодер H.264. Но когда я использовал v4l2-ctl, я получил следующее:

$ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
 ...
Index       : 1
Type        : Video Capture
Pixel Format: 'MJPG' (compressed)
Name        : MJPEG

Но когда я использую флаг --all, я получаю другой формат пикселей.

v4l2-ctl -d 1 --all
Driver Info (not using libv4l2):
Driver name   : uvcvideo
Card type     : Live! Cam Connect HD VF0750
Bus info      : usb-0000:00:14.0-1
Driver version: 3.5.7
Capabilities  : 0x04000001
    Video Capture
    Streaming
Format Video Capture:
Width/Height  : 640/360
Pixel Format  : 'YUYV'
Field         : None
Bytes per Line: 1280
Size Image    : 460800
Colorspace    : SRGB
 ...

Я не уверен, почему я получаю два разных формата пикселей (MJPG и YUYV), но я ожидал увидеть формат пикселей: "H264" (сжатый), как в учебнике, с которым я связан.

Я использую Ubuntu 12.1 с версией ядра 3.5.0. Кто-нибудь знает, какие у меня проблемы? Я хотел бы использовать H.264 вместо этого на MJPG, чтобы сэкономить на пропускной способности. Есть идеи, почему он не обнаруживает H.264? Благодарю.

3 ответа

TL;DR: беги

      v4l2-ctl --list-devices

чтобы проверить, перечисляет ли ваша камера несколько экземпляров. Поддержка H.264 может быть в одном из альтернативных экземпляров. На моей камере мне пришлось использовать /dev/video2 вместо video0.

Я получил эту камеру (USB-камера SVPRO с ручной фокусировкой и масштабированием, объектив 2,8–12 мм, 1080P HD, USB-веб-камера, 2 МП, слабое освещение, портативная USB-камера с датчиком Sony IMX322 и металлическим корпусом).

Он утверждает, что поддерживает H.264, но когда я запускаю

      v4l2-ctl --list-formats-ext

Я получаю только форматы MJPG и YUYV.

      # v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : Motion-JPEG
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
... 

        Index       : 1
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
 ...

Но потом я понял, что камера перечисляет несколько устройств:

      # v4l2-ctl --list-devices
H264 USB Camera: USB Camera (usb-0000:00:14.0-3):
        /dev/video0
        /dev/video1
        /dev/video2
        /dev/video3

Судя по всему поддержка H.264 есть на видео2:

      # v4l2-ctl -d2 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'H264' (compressed)
        Name        : H.264
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)

Поэтому я подключил motion к использованию video2.

Я думаю, что проблема может быть в том, что Creative Live! Connect HD cam поддерживает только UVC1.1, который довольно устарел; так что, возможно, драйвер V4l2 не распознает его. См. Статью Википедии о поддерживаемых веб-камерах, поддерживаемых h.264.

Два разных формата пикселей (MJPG и YUYV) показывают, что камера может поддерживать эти форматы. MPEG для закодированных пакетов (обычно используется для отправки по сети на сторону получателя) и YUYV для изображения RAW (без сжатия), который обычно используется для локального просмотра. Однако вы можете использовать H.264 в VIDIOC_S_FMT, чтобы получить кодированный поток H.264.

Другие вопросы по тегам