如何在Android模拟器相机中模拟一张图片?

30

有办法将静态图片设置为模拟器相机拍摄的照片吗?我想在模拟器上使用zxing条形码阅读器进行测试。


你最终实现了哪个解决方案或者哪个方法对你有效? - Dhiman
3个回答

27

如果您正在Linux上运行模拟器,您可以使用v4l2loopback和gstreamer创建一个显示图像(例如QR码)的虚拟摄像头。

安装v4l2loopback:

$ wget https://github.com/umlaeute/v4l2loopback/archive/master.zip
$ unzip master.zip
$ cd v4l2loopback
$ make
$ sudo make install

检查您已经拥有多少个摄像头(我只有/dev/video0),然后初始化下一个:

检查您已经拥有多少个摄像头(我只有/dev/video0),然后初始化下一个:

$ sudo modprobe v4l2loopback video_nr=1 card_label="mockCam"

将图像(例如来自googlecharts的QR码)流式传输到模拟摄像头。这需要:

$ wget "https://chart.googleapis.com/chart?chs=600x340&cht=qr&chl=testing" -O qr.png
$ gst-launch-0.10 filesrc location=qr.png ! pngdec ! freeze ! v4l2sink device=/dev/video1

您可以检查模拟器是否捕获了您的模拟摄像头:

$ ./emulator -avd yourAVD -webcam-list

如果是这样,您可以使用模拟摄像头启动仿真器:

$ ./emulator -avd yourAVD -camera-back webcam1

您还可以将AVD设置更改为webcam1。希望这可以帮助。


4
如果有人试图在gst-launch-1.0中使用此命令,则应将freeze更改为imagefreeze - Elias Soares
1
今天是"cd v4l2loopback-master",然后在modprobe之前运行"sudo depmod -a" :) - Arno Teigseth
1
使用gst-launch进行流媒体传输时遇到了问题,但使用ffmpeg可以实现:ffmpeg -loop 1 -stream_loop -1 -framerate 10 -i binary-file.png -pix_fmt yuv420p -s 320x240 -f v4l2 /dev/video1 - ufk
我还需要指定 -camera-front none。仅设置 -camera-back 选项会导致以下错误:_camera_client_query_stop: Camera '/dev/video2' is not started - xonya

8

你能详细解释一下吗?我不明白CameraSource是如何实现的。 - John Giotta
CameraSource只是一个抽象类(http://www.tomgibara.com/android/CameraSource.java)。在模拟器中测试时,您可以实例化bitmapcamera,以便使用您提供的特定图像进行测试。但是,在实际设备上运行时,您可以实例化一个GenuineCamera类,该类使用设备的相机:http://www.tomgibara.com/android/GenuineCamera.java。 - Joel Martinez
在Google IO会议上曾经说过可以使用网络摄像头。但是我没有找到如何实现:https://developers.google.com/events/io/sessions/gooio2012/104/ 也许他们是在谈论下一个版本?! - Mark
这可能适用于基本的“拍照”用例,但没有实现Camera.PreviewCallback。 - tomwhipple
我正在查看BitmapCamera代码,但它并不明显它是做什么或者如何做到的。这段代码是否允许我们提供一张图片而不是加载相机? - Ciaran Gallagher
1
是的,没错...这样做,你可以使用一个模拟类来提供静态位图,而不是使用相机API,从而完成所有测试。 - Joel Martinez

0

1
我尝试了模拟相机,它显示了一个视频。很好。但是如果我想要一张静态图片呢? - fangmobile
虽然有点晚了,但是每一帧视频都被转换成纹理并加载到表面上。同样,您也可以将图像作为纹理传递并加载它。 - muneikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接