文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android修行手册-多路USB外接摄像头

2023-09-03 09:38

关注

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

在这里插入图片描述

公司最近有个Android产品是这样的:

  1. 需要多路摄像头摄像,且摄像头是USB外接的,并且需要支持扫码功能。
  2. 需要支持多显示器异屏显示或同屏显示。

本篇文章主要介绍USB摄像头的思路,显示器的可看另一篇文章。

😜简介

Android系统已经支持uvc设备,全称为USB Video Class。就如字面意思,USB视频类是专门为USB视频捕获设备定义的协议标准。由Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,已经成为USB org标准之一。

我们用到了开源库AndroidUSBCamera:https://github.com/jiangdongguo/AndroidUSBCamera
而AndroidUSBCamera开源库的底层用到了UVCCamera开源库。是基于UVCCamera的高度封装。

Android Studio 是2021系列,Android设备是基于3588开发板做的,普通的手机平板设备可没那么多接口。
开发板详情请看:http://www.rock-chips.com/a/cn/product/RK35xilie/2022/0926/1656.html

😜开始集成

如果你是在我发文后面开始集成的AndroidUSBCamera,那么恭喜你,这时候的框架已经整体打包好aar了,省略了很多步骤。
方式一:
项目的 build.gradle文件中添加

allprojects {    repositories {        google()        jcenter()        maven { url "https://jitpack.io" }    }}

想要使用框架的module中在线引入即可。

dependencies {    implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:改为版本号'}

如果你写demo或者集成到超简单的项目里,上面一般都会成功,但如果你的实际项目复杂,集成了很多三方框架就会有其他问题。推荐方式二。

方式二:

从github上下载了项目后,首先你的项目集成 libausbc 包,接着你找到 libnative libuvc libuvccommon 下的三个aar,拷贝的libausbc的libs下,没有文件夹就创建一个,然后在 build.gradle 中添加 aar依赖。
在这里插入图片描述

dependencies {    implementation 'androidx.appcompat:appcompat:1.5.1'    implementation "androidx.constraintlayout:constraintlayout:2.0.4"    implementation 'com.google.android.material:material:1.6.1'    api 'com.elvishew:xlog:1.11.0'    implementation files('libs/libnative-3.2.9.aar')    implementation files('libs/libuvc-3.2.9.aar')    implementation files('libs/libuvccommon-3.2.9.aar')}

然后你自己的主项目依赖这个 libausbc 包即可。

这就可以了?并不一定,在部分架构的设备上运行没事,有的则不行,这是因为so不全以及so合并导致的问题。
你还需要找到开源项目中的 libuvc-3.2.9.aar 然后修改后缀为zip。
在这里插入图片描述
然后复制下 armeabi-v7a 改为 你应该用的架构的即可。然后再将后缀名改为 aar。
再之后你的主项目app的如果集成了其他的so,需要jniLibs下有以下几个文件夹,至此,集成就完事了。基本市面上的设备都可以用。
在这里插入图片描述

😜操作代码

要想使用,首先你得需要权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-feature android:name="android.hardware.usb.host" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" />

布局也很简单

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent">    <FrameLayout        android:id="@+id/viewfinderView"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:inner_scan_speed="20" /> </RelativeLayout>

可以继承CameraFragment也可以继承CameraActivity使用。继承后会有4个回调方法

class DemoFragment: CameraFragment() {override fun getRootView(inflater: LayoutInflater, container: ViewGroup?): View? {    //找到布局id,进行设置        return mViewBinding?.root    }    override fun getCameraView(): IAspectRatio? {        return AspectRatioTextureView(requireContext())    }    override fun getCameraViewContainer(): ViewGroup? {    // 对应的布局里控件id即可        return mViewBinding?.viewfinderView    }    override fun onCameraState(self:ICamera, code:ICameraStateCallBack.State, msg:String?) {    //返回的摄像头状态        when (code) {            ICameraStateCallBack.State.OPENED -> handleCameraOpened()            ICameraStateCallBack.State.CLOSED -> handleCameraClosed()            ICameraStateCallBack.State.ERROR -> handleCameraError()        }    }    override fun getGravity(): Int = Gravity.TOP}

上面是简单的一路摄像头,而多路摄像头就需要你继承MultiCameraActivity或者MultiCameraFragment
之后会实现6个方法

public class MyTest  extends MultiCameraActivity {   @Nullable   @Override   protected View getRootView(@NonNull LayoutInflater layoutInflater) {  //返回设置根布局      return null;   }   @NonNull   @Override   public MultiCameraClient.ICamera generateCamera(@NonNull Context ctx, @NonNull UsbDevice device) {     return new CameraUVC(ctx, device); //一般固定这个即可   }   @Override   protected void onCameraConnected(@NonNull MultiCameraClient.ICamera camera) {//摄像头连接后的回调,在这一旦连接上就需要绑定上adapter显示画面的view   }   @Override   protected void onCameraDisConnected(@NonNull MultiCameraClient.ICamera camera) {//断开链接后的回调   }   @Override   protected void onCameraAttached(@NonNull MultiCameraClient.ICamera camera) {//进行摄像头连接时   }   @Override   protected void onCameraDetached(@NonNull MultiCameraClient.ICamera camera) {//分离摄像头时   }}

更多详情直接看大佬项目的demo即可。也可以留言或下方卡片加好友一起探讨。

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

来源地址:https://blog.csdn.net/qq_27489007/article/details/129941076

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯