You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.6 KiB
144 lines
4.6 KiB
7 years ago
|
# AndroidUSBCamera开源项目
|
||
|
##AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够
|
||
|
帮助开发者通过几个简单的API实现USB Camera设备的检测、连接、预览和视频数据采集。主要功能包括:USB Camera实时预览;本地录制mp4格式视频;png格式图片
|
||
|
抓拍;实时获取编码后的音视频数据流。
|
||
|
|
||
|
##如何使用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 'https://jitpack.io' }
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
第二步 添加依赖到app Module的gradle
|
||
|
Step 2. Add the dependency
|
||
|
`
|
||
|
dependencies {
|
||
|
compile 'com.github.jiangdongguo:AndroidUSBCamera:v1.0.0'
|
||
|
}
|
||
|
`
|
||
|
###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) {
|
||
|
|
||
|
}
|
||
|
|
||
|
// 与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. 释放引擎资源
|
||
|
release resource
|
||
|
`
|
||
|
// 释放资源
|
||
|
if(mUSBManager != null){
|
||
|
mUSBManager.release();
|
||
|
}
|
||
|
`
|
||
|
###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实例;
|
||
|
`
|