android(linux)控制uvc摄像头实现ptz

android (linux) control uvc camera to implement ptz

我想从 android 控制 ptz 摄像机,实际上我在 jni 中这样做并使用 linux api,摄像机连接到 android-tvbox's直接usb接口,下面是代码:

    struct v4l2_ext_control xctrls[1];
    struct v4l2_ext_controls ctrls;

    memset(xctrls, 0, sizeof xctrls);
    memset(&ctrls, 0, sizeof ctrls);
    xctrls[0].id = V4L2_CID_PAN_ABSOLUTE;
    xctrls[0].value = 20;
    ctrls.ctrl_class = V4L2_CTRL_CLASS_CAMERA;
    ctrls.count = 1;
    ctrls.controls = xctrls;
    //xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
    int result = ioctl(fd, VIDIOC_S_CTRL, &ctrls);
    //LOGE("Cannot identify:%d , %d, %s", result, errno, strerror (errno));
    LOGE("Cannot open '%d': %d, %s", result, errno, strerror (errno));

它 return 无效参数,谁能告诉我哪个参数是错误的?或者我的代码不正确...

我已经解决了这个问题。实际上,您需要在 UVC (USB Video Class) 模块中设计 Android 源代码,而 UVC 位于整个 android 源代码的内核中。

另外,你要和摄像机的厂商合作,因为他们对云台摄像机的固件有很深的了解,Android的UVC版本应该适用于摄像机固件,数据长度和控制类型(绝对或相对)。

此外,Android内核的版本一般是3.10。当你用absolute控制camera时,它可能会朝一个方向移动,但不会朝另一个方向移动,因为absolute的UVC控制参数是无符号的,你应该改成有符号参数。Android

relative控制时稍微复杂一些,需要在Android源代码中加入relative控制,因为3.10的Android内核不支持。您可以获得 Linux 内核补丁以添加相对移动。