GithubHelp home page GithubHelp logo

msdgwzhy6 / androidusbcamera Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jiangdongguo/androidusbcamera

1.0 2.0 0.0 19.85 MB

USB摄像头(UVC)视频录制和图片抓拍,支持边推流边录像

Home Page: http://blog.csdn.net/andrexpert/article/details/78324181

Java 100.00%

androidusbcamera's Introduction

AndroidUSBCamera开源项目

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

(1)支持USB Camera设备检测,画面实时预览;
(2)支持本地录制mp4格式视频,支持实时获取音视频数据流;
(3)支持jpg格式图片抓拍;
(4)支持多种分辨率切换;
(5)支持屏蔽声音;

AndroidUSBCamera is developed based on the saki4510t/UVCCamera, the project of USB Camera (UVC equipment) and the use of video data acquisition are highly packaged, and it can help developers using USB Camera devices to connect, preview and video data collection by a few simple API. The main functions include:
  (1)supports detecting USB Camera equipment, and previewing;
(2)supports recording MP4 format video, and acquiring real-time audio and video data;
(3)supports capturing JPG format image;
(4)supports switching resolution;
(5)support shielding sound;

如何使用AndroidUSBCamera项目

效果图

1.添加依赖到本地工程

To get a Git project into your build:

第一步 添加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:v1.2.1'
} 

2.初始化引擎,注册USB设备事件监听器

Init AndroidUSBCamera engine,register the USB device event listener

USBCameraManager mUSBManager = USBCameraManager.getInstance();
// mTextureView为UVCCameraTextureView实例,继承于TextureView
// 用于渲染图像,需要在xml文件中定义
CameraViewInterface mUVCCameraView = (CameraViewInterface) mTextureView;
// 初始化引擎,注册事件监听器
mUSBManager.init(this, mUVCCameraView, 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("连接失败,请检查分辨率参数是否正确");
            }
        }

        // 与USB设备断开连接
        @Override
        public void onDisConnectDev(UsbDevice device) {

        }
    };

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);

6. 本地录制(可实时获取音视频数据流)

recoring mp4,and get media real-stream

 if(mUSBManager == null || ! mUSBManager.isCameraOpened()){
           showShortMsg("录制异常,摄像头未开启");
           return;
 }
// 开始录制
if( !mUSBManager.isRecording()){
mUSBManager.startRecording(videoPath, new AbstractUVCCameraHandler.OnEncodeResultListener() {
        @Override
        public void onEncodeResult(byte[] data, int offset, int length, long timestamp, int type) {
              // type=0为音频流,type=1为视频流
        });
}
// 停止录制
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");
                        }
                    }
      });

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实例;

androidusbcamera's People

Contributors

jiangdongguo avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.