我想从android控制一个ptz相机,实际上我在jni中使用linux api,相机直接连接到android-tvbox的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));
并返回无效参数,有人能告诉我哪个参数错误吗?或者我的代码不正确......
答案 0 :(得分:0)
我已经解决了这个问题。实际上,你需要在UVC(USB视频类)模块中设计你的Android源代码,而UVC位于整个android源代码的内核中。
更重要的是,您必须与相机的供应商合作,因为他们对PTZ相机的固件有深入的了解,Android的UVC版本应该适用于相机固件,数据长度和控制类型(绝对或相对)。
此外,Android内核版本一般为3.10。当您使用绝对控制来控制摄像机时,它可能会向一个方向移动而不是另一个方向,因为绝对的Android UVC控制参数是无符号的:您应该将其更改为已签名的参数。
当你控制相对时,它有点复杂,因为你应该在Android源代码中添加相对控制,因为3.10中的Android内核不支持它。您可以获取Linux内核补丁以添加相对移动。