Posso obter o dimensionamento em tela cheia idade com FLVPlayback e flash 9.0.115+?
-
01-07-2019 - |
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?
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 /