Делаю видео плеер. Возникла проблема.
Когда изменяются размеры окна FlashPlayer, то видео изображение должно растягиваться пропорционально и показываться полностью, без обрезки. Такой режим называется StageScaleMode.SHOW_ALL. Но, так как у меня ещё есть кнопки управления, то такой режим не подойдет. Я использую StageScaleMode.NO_SCALE, чтобы вручную расставлять кнопки управления. Следовательно, нужно вручную изменять размеры видео изображения.
Проблему можно увидеть по
ссылке.
Видео изменяет свои размеры, но когда ширина окна меньше ширины видео, то часть видео обрезается.
Что нужно ещё дописать в функцию onResizeListener, чтобы исправить эту проблему?
Вот код:

Код AS3:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
/**
* Главный класс
* @author Subbotin Daniil (dan.subbotin[at]gmail.com)
*/
public class App extends Sprite
{
//----------------------------------
// Переменные отвечающие за воспроизведение видео файла
//----------------------------------
private static const URL:String = "video1.flv";
private var ns:NetStream;
private var video:Video;
//----------------------------------
// Параметры видео файла
//----------------------------------
private var videoWidth:int;
private var videoHeight:int;
private var aspectRatio:Number;
public function App():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// Настройка отображения
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
// Инициализация видео плеера
initPlayer();
// Регистрация слушателей событий
stage.addEventListener(Event.RESIZE, onResizeListener);
onResizeListener(null);
}
/**
* Инициализация видео плеера
*/
private function initPlayer():void
{
// Настройка соединения
var nc:NetConnection = new NetConnection();
nc.connect(null);
// Настройка получателя информации о видео файле
var client:Object = { };
client.onMetaData = function(metadata:Object):void
{
videoWidth = metadata.width;
videoHeight = metadata.height;
aspectRatio = videoWidth / videoHeight;
onResizeListener(null);
}
// Настройка потока
ns = new NetStream(nc);
ns.client = client;
// Создание и отображение видео экрана
video = new Video();
video.attachNetStream(ns);
addChild(video);
ns.play(URL);
}
//--------------------------------------------------------------------------
//
// Обработчики событий
//
//--------------------------------------------------------------------------
/**
* Обрабатывает изменение размеров приложения
*/
private function onResizeListener(event:Event):void
{
if (stage.stageWidth > stage.stageHeight)
{
video.height = stage.stageHeight;
video.width = stage.stageHeight * aspectRatio;
video.x = stage.stageWidth / 2 - video.width / 2;
video.y = 0;
}
else if (stage.stageWidth < stage.stageHeight)
{
video.width = stage.stageWidth;
video.height = stage.stageWidth / aspectRatio;
video.x = 0;
video.y = stage.stageHeight / 2 - video.height / 2;
}
}
}
}