Actionscript 3 如何将摄像头连接到Spark.components.VideoDisplay

Actionscript 3 如何将摄像头连接到Spark.components.VideoDisplay,actionscript-3,apache-flex,flash-builder,mxml,flex-spark,Actionscript 3,Apache Flex,Flash Builder,Mxml,Flex Spark,我使用FlashBuilder创建了一个SparkApplicationFlex项目,该项目将从本地摄像机流式传输视频。如果我使用mx.controls.VideoDisplay;没有问题,因为它有附加摄像头(摄像头)方法。但是Spark的视频显示组件没有这种方法。我知道我可以在Spark应用程序中使用mx控件,但我想知道: spark.components.VideoDisplay和mx.controls.VideoDisplay之间的真正区别是什么 如何将摄像头连接到spark.compo

我使用FlashBuilder创建了一个SparkApplicationFlex项目,该项目将从本地摄像机流式传输视频。如果我使用
mx.controls.VideoDisplay
;没有问题,因为它有
附加摄像头(摄像头)
方法。但是Spark的
视频显示组件没有这种方法。我知道我可以在Spark应用程序中使用mx控件,但我想知道:

  • spark.components.VideoDisplay
    mx.controls.VideoDisplay
    之间的真正区别是什么
  • 如何将摄像头连接到spark.components.VideoDisplay上
  • 如果我使用spark,有什么好处吗(因为它比mx库更新)
谢谢


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

直截了当地说,答案是您不能将相机连接到spark
VideoDisplay
。很抱歉我也试图做到这一点,但我不得不默认使用mx
VideoDisplay
,使用它也没有什么问题:)


Spark较新,我也希望尽可能使用它,但在这种情况下,您只需要使用MX控件。发生这种情况。

我试图将相机连接到
videoDisplay.videoObject
-但videoObject始终为空,这会引发错误

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

_cam = new DynamicStreamingVideoSource();

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

这解决了问题。

以下是使其正常工作的细节:

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); 
}
导入mx.events.FlexEvent;
导入org.osmf.net.StreamType;
导入spark.components.mediaClasses.DynamicStreamingVideoItem;
导入spark.components.mediaClasses.DynamicStreamingVideoSource;
私有变量:DynamicStreamingVideoSource=新的DynamicStreamingVideoSource();
私有变量动态视频源:动态流视频源;
受保护函数应用程序1\u creationCompleteHandler(事件:FlexEvent):无效
{
_dynVideoSource=新的DynamicStreamingVideoSource();
向量。;
videoItems=新向量。();
videoItems[0]=新的DynamicStreamingVideoItem();
_dynVideoSource.host=“”;
_dynVideoSource.streamType=streamType.LIVE;
_dynVideoSource.streamItems=视频项目;
mycam.source=_dynVideoSource;
var-cam:Camera=Camera.getCamera();//Camera.names[0]);
凸轮设定模式(640480 15);
凸轮设定质量(0,80);
mycam.videoObject.attachCamera(cam);
}

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

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);
谢谢

较短的解决方法:

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

正确答案应该是托尼的答案。如果spark videoDisplay组件确实支持mx名称空间,则无需使用该名称空间。稍有不同的是,您应该附加videoDisplay.videoObject.attachCamera(),而不是videoDisplay.attachCamera()。写这篇文章时,这是正确的答案。他们最近才将此功能添加到SDK中。感谢您提供的精彩代码。要卸下摄像头,只需执行以下操作:cam.videoObject.visible=false;cam.source=null;mycam是spark VideoDisplay.should是source=“{u cam}”,但无论如何,这并不能解决问题:mycam.videoObject仍然为NULL
<s:VideoDisplay id="camVideoDisplay"
                source="dummy"
                autoPlay="false"
                autoDisplayFirstFrame="false"/>
camVideoDisplay.videoObject.attachCamera( .. );