2

我有一个视频显示器(火花)和相机。

     public var camera:Camera;
     ...
     livePreview.source = getDynamicStreamingVideoSource();
     camera.setMode(camWidth, camHeight, 15);
     livePreview.videoObject.attachCamera(camera);
     ...
     <s:VideoDisplay id="livePreview" ... />

在某些情况下,在我的代码中的某处,我尝试通过调用 camera.setMode(newWidth, newHeight) 和设置 livePreview.width = newWidth, livePreview.height = newHeight 以编程方式调整大小。从我所看到的情况来看,这并不奏效。livePreview 调整到新的宽度和高度,但不是相机,至少部分调整。例如,原始尺寸为 250、250,如果我将 500 (W) 和 250 (H) 设置为新尺寸,摄像机视频将水平显示为挤压,但物理宽度保持在 250。现在这是关键,如果我将 livePreview.scaleMode 设置为“拉伸”,相机视频将完全按照我想要的方式显示视频(不失真,大小正确,比例完好)。

现在是我真正的问题:这在性能方面效果不佳。“拉伸”确实向您展示了它正在拉伸视频,至少需要一秒钟才能完成。太慢了。我希望它在没有任何影响的情况下立即工作。我也不明白为什么在我指定正确的宽度并且与videoDisplay宽度相同时需要拉伸它。我在这里失踪了吗?

4

1 回答 1

0

我在 ActionScript 3.0 Cookbook(recipe 16.6,pg 398-399)一书中偶然发现了一些东西。为了尊重版权,我不会直接引用太多,但这里有一个摘要。我希望它是您正在寻找的:

我不知道你是否真的创建了一个 Video 对象(或者你是否可以),但书中说视频播放的尺寸取决于 Video 对象的宽度和高度属性。

var video:Video = new Video(160, 120);
//Now we change the dimensions of the video to scale it up to twice the size.
video.width = 320;
video.height = 240;

虽然我没有使用 Camera 对象的任何直接经验,但我想如果你要从 Camera 对象创建一个 Video 对象(我什至不知道该怎么做,或者如果你可以......另一个问题,也许,)然后你可以直接调整视频的尺寸。

现在听起来像是视频显示对象试图显示比可用分辨率更高的分辨率,因此它正在对视频进行像素化。这就像试图在平板电脑上全屏显示邮票大小的视频......那里没有足够的实际像素数据,所以像素本身被放大了。

您必须找到一种方法来直接调整视频本身的大小,而不仅仅是 videoDisplay 容器。

我不知道这是否有帮助,特别是因为我不是视频专家,但也许这会给你一些想法......?

编辑:我找到了如何从相机中获取视频(来自另一个 SO 问题!),所以这是我推荐的用于放大视频的完整代码:

var camera:Camera = Camera.getCamera();
//You'll want to set the camera's quality and mode.

//Get video from camera.
var video:Video = new Video(160,120);
video.attachCamera(camera);

//Size up video to 320x240.
video.width = 320;
video.height = 240;

//Now, connect the video to the LivePreview object, 
//instead of connecting the camera and the preview directly.

最后一个建议...尝试以您想要的最高分辨率从相机获取输入,然后缩小而不是放大。这将保持质量。

该代码未经测试,因此可能需要调整。尽管如此,我希望这能让你开始解决你的问题!

于 2012-11-10T22:07:25.880 回答