Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   не получается растянуть видеоролик на весь экран (http://www.flasher.ru/forum/showthread.php?t=188822)

djken 07.12.2012 05:42

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

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".
Скрипт следующий:
Код AS1/AS2:

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

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

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

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

ISergey 07.12.2012 10:46

с сохранением пропорций можно отмасшабировать примерно так:
Код AS1/AS2:

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 и во время проигрывания видео изменить размеры флеш-окна - то видео окно сразу нормально выстраивается под размеры флешки:
Код AS1/AS2:

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 само увеличение видео окна - он безконтрольно увеличивалось.
обратите внимание на то, кому Вы присваиваете новые размеры: самому объекту видео, его контейнеру или и тому и тому сразу.


Часовой пояс GMT +4, время: 16:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.