[英]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.