Могу ли я получить старое полноэкранное масштабирование с FLVPlayback и flash 9.0.115+? - PullRequest
4 голосов
/ 19 сентября 2008

В предыдущих версиях вспышки вход в полноэкранный режим увеличивал высоту и ширину сцены до размеров экрана. Теперь, когда аппаратное масштабирование достигнуто, высота и ширина устанавливаются в соответствии с размерами видео (плюс границы, если соотношение сторон отличается).

Это нормально, если у вас нет элементов управления над видео. Раньше вы могли контролировать их размер; но теперь они взорваны в том же масштабе, что и видео, и ужасно пикселированы. Элементы управления ужасны, а субтитры не читаются.

Пользователь может отключить аппаратное масштабирование, но все, что достигается, это отключить сглаживание. Органы управления все еще взорваны до безобразия.

Есть ли способ вернуть старое поведение масштабирования?

Ответы [ 3 ]

2 голосов
/ 10 октября 2008

Вот еще один способ решить эту проблему, который проще, и, кажется, он мне подходит.

myFLVPlayback.<a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/video/FLVPlayback.html#fullScreenTakeOver" rel="nofollow noreferrer">fullScreenTakeOver</a> = false;

Свойство fullScreenTakeOver было введено в Flash Player 9 обновление 3 . Все документы немного расплывчаты, но здесь есть немного больше информации:

Использование компонента FLVPlayback с Flash Player 9, обновление 3

1 голос
/ 22 сентября 2008

Я в конце концов нашел ответ на этот вопрос. Проблема заключается в том, что компонент FLVPlayback теперь использует свойство stage.fullScreenSourceRect для входа в полноэкранный режим с аппаратным масштабированием. Когда он это делает, он растягивает визуализированную область, заданную stage.fullScreenSourceRect, чтобы заполнить экран, а не увеличивает размер сцены или каких-либо компонентов.

Чтобы остановить это, вы должны создать подкласс FLVPlayback, который использует подкласс UIManager, и переопределить функцию, которая устанавливает 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 в наш фильм, используя actioncript, поэтому нам просто нужно заменить

var myFLVPLayback:FLVPlayback = new FLVPlayback();

с

var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();

Я не знаю, есть ли способ сделать пользовательский класс доступным в библиотеке компонентов.

0 голосов
/ 20 сентября 2008
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;
}

Или, и я не совсем уверен в этом, вы можете попытаться выполнить 9-фрагментное масштабирование в FLVPlayback, но я не знаю, сработает ли это.

Учебник по 9-фрагментному масштабированию: http://www.sephiroth.it/tutorials/flashPHP/scale9/

...