Использование ключевых точек

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

Существует три вида ключевых точек: навигация, событие и ActionScript. Ключевые точки навигации и события также известны как встроенные ключевые точки, так как они встроены в поток FLV-файла и в пакет метаданных FLV-файла.

Ключевая точка навигации позволяет выполнять поиск конкретного кадра в FLV-файле, так как она создает ключевой кадр в FLV-файле как можно ближе к указанной вами временной точке. Ключевой кадр — это фрагмент данных, расположенный между кадрами изображения в потоке FLV-файла. При поиске ключевой точки навигации компонент выполняет поиск ключевого кадра и запускает событие cuePoint .

Ключевая точка события позволяет синхронизировать момент времени в FLV-файле с внешним событием веб-страницы. Событие cuePoint происходит точно в указанное время. Встроить ключевые точки навигации и события в FLV-файл можно либо при помощи мастера импорта видеоданных, либо при помощи Flash Video Encoder. Дополнительную информацию о мастере импорта видеоданных и о Flash Video encoder см. в Главе 16 «Работа с видео» в руководстве Использование Flash .

Ключевая точка ActionScript является внешней ключевой точкой, которую можно добавить либо при помощи диалогового окна компонента «Ключевые точки Flash-видео», либо при помощи метода FLVPlayback.addASCuePoint() . Компонент хранит и отслеживает ключевые точки ActionScript отдельно от FLV-файла, поэтому они менее точные, чем встроенные ключевые точки. Ключевые точки ActionScript имеют точность до одной десятой секунды. Точность ключевых точек ActionScript можно повысить, снизив значение свойства playheadUpdateInterval , так как компонент создает событие cuePoint для ключевых точек ActionScript при обновлении указателя воспроизведения. Дополнительные сведения см. в описании свойства FLVPlayback.playheadUpdateInterval в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

В ActionScript и в метаданных FLV-файла ключевая точка представлена в виде объекта со следующими свойствами: name , time , type и parameters . Свойство name представляет собой строку, содержащую имя, присвоенное ключевой точке. Свойство time является числом, представляющим время появления ключевой точки в часах, минутах, секундах и миллисекундах (ЧЧ:ММ:СС.ммм). Свойство type является строкой, значениями которой являются "navigation" , "event" или "actionscript" , в зависимости от типа созданной ключевой точки. Свойство parameters представляет собой массив указанных пар имя-значение.

При наступлении события cuePoint объект ключевой точки становится доступным в объекте события через свойство info .

Использование диалогового окна «Ключевые точки Flash-видео»

Откройте диалоговое окно «Ключевые точки Flash-видео», дважды щелкнув ячейку «Значение» параметра cuePoints в Инспекторе компонентов. Диалоговое окно выглядит так, как показано на рисунке ниже:

Просмотр полноразмерных изображений
диалоговое окно «Ключевые точки»

В диалоговом окне отображаются встроенные ключевые точки и ключевые точки ActionScript. При помощи этого диалогового окна можно добавлять и удалять ключевые точки ActionScript, а также параметры ключевых точек. Можно также включать и отключать встроенные ключевые точки. Однако добавление, изменение или удаление встроенных ключевых точек невозможно.

Добавление ключевой точки ActionScript:

  1. Дважды щелкните ячейку «Значение» параметра cuePoints в Инспекторе компонентов, чтобы открыть диалоговое окно «Ключевые точки Flash-видео».

  2. Нажмите знак «плюс» (+) в верхнем левом углу над списком ключевых точек, чтобы добавить запись ключевой точки ActionScript по умолчанию.

  3. Щелкните текст «Новая ключевая точка» в столбце «Имя» и присвойте имя ключевой точке.

  4. Щелкните значение времени 00:00:00:000, чтобы изменить его, и назначьте время появления ключевой точки. Можно указать время в часах, минутах, секундах и миллисекундах (ЧЧ:ММ:СС.ммм).

    Если существует несколько ключевых точек, новая ключевая точка помещается на позицию списка в соответствии с хронологическим порядком.

  5. Для добавления параметра выбранной ключевой точки нажмите знак «плюс» (+) вверху раздела «Параметры» и введите значения в столбцы «Имя» и «Значение». Повторите этот шаг для добавления каждого параметра.

  6. Для добавления нескольких ключевых точек ActionScript повторите шаги 2-5 для каждой точки.

  7. Чтобы сохранить изменения, нажмите кнопку «OK».

Удаление ключевой точки ActionScript:

  1. Дважды щелкните ячейку «Значение» параметра cuePoints в Инспекторе компонентов, чтобы открыть диалоговое окно «Ключевые точки Flash-видео».

  2. Выберите ключевую точку, которую нужно удалить.

  3. Нажмите знак «минус» (-) в верхнем левом углу над списком ключевых точек, чтобы удалить точку.

  4. Повторите шаги 2-3 для удаления каждой ключевой точки.

  5. Чтобы сохранить изменения, нажмите кнопку «OK».

Включение и отключение встроенной ключевой точки FLV-файла:

  1. Дважды щелкните ячейку «Значение» параметра cuePoints в Инспекторе компонентов, чтобы открыть диалоговое окно «Ключевые точки Flash-видео».

  2. Выберите ключевую точку, которую нужно включить или отключить.

  3. Щелкните значение в столбце «Тип», чтобы вызвать всплывающее меню, или нажмите стрелку вниз.

  4. Щелкните название типа ключевой точки (например, «Событие» или «Навигация»), чтобы включить ее. Нажмите «Отключено», чтобы отключить ее.

  5. Чтобы сохранить изменения, нажмите кнопку «OK».

Использование ключевых точек с ActionScript

При помощи ActionScript можно добавлять ключевые точки ActionScript, прослушивать события cuePoint , находить какие-либо ключевые точки или ключевые точки определенного типа, искать ключевые точки навигации, включать или отключать ключевые точки, проверять, включена ли ключевая точка, и удалять ключевые точки.

В примерах данного раздела используется FLV-файл с именем cuepoints.flv, который содержит три ключевые точки:

Имя

Время

Тип

point1

00:00:00.418

Навигация

point2

00:00:07.748

Навигация

point3

00:00:16.020

Навигация

Добавление ключевых точек ActionScript

Добавлять ключевые точки ActionScript в FLV-файл можно при помощи метода addASCuePoint() . Следующий пример добавляет две ключевые точки ActionScript в FLV-файл, когда он готов к воспроизведению. Первая ключевая точка добавляется с использованием объекта ключевой точки, который указывает имя, время и тип ключевой точки в ее параметрах. При втором вызове указывается время и имя при помощи параметров метода time и name .

// Requires an FLVPlayback instance called my_FLVPlybk on Stage 
import fl.video.*; 
import fl.video.MetadataEvent; 
my_FLVPlybk.source = "http://www.helpexamples.com/flash/video/cuepoints.flv" 
var cuePt:Object = new Object(); //create cue point object 
cuePt.time = 2.02; 
cuePt.name = "ASpt1"; 
cuePt.type = "actionscript"; 
my_FLVPlybk.addASCuePoint(cuePt);//add AS cue point 
// add 2nd AS cue point using time and name parameters 
my_FLVPlybk.addASCuePoint(5, "ASpt2"); 

Дополнительные сведения см. в описании метода FLVPlayback.addASCuePoint() в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

Прослушивание событий cuePoint

Событие cuePoint позволяет получить контроль в коде ActionScript при наступлении события cuePoint . При возникновении ключевых точек в следующем примере прослушиватель cuePoint вызывает функцию обработчика событий, которая отображает значение свойства playheadTime , а также имя и тип ключевой точки. Используйте этот пример в сочетании с примером в предыдущем разделе, «Добавление ключевых точек ActionScript», чтобы увидеть результаты.

my_FLVPlybk.addEventListener(MetadataEvent.CUE_POINT, cp_listener); 
function cp_listener(eventObject:MetadataEvent):void { 
        trace("Elapsed time in seconds: " + my_FLVPlybk.playheadTime); 
        trace("Cue point name is: " + eventObject.info.name); 
        trace("Cue point type is: " + eventObject.info.type); 
}

Дополнительные сведения о событии cuePoint см. в описании события FLVPlayback.cuePoint в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

Поиск ключевых точек

При помощи ActionScript можно найти ключевую точку любого типа, найти ключевую точку, ближайшую к моменту времени, или найти следующую ключевую точку с конкретным именем.

Обработчик событий ready_listener() в следующем примере вызывает метод findCuePoint() для поиска ключевой точки ASpt1 , а затем вызывает метод findNearestCuePoint() для поиска ключевой точки навигации, ближайшей к времени ключевой точки ASpt1 :

import fl.video.FLVPlayback; 
import fl.video.CuePointType; 
import fl.video.VideoEvent; 
my_FLVPlybk.source = "http://www.helpexamples.com/flash/video/cuepoints.flv" 
var rtn_obj:Object; //create cue point object 
my_FLVPlybk.addASCuePoint(2.02, "ASpt1");//add AS cue point 
function ready_listener(eventObject:VideoEvent):void { 
    rtn_obj = my_FLVPlybk.findCuePoint("ASpt1", CuePointType.ACTIONSCRIPT); 
    traceit(rtn_obj); 
    rtn_obj = my_FLVPlybk.findNearestCuePoint(rtn_obj.time, CuePointType.NAVIGATION); 
    traceit(rtn_obj); 
} 
my_FLVPlybk.addEventListener(VideoEvent.READY, ready_listener); 
function traceit(cuePoint:Object):void { 
    trace("Cue point name is: " + cuePoint.name); 
    trace("Cue point time is: " + cuePoint.time); 
    trace("Cue point type is: " + cuePoint.type); 
}

В следующем примере обработчик событий ready_listener() находит ключевую точку ASpt и вызывает метод findNextCuePointWithName() для поиска следующей ключевой точки с тем же именем:

import fl.video.*; 
my_FLVPlybk.source = "http://www.helpexamples.com/flash/video/cuepoints.flv" 
var rtn_obj:Object; //create cue point object 
my_FLVPlybk.addASCuePoint(2.02, "ASpt");//add AS cue point 
my_FLVPlybk.addASCuePoint(3.4, "ASpt");//add 2nd Aspt 
my_FLVPlybk.addEventListener(VideoEvent.READY, ready_listener); 
function ready_listener(eventObject:VideoEvent):void { 
    rtn_obj = my_FLVPlybk.findCuePoint("ASpt", CuePointType.ACTIONSCRIPT); 
    traceit(rtn_obj); 
    rtn_obj = my_FLVPlybk.findNextCuePointWithName(rtn_obj); 
    traceit(rtn_obj); 
} 
function traceit(cuePoint:Object):void { 
    trace("Cue point name is: " + cuePoint.name); 
    trace("Cue point time is: " + cuePoint.time); 
    trace("Cue point type is: " + cuePoint.type); 
}

Дополнительные сведения о поиске ключевых точек см. в описании методов FLVPlayback.findCuePoint(), FLVPlayback.findNearestCuePoint() и FLVPlayback.findNextCuePointWithName() в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

Поиск ключевых точек навигации

Можно выполнять поиск ключевой точки навигации, ключевой точки навигации, следующей за определенным моментом времени или предшествующей определенному моменту времени. Следующий пример воспроизводит FLV-файл cuepoints.flv и выполняет поиск ключевой точки с временем 7.748 при наступлении события ready . При наступлении события cuePoint вызывается метод seekToPrevNavCuePoint() для поиска первой ключевой точки. При наступлении этого события cuePoint вызывается метод seekToNextNavCuePoint() для поиска последней ключевой точки путем добавления 10 секунд ко времени eventObject.info.time , которое является временем текущей ключевой точки.

import fl.video.*; 
 
my_FLVPlybk.addEventListener(VideoEvent.READY, ready_listener); 
function ready_listener(eventObject:Object):void { 
    my_FLVPlybk.seekToNavCuePoint("point2"); 
} 
my_FLVPlybk.addEventListener(MetadataEvent.CUE_POINT, cp_listener); 
function cp_listener(eventObject:MetadataEvent):void { 
    trace(eventObject.info.time); 
    if(eventObject.info.time == 7.748) 
        my_FLVPlybk.seekToPrevNavCuePoint(eventObject.info.time - .005); 
    else 
        my_FLVPlybk.seekToNextNavCuePoint(eventObject.info.time + 10); 
} 
my_FLVPlybk.source = "http://helpexamples.com/flash/video/cuepoints.flv";

Дополнительные сведения см. в описании методов FLVPlayback.seekToNavCuePoint(), FLVPlayback.seekToNextNavCuePoint() и FLVPlayback.seekToPrevNavCuePoint() в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

Включение и отключение встроенных ключевых точек FLV-файла

Встроенные ключевые точки FLV-файла можно включать и отключать при помощи метода setFLVCuePointEnabled() . Отключенные ключевые точки не инициализируют события cuePoint и не работают с методами seekToCuePoint() , seekToNextNavCuePoint() и seekToPrevNavCuePoint() . Однако отключенные ключевые точки можно найти при помощи методов findCuePoint() , findNearestCuePoint() и findNextCuePointWithName() .

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

import fl.video.*; 
my_FLVPlybk.source = "http://www.helpexamples.com/flash/video/cuepoints.flv"; 
my_FLVPlybk.addEventListener(VideoEvent.READY, ready_listener); 
function ready_listener(eventObject:VideoEvent):void { 
    my_FLVPlybk.setFLVCuePointEnabled(false, "point2"); 
    my_FLVPlybk.setFLVCuePointEnabled(false, "point3"); 
} 
my_FLVPlybk.addEventListener(MetadataEvent.CUE_POINT, cp_listener); 
function cp_listener(eventObject:MetadataEvent):void { 
        trace("Cue point time is: " + eventObject.info.time); 
        trace("Cue point name is: " + eventObject.info.name); 
        trace("Cue point type is: " + eventObject.info.type); 
        if (my_FLVPlybk.isFLVCuePointEnabled("point2") == false) { 
            my_FLVPlybk.setFLVCuePointEnabled(true, "point2"); 
        } 
}

Дополнительные сведения см. в описании методов FLVPlayback.isFLVCuePointEnabled() и FLVPlayback.setFLVCuePointEnabled() в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .

Удаление ключевой точки ActionScript

Ключевую точку ActionScript можно удалить при помощи метода removeASCuePoint() . Следующий пример удаляет ключевую точку ASpt2 при встрече ключевой точки ASpt1 :

import fl.video.*; 
my_FLVPlybk.source = "http://www.helpexamples.com/flash/video/cuepoints.flv" 
my_FLVPlybk.addASCuePoint(2.02, "ASpt1");//add AS cue point 
my_FLVPlybk.addASCuePoint(3.4, "ASpt2");//add 2nd Aspt 
my_FLVPlybk.addEventListener(MetadataEvent.CUE_POINT, cp_listener); 
function cp_listener(eventObject:MetadataEvent):void { 
        trace("Cue point name is: " + eventObject.info.name); 
        if (eventObject.info.name == "ASpt1") { 
            my_FLVPlybk.removeASCuePoint("ASpt2");     
            trace("Removed cue point ASpt2"); 
        } 
}

Дополнительные сведения см. в описании метода FLVPlayback.removeASCuePoint() в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5 .