From c0885c371fb044d5397e1ce011f13e5bdefaa0a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E4=B8=9C=E5=9B=BD?= <765067602@qq.com> Date: Thu, 1 Mar 2018 22:44:45 +0800 Subject: [PATCH 1/2] Update README.md --- README.md | 274 +++++++++++++++--------------------------------------- 1 file changed, 76 insertions(+), 198 deletions(-) diff --git a/README.md b/README.md index abe8b32..f5d979c 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,16 @@ -# AndroidUSBCamera开源项目 -### 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)支持调整对比度和亮度 - -> 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 getting supported preview sizes,and switching resolution; - (5)supports shielding sound; - (6)supports camera auto foucs; - (7)supports change camera's contrast and brightness - -## 如何使用AndroidUSBCamera项目 -![效果图](http://img.blog.csdn.net/20171025213631816) -### 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: -``` +AndroidUSBCamera 2.0 +============   + 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 easily by a few simple APIs. By using AndroidUSBCamera,you can detect and connect to a USB Camera simply.And you also can use it to realize taking picture,recording mp4,switching resolutions and setting  camera's contrast or brightness,etc.Here is some gifs of this demo: +![效果图](http://img.blog.csdn.net/20171025213631816) + +[中文文档: OkCamera,Android 相机应用开发通用库](http://blog.csdn.net/andrexpert/article/details/79302141) + +Usage +------- +### 1.Add to your Android Studio project + +Step 1. Add the JitPack repository to your build file.Add it in your root build.gradle at the end of repositories: +```java allprojects { repositories { ... @@ -34,205 +19,98 @@ allprojects { } } ``` - -第二步 添加依赖到app Module的gradle Step 2. Add the dependency - +```java +dependencies { + compile 'com.github.jiangdongguo:AndroidUSBCamera:2.0' +} ``` -dependencies { - compile 'com.github.jiangdongguo:AndroidUSBCamera:1.3.9' -} -``` - -### 2.初始化引擎,注册USB设备事件监听器 - Init AndroidUSBCamera engine,register the USB device event listener - +### 2. APIs Introduction +(1) In order to using it correctly,the following four steps must be achieved: +```java +mUVCCameraView = (CameraViewInterface) mTextureView; +mUVCCameraView.setCallback(mCallback); +mCameraHelper = UVCCameraHelper.getInstance(); +mCameraHelper.initUSBMonitor(this, mUVCCameraView, mDevConnectListener); ``` - private USBCameraManager.OnMyDevConnectListener listener = new USBCameraManager.OnMyDevConnectListener() { - // 插入USB设备 + To be attention,mCallback is a object of interface CameraViewInterface.Callback,and it's used to be listenering surfaceView +created or detoryed.mDevConnectListener is a object of interface UVCCameraHelper.OnMyDevConnectListener,and it's used to be listenering to detect and conntect USB device.Here is the coding order: +```java +private CameraViewInterface.Callback mCallback = new CameraViewInterface.Callback mCallback(){ + @Override + public void onSurfaceCreated(CameraViewInterface view, Surface surface) { + // must have + if (!isPreview && mCameraHelper.isCameraOpened()) { + mCameraHelper.startPreview(mUVCCameraView); + isPreview = true; + } + } + + @Override + public void onSurfaceChanged(CameraViewInterface view, Surface surface, int width, int height) { + + } + + @Override + public void onSurfaceDestroy(CameraViewInterface view, Surface surface) { + // must have + if (isPreview && mCameraHelper.isCameraOpened()) { + mCameraHelper.stopPreview(); + isPreview = false; + } + } +} +private UVCCameraHelper.OnMyDevConnectListener listener = new UVCCameraHelper.OnMyDevConnectListener() { + @Override public void onAttachDev(UsbDevice device) { - if(mUSBManager == null || mUSBManager.getUsbDeviceCount() == 0){ - showShortMsg("未检测到USB摄像头设备"); - return; - } - // 请求打开摄像头 - if(! isRequest){ + // request open permission(must have) + if (!isRequest) { isRequest = true; - if(mUSBManager != null){ - mUSBManager.requestPermission(0); + if (mCameraHelper != null) { + mCameraHelper.requestPermission(0); } } } - // 拔出USB设备 @Override public void onDettachDev(UsbDevice device) { - if(isRequest){ - // 关闭摄像头 + // close camera(must have) + if (isRequest) { isRequest = false; - mUSBManager.closeCamera(); - showShortMsg(device.getDeviceName()+"已拨出"); + mCameraHelper.closeCamera(); } } - // 连接USB设备成功 @Override - public void onConnectDev(UsbDevice device,boolean isConnected) { - if(! isConnected) { - showShortMsg("连接失败,请检查分辨率参数是否正确"); - isPreview = false; - }else{ - isPreview = true; - } + public void onConnectDev(UsbDevice device, boolean isConnected) { + } - // 与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(); - } -``` +License +------- -### 5. 图片抓拍 - Picture capturing -``` -if(mUSBManager == null || ! mUSBManager.isCameraOpened()){ - showShortMsg("抓拍异常,摄像头未开启"); - return; - } - mUSBManager.capturePicture(picPath, new AbstractUVCCameraHandler.OnCaptureListener() { - @Override - public void onCaptureResult(String path) { - showShortMsg("保存路径:"+path); - } - }); - -``` + Copyright 2018 Jiangdongguo -### 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(); -``` + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -### 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 list = mUSBManager.getSupportedPreviewSizes(); - // Camera自动对焦 - mUSBManager.startCameraFoucs(); -``` + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -### 8. 释放引擎资源 - release resource - -``` -// 释放资源 -if(mUSBManager != null){ - mUSBManager.release(); - } -``` ### 9. 添加权限  add permissions   From 31a95a8627baa765aeb7cde7d0ee6aac4add30e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E4=B8=9C=E5=9B=BD?= <765067602@qq.com> Date: Thu, 1 Mar 2018 22:55:28 +0800 Subject: [PATCH 2/2] Update README.md --- README.md | 80 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index f5d979c..1666d56 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ -AndroidUSBCamera 2.0 -============   - 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 easily by a few simple APIs. By using AndroidUSBCamera,you can detect and connect to a USB Camera simply.And you also can use it to realize taking picture,recording mp4,switching resolutions and setting  camera's contrast or brightness,etc.Here is some gifs of this demo: -![效果图](http://img.blog.csdn.net/20171025213631816) +OkCamera +============ +AndroidUSBCamera is developed based on the [saki4510t/UVCCamera](https://github.com/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 easily by a few simple APIs. By using AndroidUSBCamera,you can detect and connect to a USB Camera simply.And you also can use it to realize taking picture,recording mp4,switching resolutions and setting  camera's contrast or brightness,etc. -[中文文档: OkCamera,Android 相机应用开发通用库](http://blog.csdn.net/andrexpert/article/details/79302141) +[中文文档: AndroidUSBCamera,UVCCamera开发通用库](http://blog.csdn.net/andrexpert/article/details/78324181) Usage ------- @@ -93,7 +92,57 @@ private UVCCameraHelper.OnMyDevConnectListener listener = new UVCCameraHelper.On } }; ``` - +(2) Capturing JPG Images +```java + mCameraHelper.capturePicture(picPath, new AbstractUVCCameraHandler.OnCaptureListener() { + @Override + public void onCaptureResult(String path) { + Log.i(TAG,"save path:" + path); + } + }); +``` +(3) Recording Mp4,supporting close voice and save file automatic. +```java +RecordParams params = new RecordParams(); + params.setRecordPath(videoPath); + params.setRecordDuration(0); // 0,do not cut save + params.setVoiceClose(mSwitchVoice.isChecked()); // is close voice + mCameraHelper.startRecording(params, new AbstractUVCCameraHandler.OnEncodeResultListener() { + @Override + public void onEncodeResult(byte[] data, int offset, int length, long timestamp, int type) { + // type = 1,h264 video stream + if (type == 1) { +// FileUtils.putFileStream(data, offset, length); + } + // type = 0,aac audio stream + if(type == 0) { + + } + } + + @Override + public void onRecordResult(String videoPath) { + Log.i(TAG,"videoPath = "+videoPath); + } + }); +``` +(4) setting camera's brightness and contrast. +```java +mCameraHelper.setModelValue(UVCCameraHelper.MODE_BRIGHTNESS,progress); +mCameraHelper.setModelValue(UVCCameraHelper.MODE_CONTRAST,progress); +mCameraHelper.getModelValue(UVCCameraHelper.MODE_BRIGHTNESS); +mCameraHelper.getModelValue(UVCCameraHelper.MODE_CONTRAST); +... +``` +(5) switch resolutions and camera. +```java +mCameraHelper.updateResolution(widht, height); +``` +At last,remember adding permissions:   +``` + + +``` License ------- @@ -110,22 +159,3 @@ License WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - -### 9. 添加权限 -  add permissions   - -``` - - -``` -### 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++);调整亮度 -```