キューポイントの使用

キューポイントは、ビデオファイルの再生中にビデオプレーヤーが 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() を参照してください。