jiangdongguo
7 years ago
1 changed files with 176 additions and 0 deletions
@ -0,0 +1,176 @@ |
|||||
|
AndroidUSBCamera |
||||
|
============ |
||||
|
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 ,getting h.264/aac/yuv(nv21) stream and setting camera's contrast or brightness,supporting 480P、720P、1080P and higher,etc. |
||||
|
|
||||
|
[中文文档: AndroidUSBCamera,UVCCamera开发通用库](http://blog.csdn.net/andrexpert/article/details/78324181) |
||||
|
|
||||
|
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 { |
||||
|
... |
||||
|
maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' } |
||||
|
maven { url 'https://jitpack.io' } |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
Step 2. Add the dependency |
||||
|
```java |
||||
|
dependencies { |
||||
|
implementation 'com.github.jiangdongguo:AndroidUSBCamera:2.1.1' |
||||
|
} |
||||
|
``` |
||||
|
### 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(); |
||||
|
// set default preview size |
||||
|
mCameraHelper.setDefaultPreviewSize(1280,720); |
||||
|
// set default frame format,defalut is UVCCameraHelper.Frame_FORMAT_MPEG |
||||
|
// if using mpeg can not record mp4,please try yuv |
||||
|
mCameraHelper.setDefaultFrameFormat(UVCCameraHelper.FRAME_FORMAT_YUYV); |
||||
|
mCameraHelper.initUSBMonitor(this, mUVCCameraView, mDevConnectListener); |
||||
|
``` |
||||
|
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) { |
||||
|
// request open permission(must have) |
||||
|
if (!isRequest) { |
||||
|
isRequest = true; |
||||
|
if (mCameraHelper != null) { |
||||
|
mCameraHelper.requestPermission(0); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onDettachDev(UsbDevice device) { |
||||
|
// close camera(must have) |
||||
|
if (isRequest) { |
||||
|
isRequest = false; |
||||
|
mCameraHelper.closeCamera(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onConnectDev(UsbDevice device, boolean isConnected) { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onDisConnectDev(UsbDevice device) { |
||||
|
|
||||
|
} |
||||
|
}; |
||||
|
``` |
||||
|
![Connecting gif](https://github.com/jiangdongguo/AndroidUSBCamera/blob/master/gifs/detecting.gif) |
||||
|
(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); |
||||
|
... |
||||
|
``` |
||||
|
![Connecting gif](https://github.com/jiangdongguo/AndroidUSBCamera/blob/master/gifs/brightness.gif) |
||||
|
(5) switch resolutions and camera. |
||||
|
```java |
||||
|
mCameraHelper.updateResolution(widht, height); |
||||
|
``` |
||||
|
![Connecting gif](https://github.com/jiangdongguo/AndroidUSBCamera/blob/master/gifs/2.1.0.gif) |
||||
|
At last,remember adding permissions: |
||||
|
``` |
||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" /> |
||||
|
``` |
||||
|
Other Library about Android Camera |
||||
|
------- |
||||
|
[OkCamera](https://github.com/jiangdongguo/OkCamera) Android Camera univsersally operation. |
||||
|
[AndroidRecordMp4](https://github.com/jiangdongguo/AndroidRecordMp4) Using MediaCodec realize record mp4. |
||||
|
[AndroidYuvOsd](https://github.com/jiangdongguo/AndroidYuvOsd) YUV data operation. |
||||
|
[Lame4Mp3](https://github.com/jiangdongguo/Lame4Mp3) pcm to mp3 and pcm to aac. |
||||
|
|
||||
|
License |
||||
|
------- |
||||
|
|
||||
|
Copyright 2018 Jiangdongguo |
||||
|
|
||||
|
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 |
||||
|
|
||||
|
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. |
Loading…
Reference in new issue