Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 14:

Видеоданные

Компоненты видеоменю: дневник тура Slipshod

Если вы работали с разделом фотографий тура в предыдущей лекции, вам должны быть знакомы структура и функционирование секции Slipshod, так как видеодневник тура построен аналогичным образом.

Находясь в flatpackrecords.fla, перейдите в раздел Slipshod в фильме video. Здесь находятся рисунки, которые я создал для видеодневника, незначительно отличающиеся от предыдущих.


Наши SWF будут загружаться в большой белый квадрат. Ему было присвоено имя инстанса contentholder2, чтобы избежать путаницы, так как у нас уже есть инстанс с именем contentholder внутри фильма video на главной временной шкале. Так как все фрагменты видео, загружаемые в эту область, имеют одинаковые размеры, я сделал contentholder2 точно такого же размера (240х180 пикселей).

Имейте в виду, что на рабочем месте присутствуют два динамических поля. Они используются для отображения имени и описания SWF. Первое поле имеет имя переменной name и будет отображать значение, устанавливаемое для этой переменной на вкладке Parameters в Property Inspector. Нижнему текстовому полю присвоено имя переменной description. Также будет вызываться внешний фильм при щелчке на компоненте. Если вы выберете фильм jan11, то увидите отображаемые значения и фильм, который будет загружен.



Slipshod SWF

SWF, которые загружаются на главную страницу, очень просты и, как правило, очень похожи на banthaloband.fla. Это просто фильмы Flash с видеорядом, импортированным в главную временную шкалу, и размер рабочего места будет таким же, как и размер видео - 240х180 пикселей. Вот и все, что нужно было рассмотреть.

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

  • Размер SWF является таким же, как объект contentholder2.
  • Экспорт проводится со стандартным значением частоты кадров 12 fps (то же значение, что и на главной странице).
  • Экспортируемый объект SWF необходимо называть соответственно текущей дате (jan11.swf, jan12.swf и т.д.).

Это не очень сложно, даже для среднестатистической рок-группы, однако как разработчик вы могли бы также предоставить им файл template.fla и быть уверенным в том, что они всегда будут использовать команду Save As и переименовывать экспортируемый объект для распознавания главной страницей. Каждый SWF должен загружаться на сайт Flatpack Records после создания. Разработчику может понадобиться создать область администрирования, где члены группы могли бы загружать SWF, а также добавлять заголовок соответствующей формы, после чего оба этих объекта добавлялись бы в базу данных. Можно настроить Flash на вызов каждого SWF и необходимых заголовков динамических текстовых полей из базы данных

Теперь вы видите, как измененные компоненты могут эффективно использоваться для вызова фильмов на главную страницу. Так как я не связывал их с контроллерами или предзагрузчиками, и так как каждый новый фильм загружается, заменяя предыдущий, вследствие чего исключаются ненужные повторные загрузки фильма (т.е. старые, уже посмотренные вами).

Управление видео

Здесь, в последнем параграфе об области с видеоданными сайта Flatpack Records, мы рассмотрим управление видеоданными с помощью изменения параметров фильма contentholder. Вы могли использовать некоторые из этих параметров в другой работе, однако здесь я покажу, насколько они полезны при управлении видеоданными.

Мы рассмотрим короткий видеофрагмент, состоящий из четырех фильмов, наложенных друг на друга, но отображающий одновременно только один фильм. Функционирование этой конструкции несколько напоминает монтажный стол с несколькими камерами-источниками, причем все четыре фильма показывают одно и то же действие, но под разными углами. Эта система обычно используется на прямых телетрансляциях, где режиссер передает сигналы операторам для переключения с одной камеры на другую.

Изучите playground в области с видеоданными сайта Flatpack, чтобы получить представление о предмете разговора. Сам фильм находится на компакт-диске в файле vidmixer.fla. Несмотря на то, что пример здесь не показывает четыре камеры, фиксирующие одно событие под различными углами, принцип "живого" монтажа по-прежнему работает.

  1. Мы начали со съемки четырех фрагментов видео и добавления их в четыре небольших отдельных файла SWF с именами cam1.swf, cam2.swf, cam3.swf и cam4.swf.
  2. Нужно, чтобы видеомикшер был полностью самодостаточным, поэтому нужно импортировать все четыре видеофильма в библиотеку Library нового документа Flash.

    Если вы импортируете несколько фильмов в проект Flash, но вам нужно применить одни и те же настройки Sorensen Spark ко всем видеофильмам, используйте команду File > Import to Library и комбинацию (Shift)+(Щелчок мыши) для импорта всех видеофильмов одновременно.

  3. Затем каждый из четырех фильмов вставляется в свой собственный фильм. До сих пор в этой лекции мы импортировали видео непосредственно в главную временную шкалу, а не в фильм, однако здесь нам гораздо более важно влияние на параметры объекта MovieClip.
  4. Посмотрите на фильм cam1, дважды щелкнув на нем в библиотеке Library.

    Вы увидите, что там присутствует только видеофильм QT, левый верхний угол которого зарегистрирован в центре фильма в координатах (0, 0).



  5. Каждый из четырех фильмов был размещен в кадре 2 слоя movies на главной временной шкале (чтобы освободить место для строки загрузки в кадре 1). Решение наложить все четыре фильма друг на друга в одинаковой позиции станет более понятным, когда мы будем рассматривать работу микшера.
  6. Я создал кнопку с именем button и расположил четыре инстанса на новом слое с именем buttons в кадре 2. Четыре инстанса кнопки имеют имена с channel1 по channel4. В этом же кадре под кнопками также присутствует небольшое динамическое текстовое поле, чтобы пользователь видел выбранную в данный момент "камеру".


  7. Теперь посмотрим на код, управляющий функционированием фильмов. Рассмотрим код в кадре 2 слоя actions. Следующая функция настраивает переключение глубин.
    function swapFront(channel) {
        stopAllClips(channel);
        this["cam"+channel].swapDepths(1)
        cam = channel;
      }
  8. Эта функция вызывается следующим кодом.
    channel1.onRelease = function() {
        swapFront("1");
      };
      channel2.onRelease = function() {
        swapFront("2");
      };
      channel3.onRelease = function() {
        swapFront("3");
      };
      channel4.onRelease = function() {
        swapFront("4");
      };
      // initialize
      swapFront ("1");

    Функция выполняет две операции. Она выносит введенный видеофильм на передний план и устанавливает динамическое текстовое поле cam на введенный канал.

    В случае с переключением глубин может быть использовано любое значение глубины, и уровень глубины уже не наследуется. В данном фильме мы используем только уровни глубины 1, поэтому все фильмы просто борются за эту глубину.

    Помните, что чем выше уровень глубины, тем дальше от переднего плана будет располагаться объект. Имея это в виду, объект на уровне глубины 3 будет перекрывать другой объект, расположенный на уровне глубины 1. Также попытайтесь не перепутать уровни глубины с уровнями, используемыми в действии loadMovie.

  9. Остальная часть кода устанавливает кнопки и окончательно инициализирует фильм, начиная с cam1. Если бы вы протестировали фильм с текущим кодом, он бы выглядел неуклюже. Здесь имеет место одна проблема, которая не видна до тех пор, пока фильм не загрузится и не протестируется в качестве части законченного веб-сайта в режиме online. Она состоит в том, что одновременное воспроизведение четырех фильмов будет отрицательно сказываться на работе компьютеров со старыми процессорами.

    Мы решаем эту проблему, останавливая воспроизведение фильмов в то время, как они находятся на заднем плане. Здесь нужна совершенно новая функция, а также необходимо провести основательную настройку функции swapFront.

    function stopAllClips (playChannel) {
        cam1.stop();
        cam2.stop();
        cam3.stop();
        cam4.stop();
        this ["cam"+playChannel].play();
      }
      //
      function swapFront(channel) {
        stopAllClips (channel);
        //
        this ["cam" + channel].swapDepths(1);
        cam = channel;
      }

    Теперь этот код похож на код во FLA. Новая функция просто останавливает все фильмы и затем перезапускает выбранный канал. Функция stopAllClips вызывается из функции swapFront, и вход канала просто передается через нее. Это означает, что код кнопки остается таким же, даже несмотря на то, что основа программы немного изменилась. Мы закончили создание нашего кода.

  10. Мы добавили компонент ProgressBar в кадр 1 главной временной шкалы, чтобы Flash ожидал до тех пор, пока весь объект (включая четыре видеофильма) не загрузится. Тогда и только тогда Flash переходит к кадру 2 (содержащему действие stop (); ), где и начинается все действие.
  11. Осталось проработать основной файл flatpackrecords.fla, где кнопка установлена на загрузку отдельного vidmixer.swf, как и в случае с любым другим медиа-файлом.

    Реализовать это можно различными способами. Можно изменять значения _alpha каждого фильма при изменении кнопок или создавать четырехкадровый цикл, в котором все кадры отображают различные камеры. Надеюсь, вы начали понимать всю многосторонность видеоряда, содержащегося в своем собственном фильме, поэтому давайте закончим эту тему рассмотрением игрушки-калейдоскопа.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2