android设备连接usb摄像头开源库UVCCamera


-
Android 手机、大屏设备、板子等连接usb摄像头开源库UVCCamera
3.64MB
UVCCamera-master
2017-10-09UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库。linux原生支持,基本支持市面上所有免区USB摄像头。 此开源库包含JNI及android封装的类库。
使用原生的Android Camera API,是不是无法直接使用UVC Camera?_course
2017-06-29使用原生的Android Camera API,是不是无法直接使用UVC Camera?
Android相机视频预览左右镜像显示_course
2015-03-25如何让相机的视频预览时图像左右镜像显示?
UVCCamera摄像头按钮_course
2018-07-25通过UVCCamera这个库将usb摄像头打开了,也能预览,现在是摄像头上有个按钮按下去之后我需要响应,但是响应时间比较久,求解答怎么解决
编译好UVCCamera后,更改启动Activity闪退。_course
2017-11-10从git上面下载了UVCCamera(网址是 http://github.com/saki4510t/UVCCamera ),编译没有问题。想要改掉启动activity,结果闪退,模拟器调试后显示setContentView(R.layout.activity_main2);有错误。请问这是怎么回事啊?怎么解决啊?
31KB
OTG-UVC免驱安卓用视频APP
2018-12-28难得很不好找的安卓OTG摄像头APP,可以录像也可以拍照,我做钓鱼水下摄像头用的
1.98MB
android uvc camera
2016-07-20安卓外接usb camera
80.48MB
AndroidUVCCamera
2018-11-05UVCCamera 所有源码,里面的lib源码库要用aar形式引用,否则不能显示
3.62MB
UVCCAMERA_Master
2017-09-12通过对usb摄像头访问,可实现相机自动对焦,拍照视频记录等功能,是开发安卓USB设备的简单例程,本人已在 多个安卓平台测试成功。
23.68MB
UVCCameraDemo.rar
2019-06-17AndroidUSBCamera基于(https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封
49.82MB
Android USBCamera,通过UVCCamera开发通用库
2018-12-29Android USBCamera,UVCCamera开发通用库 https://blog.csdn.net/qq_31939617/article/details/82347939
3.66MB
uvc camera android
2013-08-05uvc camera android相关代码,有android下 uvc camera本地
Camera2 如何同时开启前后摄像头Preview并进行录像?_course
2019-03-05我按照camera2 谷歌的demo,同时开启两个线程进行相同操作,但是运行时最后一个摄像头能preview出来,前一个停在最后一帧,不能两个同时动。请问如何进行多线程同时操作?本人新手,多线程不太熟悉,求指教! @Override public void onResume() { super.onResume(); if (texture_front.isAvailable()) { openCamera(false,texture_front.getWidth(), texture_front.getHeight()); } else { texture_front.setSurfaceTextureListener(mFrontTextureListener); } if (texture_back.isAvailable()) { openCamera(true,texture_back.getWidth(), texture_back.getHeight()); } else { texture_back.setSurfaceTextureListener(mBackTextureListener); } startBackgroundThread(); } private void startBackgroundThread() { mBackgroundThread_front = new HandlerThread("Camera_front"); mBackgroundThread_front.start(); mHandler_front = new Handler(mBackgroundThread_front.getLooper()); mBackgroundThread_back=new HandlerThread("Camera_back"); mBackgroundThread_back.start(); mHandler_back=new Handler(mBackgroundThread_back.getLooper()); } 接下来OpenCamera方法 private void openCamera(boolean isBack,int width, int height) { if (!hasPermissionsGranted(VIDEO_PERMISSIONS)) { requestVideoPermissions(); return; } final Activity activity = getActivity(); if (null == activity || activity.isFinishing()) { return; } CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); try { L.d("tryAcquire"); if (!getSemaphore(isBack).tryAcquire(2500, TimeUnit.MILLISECONDS)) { throw new RuntimeException("Time out waiting to lock camera opening."); } String cameraId; if (isBack){ cameraId = manager.getCameraIdList()[0]; //0后 1前 // Choose the sizes for camera preview and video recording CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); StreamConfigurationMap map = characteristics .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); if (map == null) { throw new RuntimeException("Cannot get available preview/video sizes"); } mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, mVideoSize); int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { texture_back.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); } else { texture_back.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth()); } configureTransform(true,width, height); mMediaRecorder = new MediaRecorder(); manager.openCamera(cameraId, mStateCallback_back, null); }else { cameraId = manager.getCameraIdList()[1]; //0后 1前 // Choose the sizes for camera preview and video recording CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); StreamConfigurationMap map = characteristics .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); if (map == null) { throw new RuntimeException("Cannot get available preview/video sizes"); } mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, mVideoSize); int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { texture_front.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); } else { texture_front.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth()); } configureTransform(false,width, height); mMediaRecorder = new MediaRecorder(); manager.openCamera(cameraId, mStateCallback_front, null); } } catch (CameraAccessException e) { showTip("Cannot access the camera."); activity.finish(); } catch (NullPointerException e) { // Currently an NPE is thrown when the Camera2API is used but not supported on the // device this code runs. ErrorDialog.newInstance(getString(R.string.camera_error)) .show(getChildFragmentManager(), FRAGMENT_DIALOG); } catch (InterruptedException e) { throw new RuntimeException("Interrupted while trying to lock camera opening."); } } #然后到StateCallBack,我分成前后摄像头两个callback private CameraDevice.StateCallback mStateCallback_back = new CameraDevice.StateCallback() { @Override public void onOpened(@NonNull CameraDevice cameraDevice) { mCameraDevice = cameraDevice; startPreview(true); mCameraOpenCloseLock.release(); if (null != texture_back) { configureTransform(true,texture_back.getWidth(), texture_back.getHeight()); } } @Override public void onDisconnected(@NonNull CameraDevice cameraDevice) { mCameraOpenCloseLock.release(); cameraDevice.close(); mCameraDevice = null; } @Override public void onError(@NonNull CameraDevice cameraDevice, int error) { mCameraOpenCloseLock.release(); cameraDevice.close(); mCameraDevice = null; Activity activity = getActivity(); if (null != activity) { activity.finish(); } } }; private CameraDevice.StateCallback mStateCallback_front = new CameraDevice.StateCallback() { @Override public void onOpened(@NonNull CameraDevice cameraDevice) { mCameraDevice = cameraDevice; startPreview(false); mCameraOpenCloseLock_front.release(); if (null != texture_front) { configureTransform(false,texture_front.getWidth(), texture_front.getHeight()); } } @Override public void onDisconnected(@NonNull CameraDevice cameraDevice) { mCameraOpenCloseLock_front.release(); cameraDevice.close(); mCameraDevice = null; } @Override public void onError(@NonNull CameraDevice cameraDevice, int error) { mCameraOpenCloseLock_front.release(); cameraDevice.close(); mCameraDevice = null; Activity activity = getActivity(); if (null != activity) { activity.finish(); } } }; # Callback成功后会返回startPreview()方法 private void startPreview(final Boolean isBack) { if (null == mCameraDevice || !getTexture(isBack).isAvailable() || null == mPreviewSize) { return; } final String threadName; if (isBack){ threadName="Camera_back"; }else { threadName="Camera_front"; } try { closePreviewSession(); SurfaceTexture texture = getTexture(isBack).getSurfaceTexture(); assert texture != null; texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); Surface previewSurface = new Surface(texture); mPreviewBuilder.addTarget(previewSurface); mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(@NonNull CameraCaptureSession session) { mPreviewSession = session; //updatePreview if (null == mCameraDevice) { return; } try { setUpCaptureRequestBuilder(mPreviewBuilder); HandlerThread thread = new HandlerThread(threadName); thread.start(); mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, mHandler_back); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(@NonNull CameraCaptureSession session) { Activity activity = getActivity(); if (null != activity) { Toast.makeText(activity, "Failed", Toast.LENGTH_SHORT).show(); } } }, mHandler_back); } catch (CameraAccessException e) { e.printStackTrace(); } } private AutoFitTextureView getTexture(boolean isBack){ if (isBack){ return texture_back; }else { return texture_front; } } ## 以上是预览的核心代码,录像部分就不贴上去了。试了很多方法,始终不能两个摄像头同时previeew,只能其中一个单独预览。求教 
整合Android APP及外接设备_course
2016-08-19首先我们们移动端是定制的某公司的移动端,系统是4.1,该系统实时语音视频的功能,当然在服务器(调度台)可以进行操作,而我现在想直接定制或者购买个小的摄像头,可以实时与手机相连,手机直接调用这个摄像头的视频 传到服务端,这些是需求。 我不会的是:第一摄像头肯定与手机靠某种APP相连,而手机和服务器也使用开发好的视频软件,我想怎么把这两样整合到一起。或是大神们有更好的方案。其实我这就是想实现添加个无线摄像头通过手机原有的视频功能传给服务器。如果有方案万分感谢,或是好的整合APP方法。
怎样使一个跑Linux内核的摄像头被其他主机识别成一个UVC设备_course
2017-11-24各位大佬,小弟我最近遇到一个问题,一直困扰,Google了很久也没找到答案,所以想请教一下大家,如果谁知道,还望不吝赐教! 我有一个摄像头,处理器芯片是anyka的,内核是3.4,现在这个摄像头有个miniUSB要接到PC上,想让PC能够识别其为一个UVC设备, 即要让它成为一个标准的uvc摄像头,我需要怎么做呢?开始我以为一直Linux中的uvc驱动就可以了,后面发现做主设备这样确实可以,但是做从设备就不行。 换句话说,我就是要让我的摄像头从不是uvc摄像头变成uvc摄像头,请问有人知道吗?先谢谢大家了!
-
学院
元素周期表-three.js实战详解
元素周期表-three.js实战详解
-
博客
Anaconda和spyder打不开
Anaconda和spyder打不开
-
下载
【黑苹果EFI】联想昭阳E40-80的自制EFI,Opencore 0.6.6
【黑苹果EFI】联想昭阳E40-80的自制EFI,Opencore 0.6.6
-
学院
物联网基础篇:快速玩转MQTT
物联网基础篇:快速玩转MQTT
-
学院
Unity ILRuntime框架设计
Unity ILRuntime框架设计
-
学院
RapidScada从入门到精通
RapidScada从入门到精通
-
博客
什么是计算机?
什么是计算机?
-
学院
iptables 企业级防火墙配置(四表五链)
iptables 企业级防火墙配置(四表五链)
-
学院
龙芯生态应用开发基础:C语言精要
龙芯生态应用开发基础:C语言精要
-
下载
具有转移修复性质的最小存储再生码不存在
具有转移修复性质的最小存储再生码不存在
-
下载
ASHRAE 2011 Data Center Thermal Guidelines Whitepaper.pdf
ASHRAE 2011 Data Center Thermal Guidelines Whitepaper.pdf
-
学院
JMETER 性能测试基础课程
JMETER 性能测试基础课程
-
下载
通过有源射频锁相实现稳定的光纤时间传输
通过有源射频锁相实现稳定的光纤时间传输
-
下载
RootCluster.github.io:组织网站-源码
RootCluster.github.io:组织网站-源码
-
博客
2021-02-25
2021-02-25
-
博客
如何快速转载CSDN中的博客
如何快速转载CSDN中的博客
-
学院
NFS 实现高可用(DRBD + heartbeat)
NFS 实现高可用(DRBD + heartbeat)
-
学院
Python启蒙到架构师的核心技术精讲课程
Python启蒙到架构师的核心技术精讲课程
-
学院
2021 PHP租车系统 毕业设计 毕设源码 源代码使用教程
2021 PHP租车系统 毕业设计 毕设源码 源代码使用教程
-
博客
VS2019 getline()
VS2019 getline()
-
下载
ASHRAE 2011 Liquid Cooling Whitepaper.pdf
ASHRAE 2011 Liquid Cooling Whitepaper.pdf
-
博客
计算机网络复习(第一天)
计算机网络复习(第一天)
-
博客
HARMONY
HARMONY
-
学院
Jsplumb从入门到实战
Jsplumb从入门到实战
-
下载
构建低成本高密度Wi-Fi网络实验床
构建低成本高密度Wi-Fi网络实验床
-
学院
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
-
下载
小程序的全栈开发新时代
小程序的全栈开发新时代
-
学院
mpsoc zcu104 上做hdmi 显示实验
mpsoc zcu104 上做hdmi 显示实验
-
下载
用nodejs抓取-源码
用nodejs抓取-源码
-
下载
产品需求分析神器:KANO模型分析法
产品需求分析神器:KANO模型分析法