在 Android 应用程序上使用 USB 摄像头

Posted

技术标签:

【中文标题】在 Android 应用程序上使用 USB 摄像头【英文标题】:Use USB Camera on Android application 【发布时间】:2012-02-16 08:18:03 【问题描述】:

我需要在 android 3.2 上显示连接到我的平板电脑的 USB 摄像头传输的视频。

我该怎么做?

我无法使用平板电脑的相机,因为我的平板电脑是固定在船上的。

【问题讨论】:

不能使用平板电脑的相机,因为它“固定在船上”? 它是用于工业实用程序的,我无法移动平板电脑,所以我必须使用 USB 摄像头。 【参考方案1】:

(我在 2012 年不支持 USB 摄像头时写了这篇文章。我不再在 Android 上工作了。所以我无法解释如何使用最新 Android 的 API 来做到这一点。如果您知道任何更好的解决方案,请发布在这里。)

只有当 USB 摄像头内的传感器符合 UVC 标准(当今的大多数摄像头都符合标准)时,该讨论才成立。

截至本文发布之日(2012 年 3 月 1 日),没有可用于外部摄像头的默认 Android API。因此,如果您认真对待该项目,您所做的工作将涉及编写与内核驱动程序对话的固件,然后在 Android 应用程序层上显示数据。

当您插入 USB 摄像头时,您需要先检查几件事。

1) 您的相机是否通过 USB 端口供电?(为此,您的 USB 端口应该支持 USB-OTG - USB 端口可以作为目标和主机,检查指示灯是否亮相机上(如果有的话)是否发光?)

2) 节点是否在 /dev 目录中创建?(仅在内核启用 v4l2 和 UVC 支持的情况下,才会创建节点)。如果节点正在创建,现在您可以访问真正的硬件,即 USB 摄像头,您的工作将从这里开始变得轻松。在 android 文件系统中检查 do ls -l /dev/v* 并检查是否正在创建 video0 或 video1。

4) 如果创建了节点,需要编写固件(UVC)并从真实硬件中获取帧。 它(UVC)支持与 v4l2 层对话的不同 ioctl 调用内核并会为您获取帧。

这些帧主要是 YUYV422 或 YUYV420 格式。

收到帧后,将其转换为 RGB 或 Jpeg(Android 支持转换)并显示在您喜欢的画布或图像视图上。

对于录制,您可能必须使用 ffmpeg 进行编码。这会将图像转换为视频。

【讨论】:

谢谢你的回答,我很感兴趣!!! 1)我尝试了 2 个网络摄像头,第一个不亮,第二个不亮。 2) 在Android 目录中,已创建文件系统“video0”。 3)在这一点上,我需要帮助XD 我还想从 USB 网络摄像头捕捉照片和视频。并将其下载到 Android 设备上。我在这里遇到了您的描述,并想为此开始开发。请建议从哪里开始??我发现 Video4Linux(V4L) 库可以为 linux 做到这一点,所以希望这也适用于 Android 没有任何生根,因为在 Play 商店中有一个应用程序可以在没有生根的情况下做同样的事情......here 需要root的原因是1.设备节点没有用户权限。 2. 我已将 FFmpeg 库复制到 /system/lib。为此,需要完成 adb root 和 adb remount。我认为现在 FFMpeg 可以与应用程序集成,但我不确定正在创建的设备节点 (/dev/video1) 是否有权让用户读取它。如果是,那么您可以毫无问题地做到这一点。 @Manty:感谢您的快速回复。使用该 google play store 试用应用程序后,我确信无需 root 即可实现此功能。我的问题是如何开始解决这个问题? OpenCV 是否有能力做到这一点? 我没用过openCV。但我听说有人这样做。对不起。但整个想法应该是首先为 arm 构建一个可执行文件,以便能够从 USB 摄像头捕获图像。为此,您可以使用 wither uvc 或 opencv(我不确定)。【参考方案2】:

在开始之前值得检查的一件事是您的 USB 电缆是否适用于鼠标、键盘和 USB 驱动器(您需要在某些设备上安装 StickMount 应用程序才能使 USB 驱动器正常工作)。

我还希望在 Android 上安装一个 USB 网络摄像头,并尝试重现 http://brain.cc.kogakuin.ac.jp/research/usb-e.html 所做的工作。最后我听说蓝牙网络摄像头开箱即用。

【讨论】:

值得注意的是,该用户也在使用 CM9 模组。如果没有 CM9,我无法让该 hack 工作,也无法使用 CM9 进行尝试。【参考方案3】:

现在(2017 年)有支持 USB 视频输入的安卓应用:

https://play.google.com/store/apps/details?id=labsp.android.viewer&hl=it

可能需要“Y 形”OTG 电缆(“Y 形”OTG 电缆允许为外部设备供电)

【讨论】:

你真的认为这是对这个问题的回答吗? 确定是:问题是关于如何将 USB 摄像头连接到 Android 平板电脑。也许对于像 OP 这样的“古老”平板电脑的拥有者来说,这是不可能的,但是所有来这里寻找平板电脑答案的人都会发现我的答案非常有用。我的答案也是对下面投票最多的答案的更新,该答案现在已经过时,因为当前的智能手机确实有外部 USB 摄像头的驱动程序,并且 Google Play 商店中有很多应用程序(查找“easycap”或“usb video capture” . 问题是如何使用有问题的。你没有给出解决方案。你只是给了一个APP url。你应该给出一个关于问题的想法 我同意我的回答已经过时了。我要求您通过再简要介绍一下来更新您的答案。理想情况下,它应该有一些示例代码和对 API 的引用,解释如何编写一个简单的应用程序以在 Android 中使用 USB 摄像头。

以上是关于在 Android 应用程序上使用 USB 摄像头的主要内容,如果未能解决你的问题,请参考以下文章

批量传输和 Android USB API

Linux笔记(固定USB摄像头硬件端口,绑定前后置摄像头)

如何在颤振应用程序中使用外部 USB 摄像头?

Android NDK——实战演练之TextureView的应用之调用外接USB摄像头自动对焦并完成隐蔽拍照

我可以在使用 android studio 开发应用程序时禁用 android 默认摄像头(后置和前置)吗

Android USB摄像头插拔监听