EM38180 编程接口
EM38180 通过 UVC 协议暴露标准接口,跨平台开发无需私有 SDK。
OpenCV (Python)
python
import cv2
# 打开 EM38180
cap = cv2.VideoCapture(0) # Linux
# cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # Windows
# 设置参数
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 60)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('EM38180', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()FFmpeg
bash
# Linux: 采集 1080P@60fps YUY2
ffmpeg -f v4l2 -input_format yuyv422 -video_size 1920x1080 -framerate 60 -i /dev/video0 -c:v copy output.mkv
# 采集 MJPEG(节省带宽)
ffmpeg -f v4l2 -input_format mjpeg -video_size 1920x1080 -framerate 60 -i /dev/video0 -c:v copy output.mkv
# Windows: DirectShow
ffmpeg -f dshow -video_size 1920x1080 -framerate 60 -i video="USB Video" -c:v copy output.mkv
# macOS: AVFoundation
ffmpeg -f avfoundation -video_size 1920x1080 -framerate 60 -i "0" -c:v copy output.mkvV4L2 C API (Linux)
c
#include <linux/videodev2.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int fd = open("/dev/video0", O_RDWR);
struct v4l2_capability cap;
ioctl(fd, VIDIOC_QUERYCAP, &cap);
// cap.card = "USB Video"
// cap.driver = "uvcvideo"
struct v4l2_format fmt = {0};
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = 1920;
fmt.fmt.pix.height = 1080;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
fmt.fmt.pix.field = V4L2_FIELD_NONE;
ioctl(fd, VIDIOC_S_FMT, &fmt);支持的像素格式
| FourCC | 格式 | 分辨率 | 帧率 |
|---|---|---|---|
| MJPG | MJPEG 压缩 | 1920×1080 | 60fps |
| YUYV | YUV 4:2:2 原始 | 1920×1080 | 30fps (USB 2.0 限制) |
| NV12 | YUV 4:2:0 | 1920×1080 | 30fps |
GStreamer
bash
# 采集 1080P@60 MJPEG → 显示
gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1920,height=1080,framerate=60/1 ! jpegdec ! autovideosink