精华内容
下载资源
问答
  • UVCCamera library and sample to access to UVC web camera on non-rooted Android device Copyright (c) 2014-2017 saki t_saki@serenegiant.com Licensed under the Apache License, Version 2.0 (the "License")...
  • AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备...

        AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备的检测、连接、预览和音视频数据采集,最重要的是手机无需root,只需支持otg功能即可驱动。主要功能包括:  

    (1)支持USB Camera设备检测,画面实时预览;  
    (2)支持本地录制mp4格式视频,支持实时获取音视频数据流;  
    (3)支持jpg格式图片抓拍;  
    (4)支持获取camera支持的分辨率,和分辨率切换;  
    (5)支持屏蔽声音,重启Camera; 
    (6)支持相机自动对焦;  

    (7)支持调整对比度和亮度

    (8) 支持480P、720P、1080P and higher

    (9) 支持Android5.0,6.0,7.0,8.0,9.0


    如何使用AndroidUSBCamera项目 


    1. 添加依赖到本地工程
      
    第一步 添加JitPack仓库到工程gradle  
    Step 1. Add the JitPack repository to your build file
    Add it in your root build.gradle at the end of repositories:

     

    allprojects {
    repositories {
    ...
    maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }
    maven { url 'https://jitpack.io' }
    }
    }


    第二步 添加依赖到app Module的gradle   
    Step 2. Add the dependency  

     

     

     

    dependencies {
    compile 'com.github.jiangdongguo:AndroidUSBCamera:1.3.8'
    } 
    

     

    注:最新版为2,3,0

     

     2. 初始化引擎,注册USB设备事件监听器  
      Init AndroidUSBCamera engine,register the USB device event listener  
      

       private USBCameraManager.OnMyDevConnectListener listener = new USBCameraManager.OnMyDevConnectListener() {
            // 插入USB设备
            @Override
            public void onAttachDev(UsbDevice device) {
                if(mUSBManager == null || mUSBManager.getUsbDeviceCount() == 0){
                    showShortMsg("未检测到USB摄像头设备");
                    return;
                }
                // 请求打开摄像头
                if(! isRequest){
                    isRequest = true;
                    if(mUSBManager != null){
                        mUSBManager.requestPermission(0);
                    }
                }
            }
    
    
            // 拔出USB设备
            @Override
            public void onDettachDev(UsbDevice device) {
                if(isRequest){
                    // 关闭摄像头
                    isRequest = false;
                    mUSBManager.closeCamera();
                    showShortMsg(device.getDeviceName()+"已拨出");
                }
            }
    
    
            // 连接USB设备成功
            @Override
            public void onConnectDev(UsbDevice device,boolean isConnected) {
                if(! isConnected) {
                    showShortMsg("连接失败,请检查分辨率参数是否正确");
                    isPreview = false;
                }else{
                    isPreview = true;
                }
            }
    
    
            // 与USB设备断开连接
            @Override
            public void onDisConnectDev(UsbDevice device) {
                showShortMsg("连接失败");
            }
        };
        
        mUVCCameraView = (CameraViewInterface) mTextureView;
        mUVCCameraView.setCallback(new CameraViewInterface.Callback() {
            @Override
            public void onSurfaceCreated(CameraViewInterface view, Surface surface) {
                if(!isPreview && mUSBManager.isCameraOpened()) {
                     mUSBManager.startPreview(mUVCCameraView, new AbstractUVCCameraHandler.OnPreViewResultListener() {
                     @Override
                     public void onPreviewResult(boolean result) {
    
    
                     }
                  });
                  isPreview = true;
                  }
             }
                @Override
                public void onSurfaceChanged(CameraViewInterface view, Surface surface, int width, int height) {
    
    
                }
    
    
                @Override
                public void onSurfaceDestroy(CameraViewInterface view, Surface surface) {
                    if(isPreview && mUSBManager.isCameraOpened()) {
                        mUSBManager.stopPreview();
                        isPreview = false;
                    }
                }
            });
            // 初始化引擎
            mUSBManager = USBCameraManager.getInstance();
            mUSBManager.initUSBMonitor(this,listener);
            mUSBManager.createUVCCamera(mUVCCameraView);


    3. 注册USB设备广播事件监听器,开始Camera预览  
      Register the USB device broadcast event listener and start the Camera Preview

     

     

     

    // 注册USB事件广播监听器
    if(mUSBManager != null){
          mUSBManager.registerUSB();
    }
    // 恢复Camera预览
     if(mUVCCameraView != null){
          mUVCCameraView.onResume();
     }

     


    4. 注销USB设备广播事件监听器,停止Camera预览  
      Unregister the USB device broadcast event listener and stop the Camera Preview

     

     

     

     

    // 注销USB事件广播监听器
     if(mUSBManager != null){
             mUSBManager.unregisterUSB();
      }
     // 暂停Camera预览
     if(mUVCCameraView != null){
             mUVCCameraView.onPause();
     }

     


     5. 图片抓拍
      Picture capturing

     

     

     

     

    if(mUSBManager == null || ! mUSBManager.isCameraOpened()){
              showShortMsg("抓拍异常,摄像头未开启");
              return;
     }
     mUSBManager.capturePicture(picPath, new AbstractUVCCameraHandler.OnCaptureListener() {
              @Override
              public void onCaptureResult(String path) {
                   showShortMsg("保存路径:"+path);
              }
     });

     


    6. 本地录制(可实时获取音视频数据流)
       recoring mp4,and get media real-stream  
       

     

     

     

    if(mUSBManager == null || ! mUSBManager.isCameraOpened()){
               showShortMsg("录制异常,摄像头未开启");
               return;
     }
    if(! mUSBManager.isRecording()){
                        String videoPath = USBCameraManager.ROOT_PATH+System.currentTimeMillis();
                        FileUtils.createfile(FileUtils.ROOT_PATH+"test666.h264");
                        RecordParams params = new RecordParams();
                        params.setRecordPath(videoPath);
                        params.setRecordDuration(0);    // 设置为0,不分割保存
                        params.setVoiceClose(false);    // 不屏蔽声音
                        mUSBManager.startRecording(params, new AbstractUVCCameraHandler.OnEncodeResultListener() {
                            @Override
                            public void onEncodeResult(byte[] data, int offset, int length, long timestamp, int type) {
                                // type = 0,aac格式音频流
                                // type = 1,h264格式视频流
                                if(type == 1){
                                    FileUtils.putFileStream(data,offset,length);
                                }
                            }
    
    
                            @Override
                            public void onRecordResult(String videoPath) {
                                showShortMsg(videoPath);
                            }
                        });
    // 停止录制
    mUSBManager.stopRecording();


    7. 切换分辨率
      update Resulotion  
        

     

    mUSBManager.updateResolution(this, mUVCCameraView, 320, 240, new USBCameraManager.OnPreviewListener() {
                 @Override
                 public void onPreviewResult(boolean isSuccess) {
                        if(! isSuccess) {
                                showShortMsg("预览失败,不支持该分辨率");
                            }else {
                                showShortMsg("以切换到分辨率为320x240");
                            }
                        }
          });  
     // 获取Camera支持得分辨率  
     List<Size> list = mUSBManager.getSupportedPreviewSizes();
     // Camera自动对焦  
     mUSBManager.startCameraFoucs();


    8. 释放引擎资源
      release resource  

     

    // 释放资源
    if(mUSBManager != null){
           mUSBManager.release();
     }

    9. 添加权限
      add permissions  
       

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />


    USBCameraManager  API (Other)

     

    (1) void requestPermission(int index):请求授予开启USB摄像头权限;
    (2) int getUsbDeviceCount():返回查询到的可用USB Camera数目;
    (3) boolean isRecording():判断是否正在录制视频;
    (4) boolean isCameraOpened():判断USB摄像头是否正常打开;
    (5) void release():释放资源
    (6) USBMonitor getUSBMonitor():返回USBMonitor实例;
    (7) mUSBManager.setModelValue(USBCameraManager.MODE_CONTRAST,contrast++); 调整对比度
    (8) mUSBManager.setModelValue(USBCameraManager.MODE_BRIGHTNESS,brightness++);调整亮度

     

     

     

     

     

    注:在使用Android Studio移植UVCCamera时,很多朋友可能会遇到"open(“/dev/bus/usb/001/002”, O_RDWR, 0),报错,Permission denied"问题,这是由于Android Studio使用的ndk版本所致,建议使用ndk-r14即可。解决方法:local.properties-->指定ndk.dir版本。(注:这里使用的是离线方式)

     

    最新版为2.3.0,更新时间为2019年6月17日,使用方法请移步Github项目

     

     

    GitHub源码地址:https://github.com/jiangdongguo/AndroidUSBCamera(如果对您有用,欢迎star&fork以表支持~谢谢^_^!)

     

    Download APK

     In order to display the functions, I develop a simple released apk,which is based on version 2.3.1,and the build version is 28.0.3.Here is my configs and if you have any questions please issues to me ,I will follow it do my best.

    ext {
        javaSourceCompatibility = JavaVersion.VERSION_1_8
        javaTargetCompatibility = JavaVersion.VERSION_1_8
        compileSdkVersion = 28
        buildToolsVersion = '28.0.3'
        minSdkVersion = 21
        targetSdkVersion = 28
        commonLibVersion= '2.12.4'
    }
    

    下载APP:  安装密码 12345678

    displaying:

     

     

    展开全文
  • UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库。linux原生支持,基本支持市面上所有免区USB摄像头。此开源库包含JNI及android封装的类库。是目前最好用的安卓USB摄像头类库。UVCCamera来控制、...

    UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库。linux原生支持,基本支持市面上所有免区USB摄像头。

    此开源库包含JNI及android封装的类库。是目前最好用的安卓USB摄像头类库。

    UVCCamera来控制、管理与外接设备的连接,

    UVCCamera.setFrameCallback(final IFrameCallback callback, final int pixelFormat)获取每一帧数据; PIXEL_FORMAT_RAW = 0;

    PIXEL_FORMAT_YUV = 1;

    PIXEL_FORMAT_RGB565 = 2;

    PIXEL_FORMAT_RGBX = 3;

    PIXEL_FORMAT_YUV420SP = 4;

    PIXEL_FORMAT_NV21 = 5;

    UVCCameraTextureView控件进行图像的预览,

    USBMonitor进行驱动的连接和断开

    UVCCamera Test4 类的耦合性很差

    Test4是在后台服务中操作摄像头,而后台服务与前台进程不是同一个进程名,所以通过aidl进行service的ibinder对象的定义,并通过aidl定义的接口,生产的ibinder对象来操作后台服务。而摄像头的操作又不直接在service中操作,service负责侦测USB的链接情况,在usb连接到设备后台,创建一个handler(cameraserver)来操作摄像头。

    要增加一个摄像头的操作,要叠层好几层才能封装完毕。类与类之间的依赖很严重!!!觉得作者设计的有问题。为了增加一个摄像头操作,我一共要花8个步骤才能添加完整。

    1.在CameraServer—>CameraThread 添加相关操作

    注意:操作摄像头的实际的操作是CameraServer(handler类)-->CameraThread(类)。

    互相引用关系:CameraServer的实例通过弱引用WeakReference引用期内部类CameraThread的实例;CaeraThread通过强引用即直接引用的方式引用其外部内CameraServer实例

    2.在CameraServer(handler)类里添加handler处理,通过handler发送Message,调用CameraServer-->CameraThread类中的操作

    1)在CameraServer类中添加发送Message时的MessageType常量

    2)在CameraServer#handleMessage()方法里添加处理增加的MeassageType常量的处理方式,类似thread.xxxx()

    3)添加相关操作方法,用于封装对应MeassageType常量,CameraServer#handleMessage()的方法。

    3.在IUVCService.aidl中添加相关方法声明

    注意:IUVCSerice.aidl定义的接口就是UVCService反馈的ibinder,因为服务于前台UI的进程名不一样,所以用AIDL定义的接口,引用UVCService的ibinder对象。用于客户端Cameraclient访问。

    4.UVCService#mUSBMonitorUVCService#mBasicBinder4.在UVCService中对UVCService#mBasicBinder匿名类实例,overrid实现IUVCService.aidl中添加的方法声明。

    注意:UVCService是控制USB设备的后台服务,通过UVCService#mUSBMonitor监控USB设备,UVCService#mOnDeviceConnectListener(UVCService#mUSBMonitor的回调)#onConnect()时初始化一个CameraServer实例并塞入UVCService#sCameraServers集合中。UVCService#mUSBMonitor所有所有操作都在UVCService主线程上。UVCService#sCameraServers#CameraServer是真正操作USB摄像头的Handler类,而客户端CameraCilent通过UVCService#mBasicBinder调用UVCService#sCameraServers#CameraServer,从而调用UVCService#sCameraServers#CameraServer#CameraThread操作摄像头.

    5.在CameraClient#CameraHandler(handler类,CameraClient的静态内部类)#CameraTask(Thread类,CameraClient#CameraHandler的静态内部类)中添加调用IUVCSerice.aidl添加方法的方法。

    注意:CameraClinet是对应前台UI的操作后台服务的类,CameraClient通过handler类发送message的方式让线程类CameraTask实际操作后台服务。

    6.在CameraClient中添加对应操作服务的MessageType常量

    7.在CameraClient#CameraHandler(handler类,CameraClient的静态内部类)#handleMessage()方法中添加处理CameraClient#MessageType常量的代码

    8.在View中添加操作cameraClinet的相关代码

    原文:http://www.cnblogs.com/edzjx/p/7093761.html

    展开全文
  • android uvc camera

    2018-05-07 16:16:54
    android uvc camera jni app
  • 开源项目UVCCamera,实现了手机无需root就支持USB Camera设备的检测、连接、预览和音视频数据采集等功能,下面简要介绍下它的使用。UVC,全称为:USB video class 或USB video device class。是Microsoft与另外几家...

    开源项目UVCCamera,实现了手机无需root就支持USB Camera设备的检测、连接、预览和音视频数据采集等功能,下面简要介绍下它的使用。

    UVC,全称为:USB video class 或USB video device class。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准。

    现在有8个样例可供使用。

    1)USBCameraTest0

    这是最简单的项目,只显示如何使用SurfaceView来启动/停止预览。

    2)USBCameraTest

    这是最简单的项目,只显示如何启动/停止预览。这与USBCameraTest0几乎相同,但是使用自定义的TextureView来显示相机图像而不是使用SurfaceView。

    3)USBCameraTest2

    这是一个示例项目,演示如何使用MediaCodec编码器将UVC相机(无音频)的视频记录为.MP4​​文件。此示例需要API> = 18,因为MediaMuxer仅支持API> = 18。

    4)USBCameraTest3

    这是一个示范项目,演示如何将音频(来自内部麦克风)的视频(来自UVC相机)录制为.MP4​​文件。这也显示了几种捕捉静止图像的方式。此示例可能最适用于您的定制应用程序的基础项目。

    5)USBCameraTest4

    本示例显示了访问UVC相机并将视频图像保存到后台服务的方式。这是最复杂的示例之一,因为这需要使用AIDL的IPC。

    6)USBCameraTest5

    这与USBCameraTest3几乎相同,但使用IFrameCallback接口保存视频图像,而不是使用来自MediaCodec编码器的输入Surface。

    在大多数情况下,您不应使用IFrameCallback来保存图像,因为IFrameCallback比使用Surface要慢很多。但是,如果您想获取视频帧数据并自行处理它们或将它们作为字节缓冲区传递给其他外部库,则IFrameCallback将非常有用。

    7)USBCameraTest6

    这显示了如何将视频图像分割为多个Surface。你可以在这个应用程序中看到视频图像并排观看。这个例子还展示了如何使用EGL来渲染图像。如果您想在添加视觉效果/滤镜效果后显示视频图像,则此示例可能会对您有所帮助。

    8)USBCameraTest7

    这显示了如何使用两个摄像头并显示来自每个摄像头的视频图像。这仍然是实验性的,可能有一些问题。

    9)usbCameraTest8这显示了如何设置/获取uvc控件。目前这只支持亮度和对比度。

    展开全文
  • Android 调试usb 摄像头,报UVCCamera: [10856*UVCCamera.cpp:172:connect]:could not open camera:err=-50 错误。 可能的解决方案: 拔掉usb摄像头与设备的连接,换一个usb插口试一试。我的是可以解决usb摄像头连接...

    Android 调试usb 摄像头,报 UVCCamera: [10856*UVCCamera.cpp:172:connect]:could not open camera:err=-50 错误。
    可能的解决方案:
    拔掉usb摄像头与设备的连接,换一个usb插口试一试。我的是可以解决usb摄像头连接不上的问题的。

    展开全文
  • android uvc Camera Demo

    2018-05-02 17:10:04
    apk文件,android uvc Camera Demo,支持录像、拍照。
  • 文件名大小更新时间UVCCamera-masterUVCCamera-master\.gitignore9412017-04-17UVCCamera-master\.ideaUVCCamera-master\.idea\compiler.xml6862017-04-17UVCCamera-master\.idea\encodings.xml1592017-04-17UVC...
  • UVCCamera.rar

    2020-04-01 17:53:57
    之后去应用市场下了一个usb摄像头app,发现居然是可以正常识别出所有的摄像头,遂反编译之,发现是使用了UVCCamera。这个开源库貌似已经很久没有维护,并且根据之前使用的经验来看也有不少bug(主要是兼容性方面),...
  • UVC camera support

    2020-12-26 09:12:52
    <div><p>Is there any plan to support UVC camera input, rather than only front/rear? <p>An alternative could be the possibility to use a video stream as source, but I see it's only supported in the...
  • Android USBCamera,UVCCamera开发通用库

    热门讨论 2018-09-03 15:25:58
    Android USBCamera,UVCCamera开发通用库 https://blog.csdn.net/qq_31939617/article/details/82347939
  • 外置摄像头源码 库 UVCCamera 启动/停止预览 SurfaceView 使用IFrameCallback接口保存视频图像 等好几个实例
  • Android UVC Camera的使用

    万次阅读 多人点赞 2018-03-15 16:28:37
    开源项目UVCCamera,实现了手机无需root就支持USB Camera设备的检测、连接、预览和音视频数据采集等功能,下面简要介绍下它的使用。 UVC,全称为:USB video class 或USB video device class。是Microsoft与另外...
  • Android USBCamera,UVCCamera开发通用库 https://blog.csdn.net/qq_31939617/article/details/82347939
  • 集成UVCCamera

    2019-12-25 17:39:44
    网上很多关于UVCcamera集成的Demo,也封装的非常简单,参考:github地址:https://github.com/Liuguihong/AndroidUVCCamera public class UvcCameraReader implements ICameraReader { int width = 1280; int...
  • Is it necessary to call startpreview() of RtmpCamera2 class bcoz I am already calling startPreview() from UVCCamera library. Can you please help me out what changes are need to make as of now only ...
  • UVC camera 封装类

    2020-01-10 16:50:35
    下述代码是关于UVC camera处理的封装类,具体依赖的aar请参考https://github.com/saki4510t/UVCCamera。 借用该类,在接入UVC 摄像头设备时可以很方便的进行使用,只需要在对应的Activity中,先初始化该类,绑定一...
  • 在linux下采集uvc camera mjpeg sample
  • ve been testing UVCCamera library with android 7. I tested all the basic samples (usbCameraTest0, usbCameraTest and usbCameraTest2) on a google pixel phone. But unfortunately none of these samples are...
  • However the app CameraFi (which was created also by authors of UVCCamera) worked fine on my Nexus. <p>Possibly my NDK compiler is not working properly. Can someone send me compiled .apk for any of the...
  • UvcCamera 这个轮子是日本人造的,GitHub的地址是:https://github.com/saki4510t/UVCCamera 里面有有四大块:1、libjpeg;2、libusb;3、libuvc;4、UVCCamera
  • UVCCamera 项目,集成录像相关功能 。编译的时候,相关包下载不成功, 最后直接把之前成功下载的包直接引入arr包
  • Android 手机、大屏设备、板子等连接usb摄像头开源库UVCCamera
  • <div><p>UVCCamera used to work on Nexus 5X, However, after upgrading Nexus 5X to Android N. There is a notification about USB devices is plugged and ask for permission. But Application can not display...
  • AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备...
  • <div><p>Hi Saki, <p>I am trying to make a DualCamera application that runs using UVC Camera and Android rear Camera. Can you please suggest any method how to implement?...saki4510t/UVCCamera</p></div>
  • 因为官方UvcCamera已经不维护了,问题还是有很多的,大家可以直接使用我处理好的UvcCamera库.也是从官方demo拉下修改了错误的代码. 链接:后面添加 步骤 导入libuvccamera:File–>New–>Import Module,找到...
  • ubuntu uvc camera 调试

    2020-05-01 15:44:56
    用libv4l2开发,用MJPEG格式正常,用YUYV格式则总是报...可用来测试uvc camera能支持的yuyv的分辨率,能支持则能看到视频,否则看不到。 只有用正确的分辨率和格式才能正确采集 另一个有用的命令 v4l2-ctl ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,088
精华内容 435
关键字:

uvccamera