PDA

Просмотр полной версии : не получается растянуть видеоролик на весь экран


djken
07.12.2012, 05:42
Всем привет. При заходе на сайт нужно сделать проигрывание преветственного видеоролика.
Вроде ничего сложного, но ни в какую не получается растянуть видео на весь экран...
Сначала пробовал через Linked Video - кинул этот компонент на сцену под именем "video".
Но чтобы пропорционально растянуть видео, мне сначала нужно узнать width и height подгружаемого видеоролика. Пошукал Адобовский Help - получить метаданные можно через onMetaData, но width и height не возвращаются - получаю undefined. Получается получить только duration. Если я понял правильно из helpa на английском - это зависит от конвертера, который запихивает в видеоролик всякие метаданные...
В общем привожу скрипт который я писал:

import mx.video.*;

var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
video.attachVideo(ns);
ns.onMetaData = function(infoObject:Object) {
trace(infoObject["width"]); // возвращает undefined
trace(infoObject["height"]); // возвращает undefined
trace(infoObject["duration"]) // возвращает 43.06
};
ns.play("files/video/videoTieser.flv");


Попробовал и другой способ - через компонент FLVPlayback.
На сцену повесил FLVPlayback - "video".
Скрипт следующий:

import mx.video.*;

video.contentPath = "files/video/videoTieser.flv";
video._x=video._y=0;
video.width=Stage.width; // ничего не меняет
video.height=Stage.height; // ничего не меняет


а если размер так прописать, то растягивается как то некорректно - чуть ли не в 4 раза, чем сам размер экрана и не пропорционально:

video._width=Stage.width;
video._height=Stage.height;


Что я не так делаю - дайте совет как лучше работать с видео - может есть способы намного лучше, а я не знаю про них...?
Заранее благодарен за помощь

ISergey
07.12.2012, 10:46
с сохранением пропорций можно отмасшабировать примерно так:
private function resizeVideo (newWidth:Number, newHeight:Number):Void {
var monitor_width:Number = Stage.width;;
var monitor_height:Number = Stage.height;

var propMonitor:Number = monitor_height / monitor_width;
var propNewMov:Number = newHeight / newWidth;
if(propMonitor < propNewMov){
display._height = monitor_height;
display._width = display._height/propNewMov;
display._y = 0;
display._x = monitor_width / 2 - display._width / 2;
}else {
display._width = monitor_width;
display._height = display._width * propNewMov;
display._x = 0;
display._y = monitor_height / 2 - display._height / 2;
}
}
display - контейнер с видео.
здесь логика на новый размер видео потока, аналогично нужно смотреть случай изменения размеров самой флешки.
по поводу в "4 раза", скорей всего плюсом масшабируешь сам мувик с видео

djken
07.12.2012, 14:16
как растянуть видео, сохранив соотношение сторон, в зависимости от изменения размеров самой флэшки я знаю )) но все равно спасибо )
У меня не получалось именно через width и height само увеличение видео окна - он безконтрольно увеличивалось.
При использовании FLVPlayback заметил следующее:
если размеры видео задать в ресайзе Stage и во время проигрывания видео изменить размеры флеш-окна - то видео окно сразу нормально выстраивается под размеры флешки:

var myListener:Object = new Object();
myListener.onResize = function() {
// задаем размеры видео
};
Stage.addListener(myListener);


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

И второе что понял:
при использовании Linked Video все метаданные нормально получил, когда попробовал воткнуть другой видео файл - значит всё и вправду зависит от того, каким конвертером сжато видео в FLV.
Так что остановился на втором варианте - получаю через onMetaData ширину и высоту исходного видео файла, и потом уже масштабирую

ISergey
07.12.2012, 15:39
Вы все правильно поняли.
изменение размеров делать только по событию, ловить в onMetaData и onResize.
У меня не получалось именно через width и height само увеличение видео окна - он безконтрольно увеличивалось.
обратите внимание на то, кому Вы присваиваете новые размеры: самому объекту видео, его контейнеру или и тому и тому сразу.