Actionscript 3 如何将摄像头连接到Spark.components.VideoDisplay
我使用FlashBuilder创建了一个SparkApplicationFlex项目,该项目将从本地摄像机流式传输视频。如果我使用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
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)”直截了当地说,答案是您不能将相机连接到sparkVideoDisplay
。很抱歉我也试图做到这一点,但我不得不默认使用mxVideoDisplay
,使用它也没有什么问题:)
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( .. );