Pergunta

Com as versões anteriores de flash, que entram no modo de ecrã cheio aumento da altura e largura do palco para as dimensões da tela. Agora que dimensionamento de hardware chegou, a altura ea largura são definidas para as dimensões do vídeo (além fronteiras se a proporção é diferente).

Isso é bom, a menos que tenha controles colocados sobre o vídeo. Antes, você pode controlar o seu tamanho; mas agora eles estão explodido pela mesma escala que o vídeo, e pixellated horrivelmente. Controles são feios e as legendas são ilegíveis.

É possível para o usuário para desligar dimensionamento de hardware, mas tudo o que consegue é desligar anti-aliasing. Os controles ainda são sopradas até feiúra.

Existe uma maneira de obter o antigo comportamento de escala de volta?

Foi útil?

Solução 2

Eu finalmente encontrado a resposta para isso. O problema é que o componente FLVPlayback agora está usando a propriedade stage.fullScreenSourceRect para entrar em um modo de tela cheia em escala hardware. Quando ele faz isso, ele se estende a área prestados dada pelo stage.fullScreenSourceRect para preencher a tela, em vez de aumentar o tamanho do palco ou quaisquer componentes.

Para pará-lo, você tem que criar uma subclasse de FLVPlayback que usa uma subclasse de UIManager, e substituir a função que está assentado stage.fullScreenSourceRect. No lado do baixo, você perde dimensionamento de hardware; mas no lado de cima, o jogador não se parece com ele foi tirado por uma criança de três anos de idade em lápis de cor.

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) {
            }
        }
    }
}

Nós adicionamos o FLVPlayback para o nosso filme usando actionscript, por isso só temos de substituir

var myFLVPLayback:FLVPlayback = new FLVPlayback();

com

var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();

Eu não sei se há uma maneira de fazer a classe personalizada disponível na biblioteca de componentes.

Outras dicas

Aqui está outra maneira de resolvê-lo, o que é mais simples e parece funcionar muito bem para mim.

myFLVPlayback.fullScreenTakeOver = false;

A propriedade fullScreenTakeOver foi introduzido no Flash Player 9 Update 3 . Os documentos são todos um pouco vago, mas há um pouco mais informações aqui:

Usando o componente FLVPlayback com o Flash Player 9 Update 3

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;
}

Ou, e eu não estou totalmente certo sobre isso, você pode tentar fazer algum dimensionamento de 9 fatia na FLVPlayback, mas eu não sei se isso vai funcionar.

9-slice scaling tutorial: http://www.sephiroth.it/tutorials/ flashPHP / scale9 /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top