当前位置:首页 » 安卓系统 » androiduvccamera

androiduvccamera

发布时间: 2022-05-03 22:50:16

安卓系统手机怎么装uvc

具体可以参考如下操作:

1、首先下载个安卓USB检测程序,插入UVC摄像头,在程序中检测看是在/dev/video中新增了节点,还是在/bus/usb下新增了节点,如果没新增video节点,则没有UVC驱动;

2、如果没有新增节点,有3个办法:一是自己写一个video固件,通常平板上都有前后两个摄像头,video0和video1都已经被占用,是无法通过这两个来调用外置摄像头的;二是干掉一个前置或者后置摄像头,这样就可以让外置USB用video0或video1来启动,这就是为什么在没有摄像头的安卓上能成功;三是找到系统的源码,配置其中的UVC驱动,编译后再安装;

3、如果新增了节点那就好办了,如果板子上已经有2个摄像头,自己写个程序调用ID为3的camera就好了;如果没有2个摄像头,那直接用系统自带的相机程序前后切换就可以看到USB的信息了。如果是AV通过采集卡转换的UVC,还能在相机应用里看;

② Android手机通过otg线外接usb摄像头需要怎么做

若手机支持OTG功能,可以通过OTG连接线实现手机与U盘、鼠标、键盘连接等操作来进行数据交换。

用法:

通过OTG转接线将U盘和您的手机相连接,就可以使用了。

③ android怎么获取usb camera的数据

Android camera采集到的可以是yuv420sp也可以食yuv420p。我知道yuv420中yuv的分布。现在主要有个前提是从Android Camera 中采集到的yuv420数据,这个byte[]的长度是一倍的视频宽高乘积,不是1.5倍。在jni里面获取到的长度又确实是1.5倍,但是在jni里面转换为jbyte* 的长度还是1倍,就不知道怎么弄了~

④ GL USB2.0 UVC Camera Device怎么卸载

什么牌子型号的摄像头?gl一般是图形程序库,OpenGl是图形显示,删不得,usb2.0也删不得,uvc+camera+device没必要也删不得,这都是摄像头底层驱动,删掉了系统不能正常运行的!一般摄像头都是免驱动的了,老式摄像头才需要驱动,用驱动之家选择品牌名称摄像头可删除!

⑤ 如何更改安卓的camera hel层,使之支持uvc摄像头

实现的方法有很多种,按步骤来看适合哪一种,网上说什么接采集卡,其实就是把AV转成UVC,现在市面上很多摄像头直接就已经是UVC的了,在windows上面即插即用。

安卓也是Linux,这个就好办了。

  1. 首先个安卓USB检测程序,插入UVC摄像头,在程序中检测看是在/dev/video中新增了节点,还是在/bus/usb下新增了节点。如果没新增video节点,则没有UVC驱动。如果你有很多个usb口子,可以连电脑,在adb shell中输入ls -l /dev/v*,查看是否生成了新的节点。

2.如果没有新增节点,有3个办法。1是自己写一个video固件,通常平板上都有前后两个摄像头,video0和video1都已经被占用,是无法通过这两个来调用外置摄像头的。2是干掉一个前置或者后置摄像头,这样就可以让外置USB用video0或video1来启动,这就是为什么在没有摄像头的安卓上能成功。3是找到系统的源码,配置其中的UVC驱动,编译后再安装。

3如果新增了节点那就好办了,如果板子上已经有2个摄像头,自己写个程序调用ID为3的camera就好了;如果没有2个摄像头,那直接用系统自带的相机程序前后切换就可以看到USB的信息了。如果是AV通过采集卡转换的UVC,还能在相机应用里看DVD(*^__^*) 嘻嘻。

常见的一些问题:

新增的固件无法访问。其实就是Linux的权限问题,只要权限是0666以上就可以了。chmod 0666 /dev/video3 或者 chmod 777 /dev/video3 ,video几是看你新增的是哪个。

⑥ android app 如何与uvc摄像头通讯

来看看是怎么操作UVC摄像头的吧.我们实现了一个专门检测UVC摄像头的服务:UVCCameraService类,主要代码如下:
监听
mUSBMonitor = new USBMonitor(this, new USBMonitor.OnDeviceConnectListener() { @Override
public void onAttach(final UsbDevice device) {
Log.v(TAG, "onAttach:" + device);
mUSBMonitor.requestPermission(device);
} @Override
public void onConnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock, final boolean createNew) {
releaseCamera(); if (BuildConfig.DEBUG) Log.v(TAG, "onConnect:"); try { final UVCCamera camera = new MyUVCCamera();
camera.open(ctrlBlock);
camera.setStatusCallback(new IStatusCallback() { // ... uvc 摄像头链接成功

Toast.makeText(UVCCameraService.this, "UVCCamera connected!", Toast.LENGTH_SHORT).show(); if (device != null)
cameras.append(device.getDeviceId(), camera);
}catch (Exception ex){
ex.printStackTrace();
}
} @Override
public void onDisconnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock) { // ... uvc 摄像头断开链接
if (device != null) {
UVCCamera camera = cameras.get(device.getDeviceId()); if (mUVCCamera == camera) {
mUVCCamera = null;
Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();
liveData.postValue(null);
}
cameras.remove(device.getDeviceId());
}else {
Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();
mUVCCamera = null;
liveData.postValue(null);
}
} @Override
public void onCancel(UsbDevice usbDevice) {
releaseCamera();
} @Override
public void onDettach(final UsbDevice device) {
Log.v(TAG, "onDettach:");
releaseCamera();// AppContext.getInstance().bus.post(new UVCCameraDisconnect());
}
});

这个类主要实现UVC摄像头的监听\链接\销毁\反监听.当有UVC摄像头链接成功后,会创建一个mUVCCamera对象.
然后在MediaStream里, 我们改造了switchCamera,当参数传2时,表示要切换到UVCCamera(0,1分别表示切换到后置\前置摄像头).
创建
在创建摄像头时,如果是要创建uvc摄像头,那直接从服务里面获取之前创建的mUVCCamera实例:
if (mCameraId == 2) {
UVCCamera value = UVCCameraService.liveData.getValue(); if (value != null) { // uvc camera.
uvcCamera = value;
value.setPreviewSize(width, height,1, 30, UVCCamera.PIXEL_FORMAT_YUV420SP,1.0f); return; // value.startPreview();
}else{
Log.i(TAG, "NO UVCCamera");
uvcError = new Exception("no uvccamera connected!"); return;
} // mCameraId = 0;
}123456789101112131415

预览
在预览时,如果uvc摄像头已经创建了,那执行uvc摄像头的预览操作:
UVCCamera value = uvcCamera;if (value != null) {
SurfaceTexture holder = mSurfaceHolderRef.get(); if (holder != null) {
value.setPreviewTexture(holder);
} try {
value.setFrameCallback(uvcFrameCallback, UVCCamera.PIXEL_FORMAT_YUV420SP/*UVCCamera.PIXEL_FORMAT_NV21*/);
value.startPreview();
cameraPreviewResolution.postValue(new int[]{width, height});
}catch (Throwable e){
uvcError = e;
}
}1234567891011121314

这里我们选的colorFormat为PIXEL_FORMAT_YUV420SP 相当于标准摄像头的NV21格式.
关闭预览
同理,关闭时,调用的是uvc摄像头的关闭.
UVCCamera value = uvcCamera; if (value != null) {
value.stopPreview();
}1234

销毁
因为我们这里并没有实质性的创建,所以销毁时也仅将实例置为null就可以了.
UVCCamera value = uvcCamera;if (value != null) { // value.destroy();
uvcCamera = null;
}12345

有了这些操作,我们看看上层怎么调用,
首先需要在Manifest里面增加若干代码,具体详见UVCCamera工程说明.如下:
<activity android:name=".UVCActivity" android:launchMode="singleInstance">

<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />

</activity>

然后,的代码在UVCActivity里,这个类可以在library分支的myapplication工程里找到.即这里.
启动或者停止UVC摄像头推送:
public void onPush(View view) { // 异步获取到MediaStream对象.
getMediaStream().subscribe(new Consumer<MediaStream>() { @Override
public void accept(final MediaStream mediaStream) throws Exception { // 判断当前的推送状态.
MediaStream.PushingState state = mediaStream.getPushingState(); if (state != null && state.state > 0) { // 当前正在推送,那终止推送和预览
mediaStream.stopStream();
mediaStream.closeCameraPreview();
}else{ // switch 0表示后置,1表示前置,2表示UVC摄像头
// 异步开启UVC摄像头
RxHelper.single(mediaStream.switchCamera(2), null).subscribe(new Consumer<Object>() { @Override
public void accept(Object o) throws Exception { // 开启成功,进行推送.
// ...
mediaStream.startStream("cloud.easydarwin.org", "554", id);
}
}, new Consumer<Throwable>() { @Override
public void accept(final Throwable t) throws Exception { // ooop...开启失败,提示下...
t.printStackTrace();
runOnUiThread(new Runnable() { @Override
public void run() {
Toast.makeText(UVCActivity.this, "UVC摄像头启动失败.." + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
});
}

这样,整个推送就完成了.如果一切顺利,应当能在VLC播放出来UVC摄像头的视频了~~
我们再看看如何录像.也非常简单…
public void onRecord(View view) { // 开始或结束录像.
final TextView txt = (TextView) view;
getMediaStream().subscribe(new Consumer<MediaStream>() { @Override
public void accept(MediaStream mediaStream) throws Exception { if (mediaStream.isRecording()){ // 如果正在录像,那停止.
mediaStream.stopRecord();
txt.setText("录像");
}else { // 没在录像,开始录像...
// 表示最大录像时长为30秒,30秒后如果没有停止,会生成一个新文件.依次类推...
// 文件格式为test_uvc_0.mp4,test_uvc_1.mp4,test_uvc_2.mp4,test_uvc_3.mp4
String path = getExternalFilesDir(Environment.DIRECTORY_MOVIES) + "/test_uvc.mp4";
mediaStream.startRecord(path, 30000); final TextView pushingStateText = findViewById(R.id.pushing_state);
pushingStateText.append("\n录像地址:" + path);
txt.setText("停止");
}
}
});
}21

UVC摄像头还支持后台推送,即不预览的情况下进行推送,同时再切换到前台继续预览.只需要调用一个接口即可实现,如下:
@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
ms.setSurfaceTexture(surfaceTexture); // 设置预览的surfaceTexture}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
ms.setSurfaceTexture(null); // 设置预览窗口为null,表示关闭预览功能
return true;
}123456789

如果要彻底退出uvc摄像头的预览\推送,那只需要同时退出服务即可.
public void onQuit(View view) { // 退出
finish(); // 终止服务...
Intent intent = new Intent(this, MediaStream.class);
stopService(intent);
}1234567

## 获取更多信息 ##

⑦ android设备插上uvc摄像头后,怎么确定设备的节点

<6>[ 812.] usb 1-2.3.4: new high-speed USB device number 8 using s5p-ehci

<6>[ 812.] usb 1-2.3.4: New USB device found, idVendor=1908, idProct=23
10
<6>[ 812.] usb 1-2.3.4: New USB device strings: Mfr=1, Proct=2, SerialN
umber=3
<6>[ 812.] usb 1-2.3.4: Proct: USB2.0 PC CAMERA
<6>[ 812.] usb 1-2.3.4: Manufacturer: Generic
<6>[ 812.] usb 1-2.3.4: SerialNumber:
<6>[ 812.] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (1908:2310)
<6>[ 812.] input: USB2.0 PC CAMERA as /devices/platform/s5p-ehci/usb1/1-2
/1-2.3/1-2.3.4/1-2.3.4:1.0/input/input6

⑧ android中怎么启动camera

Android中启动camera相机,原理是直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可。如下代码:

java">在菜单或按钮的选择操作中调用如下代码,开启系统自带CameraAPP,并传递一个拍照存储的路径给系统应用程序,具体如下:
imgPath="/sdcard/test/img.jpg";
//必须确保文件夹路径存在,否则拍照后无法完成回调
FilevFile=newFile(imgPath);//新建一个File类,也就是照片保存的位置
if(!vFile.exists())//判断该文件是否存在
{
FilevDirPath=vFile.getParentFile();//newFile(vFile.getParent());
vDirPath.mkdirs();
}
Uriuri=Uri.fromFile(vFile);//文件在android系统中uri地址
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//打开相机
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//发送意图,启动相机
startActivityForResult(intent,SystemCapture);//启动完成,返回值接收

⑨ usb2.0 uvc camera什么意思

用于USB接口‘驱动程序’你要是卸了所有的U盘、移动硬盘、MP3、MP4、手机内存卡就都不能用了,千万别卸载啊。

热点内容
android添加sdk 发布:2025-05-15 08:59:20 浏览:5
oracle数据导入sql 发布:2025-05-15 08:55:00 浏览:49
最适合做的脚本 发布:2025-05-15 08:54:27 浏览:380
太原php培训班 发布:2025-05-15 08:41:38 浏览:937
豌豆服务器地址 发布:2025-05-15 08:34:56 浏览:712
linux下php编译安装 发布:2025-05-15 08:30:37 浏览:592
c语言八进制十六进制 发布:2025-05-15 08:22:17 浏览:282
华为安卓如何更新鸿蒙 发布:2025-05-15 08:18:52 浏览:373
工商密码器是什么 发布:2025-05-15 08:18:50 浏览:752
c语言自考 发布:2025-05-15 07:52:42 浏览:501