Android系统OTG_usb链接摄像头的驱动和使用

Android11 USB OTG模式切换 https://blog.51cto.com/u_16213443/11391763 阅读详情

原文地址:点击查看

这段时间做一个Android项目,需要在一台Android 4.4.4系统设备上链接usb摄像头,用作人脸识别,
于是作为Android项目组“骨干”(哈哈臭屁一下^-^)的我开始了usb摄像头攻坚战,爬帖子,找博客,
最后眼睛瞅准了一篇博客(感谢)
http://blog.youkuaiyun.com/sukhoi27smk/article/details/18269097

在他的帮助下我找到了
https://bitbucket.org/neuralassembly/simplewebcam/src

然后下载源码开始了我的usb摄像头驱动之旅

我整理的库文件下载点击查看

首先是在Linux Ubuntu系统下面配置环境,AS,NDK,如果想写C代码方便可以安装QT(个人推荐,其他都行,比如gedit就很好使)
软件安装,环境配置,这些自当不必多说。。。网上有N多种方式可以搞定

接下来就开始代码改造

找到jni文件夹下的ImageProc.c文件修改其中的jni接口方法名,使之指向CameraPreview.java

我修改后如下所示,找到其他的jni方法用同样方式修改方法名(不要忘了同步.h文件中的方法名哦。。。):

void Java_com_mojsoft_usbcamera_view_CameraPreview_pixeltobmp( JNIEnv* env,jobject thiz,jobject bitmap)

Ctrl+Alt+T打开终端,cd到你的jni目录下,运行ndk-build,编译成功

cd .. 回到jni目录外面,运行ls就可以看到libs,obj两个目录,将libs中的libImageProc.so文件拷贝到你项目中的jniLibs目录下(AS)

接下来是java调用 [注意:java包名和C文件方法格式一致]

将CameraPreview文件放到布局中,编译运行。。。

接下来就是盯着屏幕。。。

满满的惊喜,问题就这么解决了,哈哈

下面是主要的CameraSurfaView类:

class CameraPreview extends SurfaceView implements SurfaceHolder.Callback, Runnable {

    private static final boolean DEBUG = true;
    private static final String TAG = "WebCam";
    protected Context context;
    private SurfaceHolder holder;
    Thread mainLoop = null;
    private Bitmap bmp = null;
    private byte[] byteArrary;

    private boolean cameraExists = false;
    private boolean shouldStop = false;

    // /dev/videox (x=cameraId+cameraBase) is used.
    // In some omap devices, system uses /dev/video[0-3],
    // so users must use /dev/video[4-].
    // In such a case, try cameraId=0 and cameraBase=4
    private int cameraId = 0;
    private int cameraBase = 0;

    // This definition also exists in ImageProc.h.
    // Webcam must support the resolution 640x480 with YUYV format.
    static final int IMG_WIDTH = 640;
    static final int IMG_HEIGHT = 480;

    // The following variables are used to draw camera images.
    private int winWidth = 0;
    private int winHeight = 0;
    private Rect rect;
    private int dw, dh;
    private float rate;
    private boolean isFramAready = false;
    private AlreadyRGBListener listener;

    // JNI functions
    public native int prepareCamera(int videoid);

    public native int prepareCameraWithBase(int videoid, int camerabase);

    public native void processCamera();

    public native void stopCamera();

    public native void pixeltobmp(Bitmap bitmap);

    public native byte[] getRgb();

    static {
    System.loadLibrary("ImageProc");
    }

    public CameraPreview(Context context) {
    super(context);
    this.context = context;
    if (DEBUG) Log.d(TAG, "CameraPreview constructed");
    setFocusable(true);

    holder = getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
    }

    public CameraPreview(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    if (DEBUG) Log.d(TAG, "CameraPreview constructed");
    setFocusable(true);

    holder = getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);
    }

    @Override
    public void run() {
    while (true && cameraExists) {
        //obtaining display area to draw a large image
        if (winWidth == 0) {
            winWidth = this.getWidth();
            winHeight = this.getHeight();

            if (winWidth * 3 / 4 <= winHeight) {
                dw = 0;
                dh = (winHeight - winWidth * 3 / 4) / 2;
                rate = ((float) winWidth) / IMG_WIDTH;
                rect = new Rect(dw, dh, dw + winWidth - 1, dh + winWidth * 3 / 4 - 1);
            } else {
                dw = (winWidth - winHeight * 4 / 3) / 2;
                dh = 0;
                rate = ((float) winHeight) / IMG_HEIGHT;
                rect = new Rect(dw, dh, dw + winHeight * 4 / 3 - 1, dh + winHeight - 1);
            }
        }

        // obtaining a camera image (pixel data are stored in an array in JNI).
        processCamera();
        // camera image to bmp
        pixeltobmp(bmp);

        byte[] arr = getRgb();

        isFramAready = true;

        Canvas canvas = getHolder().lockCanvas();
        if (canvas != null) {
            // draw camera bmp on canvas
            canvas.drawBitmap(bmp, null, rect, null);

            getHolder().unlockCanvasAndPost(canvas);
        }

        listener.alreadyRGB(arr);

        if (shouldStop) {
            shouldStop = false;
            break;
        }

    }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    if (DEBUG) Log.d(TAG, "surfaceCreated");
    if (bmp == null) {
        bmp = Bitmap.createBitmap(IMG_WIDTH, IMG_HEIGHT, Bitmap.Config.ARGB_8888);
    }
    if (byteArrary == null) {
        byteArrary = new byte[IMG_WIDTH * IMG_HEIGHT];
    }
    // /dev/videox (x=cameraId + cameraBase) is used
    //下面一句是原代码,我尝试失败,于是我将其修改为 int ret = prepareCamera(0);后成功调用
    // int ret = prepareCameraWithBase(cameraId, cameraBase);
    int ret = prepareCamera(0);
    if (ret != -1) cameraExists = true;

    mainLoop = new Thread(this);
    mainLoop.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    if (DEBUG) Log.d(TAG, "surfaceChanged");
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    if (DEBUG) Log.d(TAG, "surfaceDestroyed");
    if (cameraExists) {
        shouldStop = true;
        while (shouldStop) {
            try {
                Thread.sleep(50); // wait for thread stopping
            } catch (Exception e) {
            }
        }
    }
    stopCamera();
    }
    public void setGetBitmapListener(AlreadyRGBListener listener){
        this.listener = listener;
        }
}
安卓otg驱动 安卓OTG的驱动,支持64位系统! 立即下载

相关推荐

Android手机通过otg线外接usb摄像头

Android手机通过otg线外接usb摄像头,亲自测试可以使用

iphone悬浮球怎么设置_安卓手机超好用的软件神奇悬浮球功能强大的很

很多人都喜欢 iPhone 上的“黑色小圆点” 悬浮按钮它可以实现模拟按下 Home 键调出控制中心、锁屏等等功能因为它可以缩短一些常用操作的步骤不用羡慕今天我们要说的这个更强大可以说是安卓系统的瑞士军刀一个按钮决绝n多件事集成手势操作让你操作手机更方便更快捷一个手势,你是否需要一款截屏神器随意一圈,在视频中区域截屏自动识别,一键分享一个手势,随意滑动几下就能找到你所需要的文件内容一个手势,直接在...

weixin_39969448的博客 473

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

【免费下载】 Android手机通过otg线外接usb摄像头使用教程

本仓库提供了Android手机通过OTG线外接USB摄像头的详细操作步骤,作者亲自测试并确认可以使用。 本教程将帮助您了解如何将USB摄像头与Android手机连接,并通过相应的应用程序进行视频捕获。无论是出于监控、视频通话还是其他需要使用摄像头的场景,这个方法都能为您提供便利。 ## 简介 通过OTG线连接,可以让您的Android手机识别并使用外部USB设备,其中包括USB摄像头。在此教...

gitblog_06707的博客 2429

游戏开发-GM系统的设计

游戏管理员(gm)作为游戏中拥有更高权限的账号,在游戏开发的过程中,我们需要很早的将gm系统做出来,作为测试游戏逻辑具有不可替代的作用。 内容目录 服务端与客户端通讯基本流程 gm命令格式设计 gm系统的实现 服务端与客户端通讯基本流程 服务端与客户端通信,如果基本的网络框架搭建完成,那么我们只需要写好命令就可以了 服务器完成一条命令的添加需要3个过程。 (1)命令格式的定义

微不足道 4616

UDS 诊断 - CommunicationControl(通信控制)(0x28)服务 诊断

字节参数名称字节值#1CommunicationControl(通信控制)请求SID0x28#2#3communicationType(通信类型)#4nodeIdentificationNumer(节点标识符)(高位字节)controlType 为 0x04 或 0x05 时,使用该参数#5nodeIdentificationNumer(节点标识符)(低位字节)controlType 为 0x04 或 0x05 时,使用该参数。

耳朵东金子千的博客 1819

android连接otg摄像头,Android系统OTG_usb链接摄像头的驱动和使用

这段时间做一个Android项目,需要在一台Android 4.4.4系统设备上链接usb摄像头,用作人脸识别,于是作为Android项目组“骨干”(哈哈臭屁一下^-^)的我开始了usb摄像头攻坚战,爬帖子,找博客,最后眼睛瞅准了一篇博客(感谢)http://blog.youkuaiyun.com/sukhoi27smk/article/details/18269097然后下载源码开始了我的usb摄像头驱动之...

weixin_29967003的博客 3963

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 997

如何快速连接USB OTG相机:Android外接摄像头完整指南

想要在Android手机上使用USB外接摄像头吗?Android-USB-OTG-Camera项目让你轻松实现这一功能!这款开源工具让你的手机变成专业相机控制器,支持各种USB摄像头设备。无论是视频录制、实时预览还是参数调节,都能在手机上完成,让普通用户也能享受到专业级的相机体验。 ## 📱 准备工作:检查设备兼容性 在开始使用之前,首先确保你的Android设备支持USB OTG功能。大多

gitblog_00980的博客 708

Python之afdx包语法、参数和实际应用案例

Python 的 afdx 包是针对 AFDX 协议的轻量级开发工具,专注于 AFDX 数据帧的解析、构造、发送/接收、协议合规性校验等核心能力,广泛应用于航空电子设备测试、仿真、数据监控等场景。

王国平的博客 982

知识图谱大模型系列之 12 LLM 知识图谱构建器:从零到 GraphRAG 使用 LLM 知识图谱生成器在 GenAI 应用中提取和使用知识图谱(教程含源码)

为了更深入地了解 LLM 知识图谱构建器,GitHub 存储库提供了大量信息,包括源代码和文档。此外,我们的文档提供了详细的入门指南,而GenAI 生态系统则提供了有关可用更广泛工具和应用程序的进一步见解。

iCloudEnd的博客 2037

Android USB相机开发实战:从零构建OTG摄像头集成方案

在移动设备功能日益丰富的今天,Android USB相机开发为开发者提供了突破设备原生摄像头限制的全新可能。通过USB OTG技术,你可以让Android设备连接外置USB摄像头,实现高清视频录制、实时预览和参数调节,为移动监控、工业检测等场景提供专业级解决方案。 ## 🚀 开发痛点深度解析 ### 连接稳定性挑战 **核心问题**:USB设备检测失败是开发者面临的首要难题。在Androi

gitblog_01186的博客 1158

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 582

Android外接摄像头部署全攻略:零代码实现USB OTG影像方案

当手机自带摄像头无法满足专业拍摄需求,或在特定场景下需要多机位拍摄时,通过USB OTG连接外接摄像头成为理想解决方案。本文将以问题为导向,从需求分析到场景拓展,全面介绍如何在Android设备上部署USB OTG摄像头,实现毫秒级响应的影像采集功能。 ## 需求分析:破解外接摄像头的四大核心痛点 在实际应用中,用户常面临以下问题:设备兼容性未知导致连接失败、权限配置复杂引发功能异常、参数调节

gitblog_00083的博客 287

Python 爬虫实战:攻克小红书种草笔记,抓取美妆好物推荐数据

通过本次 Python 爬虫实战,我们成功地从小红书爬取了美妆种草笔记的数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分笔记的数据,且未对笔记中的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多笔记的数据,并深入分析笔记中的多媒体内容、用户行为模式等,为美妆品牌和消费者提供更有价值的数据支持。

u014481728的博客 3268

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android USB OTG相机开发实战:三步掌握外置摄像头集成方案

在移动应用开发中,Android设备原生摄像头的功能限制常常让开发者感到束手束脚。Android-USB-OTG-Camera项目正是为解决这一痛点而生,它提供了一个完整的解决方案,让开发者能够轻松地将外置USB摄像头集成到Android应用中,支持高清视频录制、实时预览和参数调节等功能。无论你是开发移动监控系统、工业检测应用还是专业摄影工具,这个开源库都能帮助你突破设备限制,实现专业级的图像采集

gitblog_00431的博客 196

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

如何通过USB摄像头让安卓手机摄影能力提升300%?

你是否曾因手机摄像头素质不足而错失完美瞬间?其实只需一根OTG线和合适的USB摄像头,就能让你的安卓设备变身专业摄影工具。本文将系统讲解Android USB摄像头技术实现方案,从设备选型到高级配置,助你轻松掌握外接摄像头的全部技巧。 ## 问题引入:手机摄影的痛点与解决方案 **核心价值句**:3分钟了解外接摄像头如何突破手机硬件限制 手机摄影虽方便,但受限于机身厚度和成本,传感器尺寸、光学

gitblog_01141的博客 439

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

手机外接USB摄像头怎么接?AndroidUSBCamera 的 OTG 相机接入实战

AndroidUSBCamera(Android-USB-OTG-Camera)是一个面向 Android 的 USB OTG 相机开发库:把 UVC 摄像头的连接与控制流程整体封装好,几行代码就能接上相机、出预览、拍照、录 1080P MP4,还能调亮度对比度。适配 Android 5.0 到 10.0,底层基于开源项目 UVCCamera。 ## 它解决的是哪类问题 手机自带摄像头位置固定

gitblog_00507的博客 246

解锁手机摄影新可能:Android USB摄像头实战指南

在移动设备摄影日益普及的今天,通过Android USB OTG技术连接外接摄像头,为手机摄影带来了更多可能性。本文将系统讲解如何实现Android USB摄像头的连接与配置,帮助你充分利用外接设备提升拍摄体验。 ## 一、问题诊断:你的设备能否支持USB摄像头? 在开始前,我们需要先确认设备是否具备连接USB摄像头的条件。以下是一个简单的兼容性速查流程: 1. 检查Android系统版本是

gitblog_00315的博客 470

Android UVC摄像头开发指南:从OTG协议到视频流优化的完整实现

随着移动设备计算能力的提升,Android平台对外部硬件的扩展需求日益增长。USB OTG协议与UVC标准的结合为移动设备提供了直接连接视频采集设备的能力,本文将系统讲解Android UVC摄像头开发的技术原理与实现方案,包括设备兼容性分析、驱动配置优化及视频流处理等关键技术点,帮助开发者构建高性能的USB视频采集应用。 ## 需求分析:Android UVC摄像头应用的技术挑战 在开发An

gitblog_00380的博客 423

Android USB相机开发终极指南:5个实战技巧快速掌握OTG摄像头集成

在移动应用开发领域,Android USB相机开发正成为突破设备原生摄像头限制的关键技术。通过USB OTG摄像头集成,开发者可以为Android设备连接外部USB摄像头,实现高清视频录制、实时预览和参数调节,为移动监控、工业检测、直播应用等场景提供专业级解决方案。今天我们将深入探讨Android USB相机开发的核心技术,帮助中级开发者快速掌握OTG摄像头集成的实战技巧。 ## 为什么Andr

gitblog_00163的博客 177

Android USB相机开发终极指南:5个实战技巧构建OTG摄像头集成方案

在移动设备功能日益丰富的今天,Android USB相机开发为开发者提供了突破设备原生摄像头限制的全新可能。通过USB OTG技术,你可以让Android设备连接外置USB摄像头,实现高清视频录制、实时预览和参数调节,为移动监控、工业检测等场景提供专业级解决方案。这个开源项目为你提供了完整的Android外置摄像头解决方案,让你能够快速集成USB相机功能到自己的应用中。 ## 🚀 项目价值与核

gitblog_00561的博客 139

Android外接摄像头免root配置指南:从零开始的高清拍摄方案

在智能手机摄影日益普及的今天,你是否想过让普通Android设备通过简单配置变身专业拍摄工具?本文将带你探索如何利用USB OTG技术实现外接摄像头的免root配置,解锁手机在直播、监控和教学场景下的高清拍摄潜力。我们将从设备选型到实际应用,全面解析Android外接摄像头的实现原理与优化方案。 ## 如何用Android设备连接外接摄像头实现专业拍摄? 为什么普通摄像头能变身专业设备?这背后

gitblog_00177的博客 583

如何用手机实现专业摄影?USB摄像头连接全攻略

你是否曾遇到这样的困扰:手机自带摄像头画质不足,无法满足专业拍摄需求?在进行直播或视频会议时,手机摄像头角度固定,难以调整到最佳视角?户外拍摄时,手机续航有限,长时间使用容易断电?这些问题都可以通过USB OTG摄像头连接方案得到解决。 ## 分步实施指南 ### 🔧【即学即用·难度:★☆☆】阶段一:设备准备与兼容性检测 在开始连接USB摄像头之前,需要确保你的设备满足以下条件: - A

gitblog_00022的博客 531

Android USB OTG相机开发实战指南:从设备连接到高级应用

Android USB OTG相机项目是一个基于UVCCamera技术的开源解决方案,为Android设备提供了便捷连接外部USB摄像头的能力,支持实时预览、拍照录像、参数调节等核心功能。本文将系统讲解该项目的技术实现、环境配置、功能模块及实战应用,帮助开发者快速集成USB相机功能到自己的应用中。 ## 一、核心价值解析:为什么选择USB OTG相机方案 ### 1.1 技术原理简析 该项目

gitblog_00361的博客 196

手机摄影画质差?教你用USB OTG外接专业相机提升10倍效果

你是否遇到过这样的困扰:手机自带摄像头拍不出满意的夜景效果?想要直播时获得更清晰的画面却受限于手机硬件?旅行中想记录高质量视频但又不想携带沉重的专业设备?其实,只需一个USB OTG转接头和合适的外接摄像头,你的安卓手机就能变身专业摄影设备。本文将从问题根源出发,提供一套完整的解决方案,让你用最低成本实现手机摄影的质的飞跃。 ## 一、为什么手机摄影需要外接摄像头? 手机内置摄像头虽然方便,但

gitblog_00292的博客 1047
上一篇: C语言udp的封装和使用
下一篇: Android源码和内核下载编译流程
墨迹流韶
博客等级 码龄12年 3粉丝 7原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值