在
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
处理函数中,根据 StageVideo 的可用性确定是使用 Video 对象还是使用 StageVideo 对象。如果
StageVideoAvailabilityEvent.availability
属性设置为
StageVideoAvailability.AVAILABLE
,则使用 StageVideo。在这种情况下,可依赖于 Stage.stageVideos 矢量来包含一个或多个 StageVideo 对象。从
Stage.stageVideos
属性获取 StageVideo 对象,并将 NetStream 对象附加到它。由于 StageVideo 对象始终显示在背景中,因此需删除所有现有的 Video 对象(始终位于前景中)。还可以使用此事件处理函数添加
StageVideoEvent.RENDER_STATE
事件的侦听器。
如果
StageVideoAvailabilityEvent.availability
属性设置为
StageVideoAvailability.UNAVAILABLE
,请勿使用 StageVideo 或访问
Stage.stageVideos
矢量。在这种情况下,请将 NetStream 对象附加到 Video 对象。最后,请将 StageVideo 或 Video 对象添加到舞台,并调用
NetStream.play()
。
下面的代码显示如何处理
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
事件:
private var sv:StageVideo;
private var video:Video;
private function onStageVideoState(event:StageVideoAvailabilityEvent):void
{
// Detect if StageVideo is available and decide what to do in toggleStageVideo
toggleStageVideo(event.availability == StageVideoAvailability.AVAILABLE);
}
private function toggleStageVideo(on:Boolean):void
{
// To choose StageVideo attach the NetStream to StageVideo
if (on)
{
stageVideoInUse = true;
if ( sv == null )
{
sv = stage.stageVideos[0];
sv.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange);
sv.attachNetStream(ns);
}
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;
video.attachNetStream(ns);
stage.addChildAt(video, 0);
}
if ( !played )
{
played = true;
ns.play(FILE_NAME);
}
}
重要说明:
当应用程序第一次在 Stage.stageVideos[0] 访问 vector 元素时,默认矩形设置为 0,0,0,0, 并使用默认值平移和缩放属性。请始终将这些值设置您首选的设置。您可以使用
StageVideoEvent.RENDER_STATE
或
VideoEvent.RENDER_STATE
事件的
videoWidth
和
videoHeight
属性来计算视频视口尺寸。
可从
舞台视频快速入门
下载本示例应用程序的完整源代码。