我可以使用FLVPlayback和Flash 9.0.115+获得旧的全屏缩放吗?

时间:2020-03-06 14:26:04  来源:igfitidea点击:

使用早期版本的Flash,进入全屏模式会将舞台的高度和宽度增加到屏幕的尺寸。现在已经达到了硬件缩放比例,可以将高度和宽度设置为视频的尺寸(如果宽高比不同,则加上边框)。

很好,除非我们在视频上放置了控件。以前,我们可以控制它们的大小;但是现在它们的大小和视频一样大,而且像素化非常可怕。控件很难看,字幕也不可读。

用户可以关闭硬件缩放,但所要做的只是关闭抗锯齿功能。控件仍然很丑陋。

有没有办法恢复旧的缩放行为?

解决方案

stage.align     = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onStageResize);

function onStageResize(event:Event):void {
    //do whatever you want to re-position your controls and scale the video
    // here's an example
    myFLVPlayback.width = stage.stageWidth;
    myFLVPlayback.height = stage.stageHeight - controls.height;
    controls.y = stage.stageHeight - controls.height;
}

或者,我对此不太确定,我们可以尝试在FLVPlayback上进行一些9切片缩放,但是我不知道这样是否可行。

9片缩放教程:http://www.sephiroth.it/tutorials/flashPHP/scale9/

我终于找到了答案。问题在于,FLVPlayback组件现在正在使用stage.fullScreenSourceRect属性进入硬件缩放的全屏模式。这样做时,它将拉伸stage.fullScreenSourceRect给定的渲染区域以填充屏幕,而不是增大舞台或者任何组件的大小。

要停止它,我们必须创建一个使用UIManager子类的FLVPlayback子类,并覆盖设置stage.fullScreenSourceRect的函数。不利的一面是,我们失去了硬件扩展能力。但从好的方面来说,播放器看上去并不像是由三岁的蜡笔绘制的。

CustomFLVPlayback.as:

import fl.video.*;
use namespace flvplayback_internal;

public class CustomFLVPlayback
{
    public function CustomFLVPlayback()
    {
        super();
        uiMgr = new CustomUIManager(this);
    }
}

CustomUIManager.as:

import fl.video.*;
import flash.display.StageDisplayState;

public class CustomUIManager
{
    public function CustomUIManager(vc:FLVPlayback)
    {
        super(vc);
    }

    public override function enterFullScreenDisplayState():void
    {
        if (!_fullScreen && _vc.stage != null)
        {
            try
            {
                 _vc.stage.displayState = StageDisplayState.FULL_SCREEN;
            } catch (se:SecurityError) {
            }
        }
    }
}

我们使用动作脚本将FLVPlayback添加到电影中,因此我们只需要替换

var myFLVPLayback:FLVPlayback = new FLVPlayback();

var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();

我不知道是否有一种方法可以使自定义类在组件库中可用。

这是解决它的另一种方法,它比较简单,对我来说似乎很好用。

`

myFLVPlayback.fullScreenTakeOver = false;

`

" fullScreenTakeOver"属性是在Flash Player 9更新3中引入的。文档都有点含糊,但是这里有更多信息:

将FLVPlayback组件与Flash Player 9 Update 3一起使用