キューポイントの使用

キューポイントは、ビデオファイルの再生中にビデオプレーヤーが cuePoint イベントを送出するポイントです。キューポイントは、Web ページ上の別のエレメントでアクションを発生させるときに、FLV ファイルに追加することができます。 例えばテキストやグラフィックを表示する、Flash アニメーションと同期する、FLV ファイルを一時停止して再生を操作する、ビデオの別のポイントをシークする、別の FLV ファイルに切り替えることなどがあります。 キューポイントを使用すると、ActionScript コードで制御を受け取り、FLV ファイルのそれらのポイントを Web ページ上の他のアクションと同期することができます。

キューポイントには、ナビゲーションキューポイント、イベントキューポイント、および ActionScript キューポイントの 3 種類があります。 ナビゲーションキューポイントおよびイベントキューポイントは、FLV ファイルストリームおよび FLV ファイルのメタデータパケットに埋め込まれるので、埋め込みキューポイントとも呼ばれます。

ナビゲーションキューポイントを使用すると、FLV ファイルの特定のフレームをシークできます。これは、FLV ファイル内で、指定する時間に可能な限り近い時間にキーフレームが作成されるからです。キーフレームは、FLV ファイルストリーム内のイメージフレーム間で発生するデータセグメントです。ナビゲーションキューポイントをシークすると、コンポーネントはキーフレームをシークし、 cuePoint イベントを開始します。

イベントキューポイントを使用すると、FLV ファイル内の時点を、Web ページ上の外部イベントと同期できます。 cuePoint イベントは、指定した時間に正確に発生します。FLV ファイルにナビゲーションキューポイントおよびイベントキューポイントを埋め込むには、ビデオの読み込みウィザードまたは Flash Video Encoder を使用します。 ビデオの読み込みウィザードと Flash Video Encoder について詳しくは、『Flash ユーザーガイド』の第 16 章「ビデオの操作」を参照してください。

ActionScript キューポイントは、コンポーネントの Flash Video キューポイントダイアログボックスまたは FLVPlayback.addASCuePoint() メソッドを使用して追加できる外部キューポイントです。コンポーネントは FLV ファイルとは別に ActionScript キューポイントを格納および追跡します。その結果、最終的な正確さは埋め込みキューポイントよりも劣ります。 ActionScript キューポイントは、1/10 秒単位までは正確です。 ActionScript キューポイントの精度を上げるには、 playheadUpdateInterval プロパティの値を小さくします。これは、再生ヘッドが更新されるときに、コンポーネントによって ActionScript キューポイントに対して cuePoint イベントが生成されるからです。詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.playheadUpdateInterval プロパティを参照してください。

ActionScript および FLV ファイルのメタデータ内では、キューポイントは name 、 time 、 type および parameters の各プロパティを持つオブジェクトとして表されます。 name プロパティは、キューポイントに割り当てられた名前を含んでいるストリングです。 time プロパティは、キューポイントが発生する時、分、秒、およびミリ秒(HH:MM:SS.mmm)を表す数値です。 type プロパティは、作成したキューポイントの種類に応じて値が "navigation" 、 "event" または "actionscript" となるストリングです。 parameters プロパティは、指定した名前と値のペアの配列です。

cuePoint イベントが発生すると、 info プロパティを通じてイベントオブジェクトでキューポイントオブジェクトを使用できるようになります。

Flash Video キューポイントダイアログボックスの使用

Flash Video キューポイントダイアログボックスを開くには、コンポーネントインスペクターで cuePoints パラメーターの「値」セルをダブルクリックします。このダイアログボックスの外観を次の図に示します。

フルサイズのグラフィックを表示
キューポイントダイアログボックス

このダイアログボックスには、埋め込みキューポイントおよび ActionScript キューポイントが表示されます。 このダイアログボックスを使用すると、ActionScript キューポイントおよびキューポイントパラメーターの追加と削除ができます。 埋め込みキューポイントを有効または無効にすることもできます。 ただし、埋め込みキューポイントを追加、変更、または削除することはできません。

ActionScript キューポイントの追加:

  1. コンポーネントインスペクターで cuePoints パラメーターの「値」セルをダブルクリックし、Flash Video キューポイントダイアログボックスを開きます。

  2. キューポイントのリストの上の左上隅にあるプラス記号 (+) をクリックして、デフォルトの ActionScript キューポイント項目を追加します。

  3. 「名前」列の「新しいキューポイント」というテキストをクリックし、テキストを編集してキューポイントに名前を付けます。

  4. 時間値「00:00:00:000」をクリックして編集し、キューポイントが発生する時間を割り当てます。 時間は、時、分、秒、およびミリ秒 (HH:MM:SS.mmm) で指定します。

    複数のキューポイントが存在する場合、新しいキューポイントはリスト内で時系列順に移動されます。

  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 イベントのリスン、任意のタイプまたは特定のタイプのキューポイントの検索、ナビゲーションキューポイントのシーク、キューポイントの有効化または無効化、キューポイントが有効であるかどうかの確認、およびキューポイントの削除を行うことができます。

この節の例では、「cuepoints.flv」という名前の FLV ファイルを使用します。このファイルには、次の 3 つのキューポイントが含まれています。

名前

時刻

型

point1

00:00:00.418

ナビゲーション

point2

00:00:07.748

ナビゲーション

point3

00:00:16.020

ナビゲーション

ActionScript キューポイントの追加

ActionScript キューポイントを FLV ファイルに追加するには、 addASCuePoint() メソッドを使用します。次の例では、再生の準備ができたときに 2 つの ActionScript キューポイントを FLV ファイルに追加します。 キューポイントオブジェクトを使用して最初のキューポイントを追加します。キューポイントのプロパティで、その時間、名前、およびタイプを指定します。 2 番目の呼び出しでは、メソッドの 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"); 

詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.addASCuePoint() メソッドを参照してください。

cuePoint イベントのリスン

cuePoint イベントを使用すると、 cuePoint イベントが発生したときに、ActionScript コードで制御を受け取ることができます。次の例でキューポイントが発生したときに、 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 イベントについて詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.cuePoint イベントを参照してください。

キューポイントの検索

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); 
}

キューポイントの検索方法について詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.findCuePoint()、FLVPlayback.findNearestCuePoint()、および FLVPlayback.findNextCuePointWithName() の各メソッドを参照してください。

ナビゲーションキューポイントのシーク

ナビゲーションキューポイントのシーク、指定した時間から後の次のナビゲーションキューポイントのシーク、および指定した時間から前のナビゲーションキューポイントのシークを行うことができます。 次の例では、FLV ファイル cuepoints.flv を再生し、 ready イベントが発生したときに、7.748 にあるキューポイントをシークします。 cuePoint イベントが発生したときに、 seekToPrevNavCuePoint() メソッドを呼び出して最初のキューポイントをシークします。 cuePoint イベントが発生したとき、 seekToNextNavCuePoint() メソッドを呼び出して、現在のキューポイントの時間である eventObject.info.time に 10 秒を追加して、最後のキューポイントをシークします。

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";

詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.seekToNavCuePoint()、FLVPlayback.seekToNextNavCuePoint()、および FLVPlayback.seekToPrevNavCuePoint() の各メソッドを参照してください。

FLV ファイルの埋め込みキューポイントの有効化と無効化

FLV ファイルの埋め込みキューポイントを有効または無効にするには、 setFLVCuePointEnabled() メソッドを使用します。無効になっているキューポイントは、 cuePoint イベントをトリガーせず、 seekToCuePoint() 、 seekToNextNavCuePoint() および seekToPrevNavCuePoint() の各メソッドに対して機能しません。ただし、 findCuePoint() 、 findNearestCuePoint() および findNextCuePointWithName() の各メソッドを使用して、無効になっているキューポイントを検索できます。

FLV ファイルの埋め込みキューポイントが有効になっているかどうかは、 isFLVCuePointEnabled() メソッドを使用してテストできます。次の例では、ビデオの再生準備ができたときに、埋め込みキューポイント 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"); 
        } 
}

詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.isFLVCuePointEnabled() メソッドおよび FLVPlayback.setFLVCuePointEnabled() メソッドを参照してください。

ActionScript キューポイントの削除

ActionScript キューポイントを削除するには、 removeASCuePoint() メソッドを使用します。次の例では、キューポイント ASpt1 が発生したときに、キューポイント ASpt2 を削除します。

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"); 
        } 
}

詳しくは、「 Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイド 」の FLVPlayback.removeASCuePoint() を参照してください。