diff --git a/README.md b/README.md new file mode 100644 index 0000000..af4f2aa --- /dev/null +++ b/README.md @@ -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:   +``` + + +``` +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.