Android:如何在模拟器中使用网络摄像头?

1''*_*1'' 70 android

我通过将前置摄像头设置为AVD Manager中的"webcam0"将网络摄像头连接到我的仿真器.当我启动模拟器的相机应用程序时,我收到错误

CameraService::connect X (pid 702) rejected (invalid cameraId 0).
Run Code Online (Sandbox Code Playgroud)

这是Android源代码的相关部分:

sp<ICamera> CameraService::connect(
    const sp<ICameraClient>& cameraClient, int cameraId) {

    int callingPid = getCallingPid();

    [...]

    if (cameraId < 0 || cameraId >= mNumberOfCameras) {
        LOGE("CameraService::connect X (pid %d) rejected (invalid cameraId %d).",
            callingPid, cameraId);
        return NULL;
    }

    [...]
}
Run Code Online (Sandbox Code Playgroud)

网络摄像头已正确分配ID为0,因为只有1个摄像头.但是,mNumberOfCameras大概仍为0.这意味着摄像机正在由仿真器注册,但它并没有费心去更新连接的摄像机的数量.

如何连接网络摄像头以便模拟器正确识别?

编辑:命令emulator -webcam-list -avd <name of your AVD>in \android-sdks\tools给出结果:

List of web cameras connected to the computer:
Camera `webcam0` is connected to device `AndroidEmulatorVC0` on channel 0 using pixel format `BGR4`
Run Code Online (Sandbox Code Playgroud)

当我从Eclipse的AVD管理器启动网络摄像头或使用时emulator -camera-front webcam0 -avd <name of your AVD>,我得到以下窗口:

在此输入图像描述

编辑2:这似乎是模拟器中的一个错误.建议的答案告诉您如何设置相机,但不能解决我的问题.我最终通过使用内置网络摄像头的笔记本电脑解决了这个问题.也许另一个USB网络摄像头可能也有效.

det*_*man 83

UPDATE

在Android Studio AVD中:

  1. 打开AVD管理器:

AVD菜单

  1. 添加/编辑AVD:

特定的AVD带

  1. 单击屏幕底部的"高级设置":

AVD高级设置

  1. 将您选择的相机设置为前/后相机:

AVD相机设置

  • 当相机启动时,它会立即使模拟器崩溃。我在Mac上。 (4认同)
  • @walkmn 您可以通过 CLI 使用备用摄像头: `cd "${ANDROID_HOME}/tools"; ./emulator -avd $VIRTUAL_DEVICE_AVD_ID -后置摄像头1` (3认同)
  • 您不应将前后摄像头设置为相同的信号源. (2认同)
  • @ChrisRiver 为什么不呢?应该没关系。 (2认同)
  • 凉爽的!但是,如果我们有多个摄像头,如何更换摄像头? (2认同)

Lal*_*h B 40

按照Eclipse中的以下步骤操作.

  1. 转到 - > AVD经理
  2. 创建/编辑AVD.
  3. 硬件>新:
  4. 配置相机朝后
  5. 单击属性值并选择="webcam0".
  6. 完成上述所有操作后,应连接网络摄像头.如果没有,那么你需要检查你的WebCam驱动程序.

点击此处获取更多信息: 如何在Android模拟器中使用网络摄像头捕获实时图像?

在此输入图像描述

  • 我认为这是AVD经理的旧UI.我曾经有一个看起来像这样的窗口,但现在我可以从专用的下拉菜单中选择前后摄像头. (2认同)

Hal*_*oum 7

我建议你看一下这篇评价很高的博客文章,它会设法解决你遇到的问题:

http://www.inter-fuser.com/2009/09/live-camera-preview-in-android-emulator.html

他的代码基于当前的Android API,并且鉴于您使用的是最近的Android API,它应该适用于您的情况.


Bra*_*ick 5

在 macOS 上

解释

添加到上面@nurnachman的答案,在 macOS 上,您还需要通过使用从终端启动模拟器来授予模拟器提升的权限。sudo

脚步

1. 使用 Android 设备管理器将相机设置设置为Webcam0

更新

在 Android Studio AVD 中:

  1. 打开 AVD 管理器:

AVD菜单

  1. 添加/编辑 AVD:

特定AVD条带

  1. 单击屏幕底部的高级设置:

AVD 高级设置

  1. 将您选择的相机设置为前置/后置摄像头:

AVD 相机设置

2.启动macOS终端

3. 在终端中,输入以下命令列出已安装的 Android 模拟器的名称

通过 Android Studio 安装的模拟器:

~/Library/Android/sdk/emulator/emulator -list-avds
Run Code Online (Sandbox Code Playgroud)

通过 Visual Studio for Mac 安装的模拟器:

~/Library/Developer/Xamarin/android-sdk-macosx/emulator emulator -list-avds
Run Code Online (Sandbox Code Playgroud)

4. 使用提升的权限启动 Android 模拟器:

通过 Android Studio 安装的模拟器:

sudo ~/Library/Android/sdk/emulator/emulator -avd [Your Emulator Name]
Run Code Online (Sandbox Code Playgroud)

注意:替换[Your Emulator Name]为步骤 3 中发现的模拟器的名称

例如sudo ~/Library/Android/sdk/emulator/emulator -avd pixel_5_-api_33

通过 Visual Studio for Mac 安装的模拟器:

~/Library/Developer/Xamarin/android-sdk-macosx/emulator -avd [Your Emulator Name]
Run Code Online (Sandbox Code Playgroud)

注意:替换[Your Emulator Name]为步骤 3 中发现的模拟器的名称

例如sudo ~/Library/Developer/Xamarin/android-sdk-macosx/emulator -avd pixel_5_-api_33

5. 当模拟器启动并且您的应用程序访问相机时,接受 macOS 请求以授予相机权限


故障排除

确保终端启用摄像头权限

如果通过终端以提升的权限启动 Android 相机后仍然无法工作,请在System Settings.app中导航至Privacy & Security->并确保启用了Camera相机权限Terminal

在此输入图像描述

  • 我也从终端开始 `~/Library/Android/sdk/emulator/emulator -avd API_30_Google_Api -camera-front webcam0` 与 `-camera-back`、`-camera-front`、`webcam1 的所有组合相同` 和 `webcam0`。即使我在 UI 设置中设置它。它永远无法识别相机,而且 MacOS 也从未向我询问过。所以一定是别的东西。顺便说一句,我使用 Apple Silicon M1 (2认同)