如何将虚拟相机发送到 Ubuntu 中的 Genymotion 或 Android Studio Emulator?

Posted

技术标签:

【中文标题】如何将虚拟相机发送到 Ubuntu 中的 Genymotion 或 Android Studio Emulator?【英文标题】:How can I send a virtual camera to Genymotion or Android Studio Emulator in Ubuntu? 【发布时间】:2021-03-08 11:12:09 【问题描述】:

我使用 v4l2loopback 和 ffmpeg 创建了一个虚拟相机。我用于 ffmpeg 的命令是: ffmpeg -re -l oop 1 -i vin.png -vf 格式=yuv420p -f v4l2 /dev/video2

vin.png 是我想流式传输到网络摄像头的图像,/dev/video2 是我使用 v4l2loopback 创建的虚拟网络摄像头。 虚拟网络摄像头有效,我可以看到它,例如与onlinemicetest.com/webcam-test。 我在 Ubuntu 20.40 上使用 Genymotion 模拟器和最新的 android API(我尝试了 7.0、8.1 和 10.0)。 Genymotion 检测到虚拟相机,但只显示一个虚拟图像: Wrong dummy Image from Genymotion 我也尝试过(并且更愿意使用)android studio 模拟器。但是我只能在设备摄像头的配置中选择 Webcam0,它指向真正的集成摄像头,而不是我的虚拟摄像头。

我不需要使用 ffmpeg,但我确实需要使用一个工具来控制从命令行流式传输的图像。

有没有办法解决这个问题?非常感谢!

2020 年 11 月 17 日更新: Genymotion 支持人员回答我说,他们计划在未来支持虚拟摄像机。他们可能已准备好在 2021 年中期添加此功能。

【问题讨论】:

你试过bluestacks.com 不幸的是,Bluestacks 不能在 linux 上运行 【参考方案1】:

您不能:Genymotion 不支持虚拟相机。见https://support.genymotion.com/hc/en-us/articles/360002734498-My-webcam-does-not-work-with-Genymotion-Desktop

【讨论】:

但我实际上使用 manycam 让它在 Windows 中工作...... @ykasur 你能给我一个链接吗?【参考方案2】:

使用 OBS 和 Android Emulator 的解决方案:

    关注本教程:https://blog.jbrains.ca/permalink/using-obs-studio-as-a-virtual-cam-on-linux 使用这些命令来改变你的 obs 场景:https://gist.github.com/nooitaf/9aabf72d00e16a61ea301c69ff38d804 检查您使用的是哪个/dev/video:v4l2-ctl --list-devices 检查哪个网络摄像头链接到您的 avd 中的视频:./emulator -avd Pixel2 -webcam-list 使用该网络摄像头从命令行启动模拟器:./emulator -avd Pixel2 -camera-back webcam2

【讨论】:

【参考方案3】:

1、编辑640480格式的图片,生成流" ffmpeg -re -l oop 1 -i 640480.png -vf 格式=yuv420p -f v4l2 /dev/video0"。

2、现在genymotion相机设置显示OK了。

3,但还是无法从虚拟相机拍照,:(.

genymotion virtual camera test with 640*480 Picture

error in take picture

【讨论】:

可能genymotion只匹配特定格式的流媒体,对于640*480显示不错。 如何扩大分辨率? 640x480 这是非常非常差的质量。如何至少扩展到720p?

以上是关于如何将虚拟相机发送到 Ubuntu 中的 Genymotion 或 Android Studio Emulator?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个图像发送到android中的另一个活动?

如何等到相机在android中捕获图像?

ubuntu 下如何获取USB接口相机的uri路径

虚拟机 上的ubuntu系统 移到 物理机 上启动

ubuntu虚拟机如何满屏

用scp将主机中的文件复制到虚拟机中的客户机中