1

I'm in the process of attempting to use the camera and some motion tracking AS3 classes to detect movement in front of a ViewSonic Smart Display, for the sake of a demo. I've gotten the app and detection to function on other Android devices, but the 'Smart Display' is presenting me with some odd issues.

Taking a long shot that someone might've encountered this, but this is the very simple camera set up code I reduced the issue down to:

var camera = Camera.getCamera();
camera.setMode(stage.stageWidth, stage.stageHeight, 30, true);
var video:Video = new Video(stage.stageWidth, stage.stageHeight);
video.attachCamera(camera);

My problem lies at the point of "video.attachCamera" For some reason, this device takes this function as "Display the video in a tiny window in the upper right hand corner" and ignores all other code, dominating the screen with blank black, and a tiny (maybe 40x20px square) of video stream.

Image of it occuring... enter image description here

Any help is much appreciated, thanks

4

1 回答 1

1

问题可能是您使用该setMode()方法传递给相机的值。您正在尝试将相机设置为以舞台的宽度/高度进行捕捉。

相机可能没有这样的捕获分辨率,并且正如setMode() 的文档所述,它会尝试找到与您指定的内容接近的内容:

将相机捕捉模式设置为最符合指定要求的原生模式。如果相机没有与您传递的所有参数匹配的本机模式,则运行时会选择最接近合成请求模式的捕获模式。这种操作可能涉及裁剪图像和丢帧。

现在,您肯定希望 Flash 选择的分辨率大于屏幕截图中显示的分辨率。但是考虑到无数的相机设备/驱动程序,在你的情况下这可能不是很好。

您可以先尝试使用更典型的分辨率来捕获视频:480x320、640x480、800x600 或最多 1024x768。Web 上的大多数应用程序可能使用第一个或第二个捕获分辨率。

所以改变:

camera.setMode(stage.stageWidth, stage.stageHeight, 30, true);

至:

camera.setMode(640, 480, 30, true);

请注意,您可以以任何您想要的大小显示视频,但您可以使用的捕获分辨率取决于您的相机硬件/驱动程序/操作系统/等。典型的分辨率具有 4:3 的纵横比并且相对较小(不是屏幕/舞台的完整尺寸)。您使用的捕获分辨率会影响视频质量以及流式传输视频所需的网络带宽量。通常(对于流式传输),您不想使用大的捕获分辨率,但在您的动作捕获用例中它可能并不那么重要。

于 2013-08-02T15:57:45.507 回答