FLVPlayback と Flash 9.0.115+ で古い全画面スケーリングを利用できますか?
-
01-07-2019 - |
質問
以前のバージョンの Flash では、全画面モードに入ると、ステージの高さと幅が画面の寸法に合わせて増加しました。ハードウェア スケーリングが導入されたので、高さと幅はビデオの寸法に設定されます (アスペクト比が異なる場合は境界線も加えられます)。
ビデオ上にコントロールを配置していない限り、これは問題ありません。以前は、サイズを制御できました。しかし今では、ビデオと同じスケールで拡大され、ひどくピクセル化されています。コントロールは醜く、字幕は読めません。
ユーザーがハードウェア スケーリングをオフにすることは可能ですが、実現できるのはアンチエイリアシングをオフにすることだけです。コントロールは依然として醜いまで爆破されています。
以前のスケーリング動作を戻す方法はありますか?
解決 2
私は最終的にこれに対する答えを見つけました。問題は、FLVPlayback コンポーネントが stage.fullScreenSourceRect プロパティを使用してハードウェア スケーリングのフル スクリーン モードに入っていることです。これを実行すると、ステージやコンポーネントのサイズを増やすのではなく、stage.fullScreenSourceRect で指定されたレンダリング領域が画面全体に拡大されます。
これを停止するには、UIManager のサブクラスを使用する FLVPlayback のサブクラスを作成し、stage.fullScreenSourceRect を設定している関数をオーバーライドする必要があります。マイナス面としては、ハードウェアのスケーリングが失われることです。しかし、良い面としては、プレーヤーは 3 歳児がクレヨンで描いたようには見えません。
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) {
}
}
}
}
actionscript を使用して FLVPlayback をムービーに追加するので、置き換えるだけで済みます。
var myFLVPLayback:FLVPlayback = new FLVPlayback();
と
var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();
カスタム クラスをコンポーネント ライブラリで使用できるようにする方法があるかどうかはわかりません。
他のヒント
これを解決する別の方法を紹介します。これはより簡単で、私にとっては非常にうまく機能するようです。
myFLVPlayback.フルスクリーンテイクオーバー = false;
の fullScreenTakeOver
プロパティは Flash Player 9 で導入されました アップデート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;
}
あるいは、これについてはよくわかりませんが、FLVPlayback で 9 スライスのスケーリングを実行しようとするかもしれませんが、それが機能するかどうかはわかりません。
9 スライスのスケーリング チュートリアル: http://www.sephiroth.it/tutorials/flashPHP/scale9/