2010-11-14 45 views
4

我正在使用Flash Builder并创建了一个Spark应用程序Flex项目,该项目将流式传输本地相机的视频。如果我使用mx.controls.VideoDisplay;因为它有attachCamera(camera)方法,所以没有问题。但是Spark的VideoDisplay组件没有这种方法。我知道我可以使用一个Spark应用程序内的MX控制,但我想知道:如何将相机连接到Spark.components.VideoDisplay

  • 是什么spark.components.VideoDisplaymx.controls.VideoDisplay的真正区别?
  • 如何将相机连接到spark.components.VideoDisplay
  • 如果我使用spark(因为mx库更新),有什么优点吗?

谢谢。

编辑:在这个文件中提到:“Flex 4.0开始,Adobe建议您使用spark.components.VideoPlayer类来替代此类(mx.controls.VideoDisplay当)

回答

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); 
} 
+0

感谢您的精彩代码。要移除摄像机,只需执行以下操作:cam.videoObject.visible = false; cam.source = null; – Codebeat 2013-01-06 02:25:00

+4

什么是'mycam'? – csomakk 2013-01-21 19:07:19

+1

mycam是spark VideoDisplay。 – Anas 2014-01-26 07:33:57

4

直起来,答案是你不能将相机连接到Spark VideoDisplay。抱歉。我试图做到这一点,但我不得不默认使用mx VideoDisplay,并且使用它没有任何问题:)

Spark更新,我更喜欢在任何可能的情况下使用它,但在这种情况下,您只需要使用MX控件。它发生了。

+2

正确的答案应该是由Tony代替。 当spark videoDisplay组件确实支持这个时,不需要使用mx名称空间。 稍有不同的是,你应该附加videoDisplay.videoObject。attachCamera()而不是videoDisplay.attachCamera()。 – JSancho 2012-01-30 17:32:08

+0

写完后,这是正确的答案。他们最近才将此功能添加到SDK中。 – 2012-01-30 18:22:46

2

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

要解决我创建了一个虚拟DynamicStreamingVideoObject并通过为源

_cam = new DynamicStreamingVideoSource(); 

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

然后,在应用程序的creationComplete处理函数我这样做

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

这解决了问题。

+3

应该是源=“{_ cam}” 但无论如何这并不能解决问题: mycam.videoObject仍为NULL – yarek 2013-03-22 15:15:32

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

感谢

0

较短的解决方法:

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

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

camVideoDisplay.videoObject.attachCamera(..);