[英]Flex Spark VideoObject is null
我正在使用Spark视频组件,但是spark videoObject为null,当使用动态视频源对象时,它仍为null。 可以正确检测摄像机,但是使用变量时为null,直接使用Camera对象时,将检测到usb摄像机,而videoobject仍然为null ...任何想法?
现在,当使用Camera.names时,所有“ cameras”都为空,当从apache虚拟主机播放视频时,其播放效果很好,真是太不可思议了……!
根据要求,更新了代码:
import mx.controls.Alert;
import mx.events.FlexEvent;
import spark.components.VideoPlayer;
private var vidPlyr:VideoPlayer = null;
protected function winAppCreated(event:FlexEvent):void {
// Video Player
vidPlyr = new VideoPlayer();
vidPlyr.width = 320;
vidPlyr.height = 240;
// Video from apache virtualhost:
vidPlyr.source = "http://flex.test.capimg/JormaKaukonenCracksInTheFinish.flv";
addElement(vidPlyr);
var cameraTV:Camera = Camera.getCamera(Camera.names[0]);
var cameraUSB:Camera = Camera.getCamera(Camera.names[1]);
if (cameraTV) {
vidPlyr.videoDisplay.videoObject.attachCamera(cameraTV);
} else {
Alert.show("no TV card - " + Camera.names[0]);
// Alert shows: "no TV card - SAA7130 Analog TV Card"
}
if (cameraUSB) {
vidPlyr.videoDisplay.videoObject.attachCamera(cameraUSB);
} else {
Alert.show("no USB camera - " + Camera.names[1]);
// Alert shows: "no USB camera - USB2.0 Grabber"
}
}
这是正在运行的应用程序的屏幕截图。
我看了一下VideoPlayer
代码,该类的许多属性都有如下所示的setter:
public function set source(value:Object):void
{
if (videoDisplay)
{
// do the real work
}
else
{
// store the value so we can use it later
}
}
VideoDisplay
是视频播放器类的外观部分。 设置源时,外观必须未初始化videoObject
属性。 我将设置信号源,然后等待尝试连接相机。
Flex具有可以解决此问题的callLater()
方法。 callLater()
将在下一个Flex更新周期执行您指定的功能:
// after setting the source
callLater(attachCamera);
// define a new function 'attachCamera' to call later
private function attachCamera():void
{
// if the videoObject property is not null
if (vidPlyr.videoDisplay.videoOjbect != null)
{
// attach the camera here
}
else
{
trace("cannot attach the camera, videoObject is still null");
}
}
[编辑]
获取相机的API很奇怪,签名为:
public static function getCamera(name:String = null):Camera
但是,该name
参数不是摄像机的实际名称。 它应该是Camera.names
数组中摄像机索引的String
表示形式。 引用文档:
name:String(default = null)—指定要获取的摄像机,这是由names属性返回的数组确定的。 对于大多数应用程序,请省略此参数以获取默认相机。 要为此参数指定一个值,请使用Camera.names数组中从零开始的索引位置的字符串表示形式。 例如,要指定数组中的第三个摄像机,请使用Camera.getCamera(“ 2”)。
当您将相机与callLater(attachCamera)
时,尝试做类似这样的通用操作:
private function attachCamera():void
{
var cameras:Array = Camera.names;
var length:int = cameras.length;
var cameraObjects:Array = [];
for (var i:int = 0; i < length; i++)
{
cameraObjects.push( Camera.getCamera( i.toString() );
}
// use your own logic to select a camera, if there's more than one
if (cameraObjects.length > 0 && vidPlyr.videoDisplay.videoOjbect != null)
{
vidPlyr.videoDisplay.videoOjbect.attachCamera( cameraObjects[0] );
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.