我正在尝试使用 gstreamer 通过 wifi 将 H.264 网络摄像头视频源发送到另一台计算机。我正在使用这个教程作为指南。我使用 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'(压缩),就像在我链接到的教程中一样。
我正在运行内核版本为 3.5.0 的 Ubuntu 12.1,有人知道我的问题是什么吗?我想在 MJPG 上使用 H.264 来节省带宽。有人知道为什么它检测不到 H.264 吗?谢谢。
答案1
TL;DR:运行
v4l2-ctl --list-devices
检查您的相机是否枚举多个实例。H.264 支持可能在其中一个备选实例上。在我的相机上,我最终需要使用 /dev/video2 而不是 video0。
我有这台相机(SVPRO 手动变焦 USB 摄像头 2.8-12mm 镜头 1080P 高清 USB 网络摄像头 2MP 低光配备索尼 IMX322 传感器便携式 USB 摄像头带金属外壳)。
它声称支持 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
显然 video2 支持 H.264:
# 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)
因此我连接了运动来使用video2。
答案2
我认为问题可能是 Creative Live! Connect HD cam 仅支持相当过时的 UVC1.1;因此 V4l2 驱动程序可能无法识别它。请参阅维基百科的条目原生 H.264 支持的网络摄像头
答案3
两种不同的像素格式(MJPG 和 YUYV)表明相机可以支持这些格式。MPEG 用于编码数据包(通常用于通过网络发送到接收端),YUYV 用于 RAW(未压缩)图像,通常用于本地预览。但是,您可以在 VIDIOC_S_FMT 中使用 H.264 来获取 H.264 编码流。