Skip to content
This repository has been archived by the owner on May 11, 2024. It is now read-only.

shlllshlll/USBCamera

Repository files navigation

USBCamera

这是一个USB摄像头APP,基于UVCCameraAndroidUSBCamera。实现了外接USB摄像头的预览与图片保存功能,同时解决了原项目中一些bug和问题。照片会保存到手机根目录下的USBCamera文件夹下,同时也会保存到相册。

项目地址:USBCamera

下载地址:Githubfir.im蒲公英,密码:1234

更新历史

V2.0

此版本弃用了AndroidUSBCamera中的UVCCameraHelper类,只保留了UVCCamera中的核心功能,对无关的代码均做了精简。

其中libusbcamera相机库基于UVCCamera,并添加了USBCameraHelper类简化调用。此外去除了原库中与UI相关的代码,去除了AndoridX依赖。提供了USB相机的连接、预览与图片保存接口。

增加了图像镜像、向左向右旋转,以及预设的四个摄像头角度等功能,适配了外部硬件拍照按钮,同时增加了程序崩溃检测、USB接入设备检测等功能。

V1.0

此版本基于AndroidUSBCamera,对代码中的一些问题进行了改正,开发了一个拥有分辨率选择、对焦、预览与拍照等功能的实例APP。

使用方法

添加libusbcamera库

将项目源码中的libusbcamera库添加到工程中即可,根据不同的依赖,build.gradle可设置为:

AndroidX依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    api "com.serenegiant:common:4.1.1"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

AppCompat依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    api "com.serenegiant:common:2.12.4"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

使用方法

在Activity中添加如下代码,同时在Layout中设置对应的TextureView。

private UVCCameraTextureView mUVCCameraView;
private USBCameraHelper mUSBCameraHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUVCCameraView = (UVCCameraTextureView)findViewById(R.id.camera_view);
    mUSBCameraHelper = new USBCameraHelper(this, mUVCCameraView);
}

@Override
protected void onDestroy() {
    mUSBCameraHelper.destory();
    super.onDestroy();
}

@Override
protected void onStart() {
    super.onStart();
    mUSBCameraHelper.start();
}

@Override
protected void onStop() {
    mUSBCameraHelper.stop();
    super.onStop();
}

保存图片使用如下的API即可,调用后会自动在手机Picture目录下USBCamera文件夹,并将图片以时间名保存,同时存储到相册中。

mUSBCameraHelper.saveCapturePicture();

兼容性测试

机型 系统版本 安卓版本 是否可用 问题描述
红米Note4x Lineage16 Android9
小米8 MIUI11 Android10
小米9 MIUI11 Android10
荣耀Note10 EMUI9.1 Android9
荣耀V9 EMUI9.1 Android9
荣耀V10 EMUI9.1 Android9
荣耀V20 MagicUI2.1 Android9
荣耀Magic2 MagicUI2.1 Android9
华为MateS EMUI4.0 Android6 可检测到摄像头插入,但点击连接后无显示。调试后发现调用SO库时报错,暂未定位到问题
华为Mate30 EMUI10.0 Android10
华为M3 EMUI5.0.4 Android7
一加6T - Android9
VIVO X21i FuntouchOS Android9 在设置选项中打开OTG后可检测到摄像头,可正确获取分辨率设置,但无画面显示
VIVO X23 FuntouchOS Android9 需要在设置内找到OTG选项并打开
OPPO K5 ColorOS6.1 Android9 需要在设置内找到OTG连接选项并打开

解决的问题

  1. 在部分Android9以上版本无法使用

此问题是由于Android9中部分设备的UVC摄像头的ID等信息发生了变化,原作者在源码中已修复此问题。

  1. 需要手动选择USB设备才可使用

目前构建的APP,可自动寻找USB摄像头并打开。

  1. Android9中在程序运行时拔出摄像头会导致程序崩溃

根据Github Pull Request #454,重新编译后问题已解决。

  1. JNI库中存在的内存泄露问题

根据Github Issue #259已修改SO库中的空指针错误,重新编译后问题已解决。

  1. 解决新版NDK对ABI支持的变动导致JNI编译失败的问题
  2. 将项目迁移到AndroidX
  3. 解决Issues #244

注意事项

  1. 目前编译的目标SDK版本不能超过27,否则会无法正确获取USB摄像头权限,此问题是由于Android9的API特性更改导致的。如果需要支持,可能需要较多修改。 可参考Pull Request #480