当我使用stage.stageVideos [0]实例化一个新的StageVideo instsance时,一切都很好,但是当我离开我的视图时,它会在舞台上显示视频。因此,当我转到另一个视图时,它仍然在后台的舞台上显示。我尝试设置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);
}
}
当i navigator.popView(),stageVideo保留在舞台上时,甚至在其他视图中,当视图返回到该视图以播放不同的流时,相同的流有点“烧毁”最佳。我想不出办法摆脱它!提前谢谢!
答案 0 :(得分:2)
在Flash Player 11中,Adobe将dispose()
方法添加到NetStream
类。
这对于在您完成后清除Video
或StageVideo
对象非常有用。
在运行时调用dispose()
方法时,可能会收到异常,指示dispose
对象上没有名为NetStream
的属性。
这是因为Flash Builder没有使用正确的SWF版本编译应用程序。要解决这个问题,只需将其添加到编译器指令:
-swf-version=13
在新的Flash Builder 4.7中,我们希望不必指定SWF版本来使用较新的Flash Player功能。
这似乎是最好的解决方案,但是如果你不能使用Flash 11(或最新的Adobe AIR),其他一些解决办法就是:
viewPort
设置为宽度= 0且高度= 0的矩形DisplayObject
)答案 1 :(得分:0)
好的问题实际上是,即使看起来舞台视频正在使用,因为我在状态中获得了“加速”消息,实际上视频渲染甚至正在运行,而经典视频实际上正在使用中。我唯一需要做的就是将stage.removeChild(_video)添加到类!!中的close()事件中。