【问题标题】:Flex Spark VideoObject is nullFlex Spark VideoObject 为空
【发布时间】:2012-07-10 16:05:09
【问题描述】:

我正在使用 spark 视频组件,但是 spark videoObject 为 null,当使用动态视频源对象时它仍然为 null。相机被正确检测到,但是当使用变量时它为空,当直接使用相机对象时检测到usb相机并且videoobject仍然为空......任何想法???

现在,当使用 Camera.names 时,所有“相机”都为空,当从 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"
                }
            }

这是运行应用的截图。

【问题讨论】:

  • 我通常在播放视频时自己动手,所以我没有使用过 Spark VideoPlayer 类。但是,docs 表示如果source 属性是null,那么可能还没有底层videoObject。也许如果您显示更多代码,我们可以提供更多帮助。
  • 谢谢@SunilD。我已经添加了我的实际代码...

标签: actionscript-3 apache-flex flex-spark


【解决方案1】:

我查看了VideoPlayer 代码,这个类的很多属性都有这样的设置器:

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 参数不是相机的实际名称。它应该是 String 数组中相机索引的 Camera.names 表示形式。引用文档:

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

【讨论】:

  • 好的,好的建议@SunilD 感谢您的回答我已经附加了相机对象...但是视频全部显示为黑色...
  • 正确,您将相机对象附加到 nullvideoObject 属性)。如果您使用的是调试 Flash 播放器,除了生成运行时异常之外,这不会做任何事情。我的建议是等到 Spark 视频播放器组件有机会初始化这个 videoObject 属性之后——然后附加摄像头。
  • 是的,我使用 callLater 函数完成了您所说的操作,它运行良好,视频对象和相机对象不再为空,视频播放器工作正常,但播放一切“黑色”有什么建议吗? =)
  • 我应该早点问这个问题:Spark VideoPlayer 类是否支持摄像头?为了显示我的相机正在捕捉的内容,我使用了一个普通的旧 Video 对象(在 Flex 中,您必须将其包装在 UIComponent 中),并将相机附加到 Video 对象。 Spark VideoPlayer 播放录制/流媒体内容,但我不太确定它是否用于显示相机正在捕获的内容(文档没有说它支持或不支持它)。
  • videoplayer里面有videoobject和videodisplay组件,videoobject相当于mx video的spark,videodisplay还有另外一个videoobject,都支持使用attachcamera方法的相机
猜你喜欢
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2012-02-06
  • 2012-01-15
  • 1970-01-01
  • 2012-03-16
  • 2013-11-22
相关资源
最近更新 更多