1

当我使用 stage.stageVideos[0] 实例化一个新的 StageVideo 实例时,一切正常,但是当我离开显示视频的视图时,它会粘在舞台上。因此,当我转到另一个视图时,它仍然在后台显示在舞台上。我尝试设置 sv = null,删除事件侦听器......等等。我创建了一个 StageVideoDisplay 类,它在 mxml 中实例化,例如: 在视图初始化时我调用 play() 方法:

if ( _path )
        {
            //... 
            // Connections 
            _nc = new NetConnection(); 
            _nc.connect(null); 
            _ns = new NetStream(_nc); 
            _ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
            _ns.client = this; 

            // Screen 
            _video = new Video(); 
            _video.smoothing = true;  

            // Video Events 
            // the StageVideoEvent.STAGE_VIDEO_STATE informs you whether 
            // StageVideo is available 
            stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, 
                onStageVideoState); 
            // in case of fallback to Video, listen to the VideoEvent.RENDER_STATE 
            // event to handle resize properly and know about the acceleration mode running 
            _video.addEventListener(VideoEvent.RENDER_STATE, videoStateChange); 
            //... 
        }

视频舞台活动:

if ( stageVideoInUse ) {
            try {
                _rc = new Rectangle(0,0,this.width,this.height);
                _sv.viewPort = _rc;       
            } catch (e:Error) {}
        } else {
            try {
                _video.width = this.width;
                _video.height = this.height;
            } catch (e:Error) {}
        }

以及舞台视频可用性活动:

protected function toggleStageVideo(on:Boolean):void 
    {     
        // To choose StageVideo attach the NetStream to StageVideo 
        if (on) 
        { 
            stageVideoInUse = true; 
            if ( _sv == null ) 
            { 
                try {
                    _sv = stage.stageVideos[0]; 
                    _sv.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange); 
                    _sv.attachNetStream(_ns); 
                    _sv.depth = 1;
                } catch (e:Error) {}
            } 

            if (classicVideoInUse) 
            { 
                // If you use StageVideo, remove from the display list the 
                // Video object to avoid covering the StageVideo object 
                // (which is always in the background) 
                stage.removeChild ( _video ); 
                classicVideoInUse = false; 
            } 
        } else 
        { 
            // Otherwise attach it to a Video object 
            if (stageVideoInUse) 
                stageVideoInUse = false; 
            classicVideoInUse = true; 
            try {
                _video.attachNetStream(_ns); 
                stage.addChildAt(_video, 0); 
            } catch (e:Error) {}
        } 

        if ( !played ) 
        { 
            played = true; 
            _ns.play(path); 
        } 
    } 

当我 navigator.popView() 时,在视图中会发生什么,stageVideo 仍保留在舞台上,即使在其他视图中也是如此,并且当返回该视图以播放不同的流时,相同的流在顶部有点“烧毁”。我想不出办法摆脱它!提前致谢!

4

2 回答 2

2

在 Flash Player 11 中,Adobe 将该dispose()方法添加到NetStream类中。

这对于在完成后清除VideoorStageVideo对象很有用。

当您在运行时调用该方法时,您可能会收到一个异常,指示该对象上dispose()没有命名属性。disposeNetStream

这是因为 Flash Builder 没有使用正确的 SWF 版本编译应用程序。要解决这个问题,只需将其添加到您的编译器指令中:

-swf-version=13

在新的 Flash Builder 4.7 中,我们希望不必指定 SWF 版本即可使用更新的 Flash Player 功能。

这似乎是最好的解决方案,但如果您不能使用 Flash 11(或最新的 Adob​​e AIR),其他一些解决方法是:

  • viewPort舞台视频对象设置为 width=0 和 height=0 的矩形
  • 由于舞台视频出现在您的应用程序下方,因此您始终可以覆盖视口(使用背景颜色或一些DisplayObject
于 2012-09-02T16:50:46.143 回答
0

好的,问题实际上是,尽管自从我在状态中收到“加速”消息以来似乎正在使用舞台视频,但实际上它甚至是正在运行的视频渲染,并且实际上正在使用经典视频。我唯一需要做的就是将 stage.removeChild( _video ) 添加到类的 close() 事件中!!

于 2012-09-02T18:06:05.830 回答