如何将相机附加到Spark.components.VideoDisplay

时间:2010-11-14 16:00:29

标签: actionscript-3 flex flash-builder mxml flex-spark

我正在使用Flash Builder并创建了一个spark-application Flex项目,该项目将从本地摄像头流式传输视频。如果我使用mx.controls.VideoDisplay;没有问题,因为它有attachCamera(camera)方法。但Spark的VideoDisplay组件没有这种方法。我知道我可以在Spark应用程序中使用mx控件,但我想知道:

  • spark.components.VideoDisplaymx.controls.VideoDisplay之间的真正区别是什么?
  • 如何将相机附加到spark.components.VideoDisplay
  • 如果我使用spark(因为它是mx库的新版本),是否有任何优势?

感谢。

编辑:在文档中提到了这一点:“从Flex 4.0开始,Adobe建议您使用spark.components.VideoPlayer类作为此类的替代方法。(mx。 controls.VideoDisplay)

5 个答案:

答案 0 :(得分:14)

以下是实现此目的的具体细节:

import mx.events.FlexEvent;

import org.osmf.net.StreamType;

import spark.components.mediaClasses.DynamicStreamingVideoItem;
import spark.components.mediaClasses.DynamicStreamingVideoSource;

private var _cam:DynamicStreamingVideoSource =  new DynamicStreamingVideoSource();
private var _dynVideoSource:DynamicStreamingVideoSource;

protected function application1_creationCompleteHandler(event:FlexEvent):void
{

    _dynVideoSource=new DynamicStreamingVideoSource();

    var videoItems:Vector.<DynamicStreamingVideoItem>;
    videoItems=new Vector.<DynamicStreamingVideoItem>();
    videoItems[0]=new DynamicStreamingVideoItem();

    _dynVideoSource.host= "";
    _dynVideoSource.streamType=StreamType.LIVE;
    _dynVideoSource.streamItems=videoItems;

    mycam.source=_dynVideoSource;

    var cam:Camera = Camera.getCamera(); //Camera.names[0]);
    cam.setMode(640, 480, 15);
    cam.setQuality(0, 80);
    mycam.videoObject.attachCamera(cam); 
}

答案 1 :(得分:4)

直接,答案是你无法将相机连接到Spark VideoDisplay。抱歉。我也试图让这种情况发生,但我不得不默认使用mx VideoDisplay并且使用它没有任何问题:)

Spark更新,我更愿意尽可能使用它,但在这种情况下,你只需要使用MX控件。它发生了。

答案 2 :(得分:2)

我尝试将相机附加到videoDisplay.videoObject - 但视频对象始终为空,这会引发错误。

为了解决这个问题,我创建了一个虚拟的DynamicStreamingVideoObject并将其作为源

传递
_cam = new DynamicStreamingVideoSource();

<s:VideoDisplay id="mycam" source="_cam" />

然后,在应用程序的creationComplete处理程序中,我做了这个

var cam:Camera = Camera.getCamera();
mycam.videoObject.attachCamera(cam); 

这解决了这个问题。

答案 3 :(得分:2)

一直在寻找解决方案,并找到了以下

var cam:Camera = Camera.getCamera(); 
cam.setMode(320, 240, 15);
cam.setQuality(0, 0);
var myCam:Video = new Video(320,240);
myCam.attachCamera(cam);
myVideo.addChild(myCam);

感谢

答案 4 :(得分:0)

更短的解决方法:

<s:VideoDisplay id="camVideoDisplay"
                source="dummy"
                autoPlay="false"
                autoDisplayFirstFrame="false"/>

在这种情况下,Video对象可以引用为camVideoDisplay.videoObject,例如:

camVideoDisplay.videoObject.attachCamera( .. );