English
PROGRAMMER'S GUIDE分岐再生ライブラリ
戻る進む
分岐再生ライブラリ

3.分岐再生ライブラリの仕組み


3.1 処理の流れ

 分岐再生ライブラリは、シナリオに従ってストリームを読み込み、デコードすべきストリームハンドルをアプリケーションに通知します。
 主な処理の流れを図3.1に示します。

図3.1 処理の流れ

3.2 シナリオ

 シナリオとは、時間の経過に従ってどのように分岐再生をするか(どのような順序でストリームを再生していくか)を表す情報です。
 分岐ストリームはファイル単位で指定します。オーディオやビデオなどのデータは、ファイル内でチャネルインタリーブすることにより取り出すことができます。

図3.2 ストリームの分岐

  1. このシナリオでは、最初に読み込む分岐ストリームはbstm1です。分岐再生ライブラリはbstm1の読み込みを開始します。

  2. アプリケーションは現在読み込み中の分岐ストリームを取得し、デコーダに設定します。

  3. 分岐再生ライブラリは、bstm1の読み込みに続いて、分岐候補(次に取り出しをする可能性のある分岐ストリーム)であるbstm2、bstm3、bstm4、bstm5の読み込みを開始します。このように分岐候補のストリームを先読みすることで、CDバッファを有効に使用でき、スムーズな分岐が可能となります。

  4. アプリケーションはパッド入力などからイベントを取得し、分岐先の選択をします。仮にbstm2、bstm3、bstm4、bstm5への枝に0〜3の分岐番号が割り当てられていて、1が指定されたとすると、不要となったbstm2、bstm4、bstm5の読み込みは中止されます。必要ならばアプリケーションは分岐先のストリームを取得し、デコーダに設定します。

  5. bstm1の取り出しが終わるとbstm3の取り出しを開始します。アプリケーションが分岐再生サーバに対して分岐の実行を指定すると、分岐再生ライブラリは(c)と同様にbstm9、bstm10、bstm11の読み込みを開始します。
[注意事項]


 1つの分岐候補内に同一のストリームが存在してはいけません。同じストリームを
別のストリームハンドルでオープンしても、同時にはデータが読込まれないためです。
 後からオープンしたストリームは絞りの最後につながるので、先にオープンした
ストリームからデータを取り出すことができます。したがって、分岐候補内に現在と
同じストリームが存在してもかまいません。


《図3.2の例》

 ・bstm6〜8中に同じストリームが重複してはいけませんが、
  bstm2と同じストリームがあってもかまいません。


3.3 分岐再生の状態遷移

 分岐再生状態を表3.1に、分岐再生の状態遷移を図3.3に示します。

表3.1 分岐再生状態
状態
説明
分岐再生終了
分岐再生が終了しました。
分岐再生ライブラリがオープンしたストリームグループとストリーム
(現在のストリームと分岐候補)は全てクローズされます。
分岐先選択待ち 
分岐候補を先読みしていますが、分岐先が選択されていません。
分岐候補の全ストリームが先読みの対象です。
現在のストリームだけ取得でき、分岐先のストリームは取得できません。
分岐先決定
分岐候補の中から分岐先が選択されました。
選択した分岐先だけが先読みされます。
現在のストリーム、分岐先のストリームとも取得できます。
分岐先なし
現在のストリームに対する分岐候補や分岐先が存在しません。
最後のストリームを再生している状態です。

分岐再生状態はサーバ関数で取得できます。

図3.3 分岐再生の状態遷移図

※ ON/OFF:分岐再生サーバ関数(BPL_ExecServer)の分岐実行スイッチ
 分岐先選択状態/分岐先なし状態でONを指定すると、分岐再生が終了します。
 分岐先決定状態でONを指定すると、分岐ストリームが切り替わります。

3.4 分岐の実行(分岐ストリームの切り替え処理)

 (1)分岐の実行
 分岐先決定状態で分岐を実行する(分岐再生サーバの分岐実行スイッチをONにする)と、以下のような分岐ストリームの切り替え処理が行われます。

  1. 現在のストリームAをクローズします。
    (Aの読み込みを中止し、CDバッファにデータが残っていても消去します。)

  2. 分岐先のストリームBが、新たに現在のストリームになります。

  3. 分岐先のストリームが未定になります。

表3.2 分岐の実行による分岐ストリームの切り替え
分岐ストリーム
分岐実行前
分岐実行後(切り替え処理後)
現在のストリーム
(BPL_GetCurStm関数で取得)
A
B
(Aはクローズされる)
分岐先のストリーム
(BPL_GetNextStm関数で取得)
B
次の分岐先を選択するまで未定
(BPL_SelectBranch関数で選択・決定)

 分岐先の選択の方が分岐の実行(切り替え)よりも必ず先行することになりますが、選択と切り替えの操作は基本的に非同期です。

 (2)ストリームのオープンとクローズ
 分岐再生ライブラリによってオープンされるストリームは、現在のストリームと分岐候補のストリームです。オープン/クローズの手順を以下に示します。

  1. BPL_SetStart関数によって指定された再生開始ストリームが、現在のストリームとして最初にオープンされます。

  2. 現在のストリームの読み込みが始まると、分岐候補のストリームがオープンされます。

  3. 分岐先を選択すると、それ以外の分岐候補はクローズされ、分岐先だけが先読みされます。

  4. 分岐を実行すると、それ現在のストリームはクローズされます。
    分岐先のストリームは現在のストリームに切り替わり、(b)〜(d)を繰り返します。

  5. 分岐再生が終了すると、ストリームグループがクローズされます。

 (3)分岐ストリームの切り替えタイミング
 分岐ストリームの切り替えタイミングは表3.3のように分類されます。

表3.3 分岐ストリームの切り替えタイミング
タイミング
説明
自然切り替え
ストリームAのデコードが終了したら、分岐先のストリームBに切り替えます。
強制切り替え
ストリームAのデコード途中でも、強制的に分岐先のストリームBに切り替えます。

 分岐先が決まっても、デコーダが現在のストリームの処理を終えるまで、分岐の実行をしてはいけません。(デコード中のストリームデータが途切れてしまうのを防ぐためです)。
 自然/強制どちらの切り替えでも、デコーダに対する切り替え処理を先に実行し、それが完了してから分岐実行スイッチをONにしてください。


戻る進む
PROGRAMMER'S GUIDE分岐再生ライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997