Skip to content

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.mkv

V4L2 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格式分辨率帧率
MJPGMJPEG 压缩1920×108060fps
YUYVYUV 4:2:2 原始1920×108030fps (USB 2.0 限制)
NV12YUV 4:2:01920×108030fps

GStreamer

bash
# 采集 1080P@60 MJPEG → 显示
gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1920,height=1080,framerate=60/1 ! jpegdec ! autovideosink

视端威科技 — 视频处理芯片与智能视觉解决方案提供商