(57)【特許請求の範囲】
【請求項１】
記録媒体に階層構造で記録されたコンテンツデータを再生する再生装置において、
所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトと、
上記プレーヤオブジェクトの上位にあって、上記イベントの発生に対応した処理を記述可能であって、上記イベント毎に独立したオブジェクトとして構成されるプログラムオブジェクトと
を有し、
上記プレーヤオブジェクトは、上記プログラムオブジェクトに記述された上記イベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにしたことを特徴とする再生装置。
【請求項２】
請求項１に記載の再生装置において、
上記プログラムオブジェクトは、上記記録媒体から再生されることを特徴とする再生装置。
【請求項３】
請求項１に記載の再生装置において、
上記プログラムオブジェクトが上記イベントの発生に対応した処理を上記プレーヤオブジェクトに登録することで、該イベントの発生に対応した処理が上記プレーヤオブジェクトで実行されることを特徴とする再生装置。
【請求項４】
請求項３に記載の再生装置において、
上記コンテンツデータの再生中に上記登録を行うことができるようにしたことを特徴とする再生装置。
【請求項５】
請求項３に記載の再生装置において、
上記コンテンツデータの再生中に、上記登録された上記処理を削除できるようにしたことを特徴とする再生装置。
【請求項６】
請求項１に記載の再生装置において、
上記所定の変化は、上記コンテンツデータの再生中の変化であることを特徴とする再生装置。
【請求項７】
請求項６に記載の再生装置において、
上記所定の変化は、上記コンテンツデータに設定された該コンテンツデータ内の時刻を表すマークの、再生中の検出であることを特徴とする再生装置。
【請求項８】
請求項１に記載の再生装置において、
ユーザの入力を受け付けて上記プレーヤオブジェクトに通知するユーザ入力手段をさらに有し、
上記所定の変化は、上記ユーザ入力手段に対する入力に基づくことを特徴とする再生装置。
【請求項９】
請求項８に記載の再生装置において、
上記ユーザ入力手段の物理キーに対して上記プログラムオブジェクトにより仮想キーが割り当てられ、上記所定の変化は、上記仮想キーに対する入力に基づくことを特徴とする再生装置。
【請求項１０】
請求項１に記載の再生装置において、
上記所定の変化は、プレーヤの状態遷移であることを特徴とする再生装置。
【請求項１１】
請求項１に記載の再生装置において、
上記イベントに基づく上記変化に応じて、１または複数のイベントがさらに発生できることを特徴とする再生装置。
【請求項１２】
請求項１に記載の再生装置において、
上記再生処理は、上記記録媒体から上記コンテンツデータを再生する際の再生制御と、上記記録媒体から再生された上記コンテンツデータに対する処理とを含むことを特徴とする再生装置。
【請求項１３】
記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法において、
所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、上記プレーヤオブジェクトの上位にあって、上記イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述された上記イベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにしたことを特徴とする再生方法。
【請求項１４】
記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法をコンピュータ装置に実行させる再生プログラムにおいて、
上記再生方法は、
所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、上記プレーヤオブジェクトの上位にあって、上記イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述された上記イベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにしたことを特徴とする再生プログラム。
【請求項１５】
記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法をコンピュータ装置に実行させる再生プログラムが記録されたコンピュータ装置に読み取り可能な記録媒体において、
上記再生方法は、
所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、上記プレーヤオブジェクトの上位にあって、上記イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述された上記イベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにしたことを特徴とする記録媒体。
【請求項１６】
再生装置によって再生されるコンテンツデータが階層構造で記録された記録媒体において、
少なくともコンテンツデータと、イベントの発生に対応した処理を記述可能であって、イベント毎に独立したオブジェクトとして構成されるプログラムオブジェクトとが記録され、上記プログラムオブジェクトを再生装置に読み出させて、所定の変化に応じてイベントを発生させるように構成された、上記プログラムオブジェクトの下位にあるプレーヤオブジェクトからのイベント発生に対応した処理を構成させるとともに、上記コンテンツデータの再生処理を、上記プログラムオブジェクトに記述された上記イベントの発生に対応した処理に基づき上記プレーヤオブジェクトに制御させるようにした記録媒体。
【請求項１７】
請求項１６に記載の記録媒体において、
上記プログラムオブジェクトが上記イベントの発生に対応した処理を上記プレーヤオブジェクトに登録することで、該イベントの発生に対応した処理が上記プレーヤオブジェクトで実行されることを特徴とする記録媒体。
【請求項１８】
請求項１７に記載の記録媒体において、
上記プログラムオブジェクトは、上記コンテンツデータの再生中に上記登録を行うことができるようにしたことを特徴とする記録媒体。
【請求項１９】
請求項１７に記載の記録媒体において、
上記プログラムオブジェクトは、上記コンテンツデータの再生中に、上記登録された上記処理を削除できるようにしたことを特徴とする記録媒体。
【請求項２０】
請求項１６に記載の記録媒体において、
上記所定の変化は、上記コンテンツデータの再生中の変化であることを特徴とする記録媒体。
【請求項２１】
請求項２０に記載の記録媒体において、
上記所定の変化は、上記コンテンツデータに設定された、該コンテンツデータ内の時刻を表すマークに基づくことを特徴とする記録媒体。
【請求項２２】
請求項１６に記載の記録媒体において、
上記所定の変化は、ユーザ入力手段に対する入力に基づくことを特徴とする記録媒体。
【請求項２３】
請求項２２に記載の記録媒体において、
上記プログラムオブジェクトは、入力に基づき上記所定の変化を生じさせる仮想キーを、上記ユーザ入力手段の物理キーに対して割り当てることを特徴とする記録媒体。
【請求項２４】
請求項１６に記載の記録媒体において、
上記所定の変化は、プレーヤの状態遷移であることを特徴とする記録媒体。
【請求項２５】
請求項１６に記載の記録媒体において、
上記イベントに基づく上記変化に応じて、１または複数のイベントがさらに発生できることを特徴とする記録媒体。
【請求項２６】
請求項１６に記載の記録媒体において、
上記再生処理は、上記コンテンツデータを再生する際の再生制御と、再生された上記コンテンツデータに対する処理とを含むことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ブルーレイディスク（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）などの大容量の記録媒体に記録されたプログラムに対するユーザによるインタラクティブな操作を可能とする再生装置、再生方法、再生プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
近年、記録可能で記録再生装置から取り外し可能なディスク型記録媒体の規格として、Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（ブルーレイディスク）規格が提案されている。Ｂｌｕ−ｒａｙ  Ｄｉｓｃ規格では、記録媒体として直径１２ｃｍ、カバー層０．１ｍｍのディスクを用い、光学系として波長４０５ｎｍの青紫色レーザ、開口数０．８５の対物レンズを用いて、最大で２７ＧＢ（ギガバイト）の記録容量を実現している。これにより、日本のＢＳディジタルハイビジョン放送を、画質を劣化させることなく２時間以上記録することが可能である。
【０００３】
この記録可能光ディスクに記録するＡＶ(Audio/Video)信号のソース（供給源）としては、従来からの、例えばアナログテレビジョン放送によるアナログ信号によるものと、例えばＢＳディジタル放送をはじめとするディジタルテレビジョン放送によるディジタル信号によるものとが想定されている。Ｂｌｕ−ｒａｙ  Ｄｉｓｃ規格では、これらの放送によるＡＶ信号を記録する方法を定めた規格は、既に作られている。
【０００４】
一方で、現状のＢｌｕ−ｒａｙ  Ｄｉｓｃの派生規格として、映画や音楽などが予め記録された、再生専用の記録媒体を開発する動きが進んでいる。映画や音楽を記録するためのディスク状記録媒体としては、既にＤＶＤ(Digital Versatile Disc)が広く普及しているが、このＢｌｕ−ｒａｙ  Ｄｉｓｃの企画に基づいた再生専用光ディスクは、Ｂｌｕ−ｒａｙ  Ｄｉｓｃの大容量および高速な転送速度などを活かし、ハイビジョン映像を高画質なままで２時間以上収録できる点が、既存のＤＶＤとは大きく異なり、優位である。
【０００５】
再生専用のＤＶＤビデオ規格においては、メニュー画面上に配置されたボタン画像などを用いて、インタラクティブな機能を実現している。例えば、ＤＶＤビデオにより動画を再生中に、リモートコントロールコマンダなどを用いてメニュー画面を呼び出し、メニュー画面上に配置されたボタン画像を選択して再生場面を変更するなどの処理が可能であった。
【０００６】
ＤＶＤビデオの場合、メニュー画面を固定的なサブピクチャデータにより構成し、メニュー画面が呼び出された際に、動画データにこのサブピクチャデータを合成して表示する。ボタン画像データもこのサブピクチャデータに含まれる。特許文献１に、このように動画データにサブピクチャデータを合成して記録可能なＤＶＤに記録する構成が記載されている。
【特許文献１】
特開平１０−３０８９２４号公報
【発明の課題】
【発明が解決しようとする課題】
【０００７】
しかしながら、再生専用のＤＶＤビデオ規格では、単純なコマンドにより動作が記述されているため、複雑なインタラクティブ機能を実現することが難しいという問題点があった。そのため、複雑なインタラクティブ機能を再生専用のＤＶＤビデオ規格で実現することは、制作者にとって大きな負担になるという問題点があった。
【０００８】
また、再生専用のＤＶＤ規格では、プログラムの動作としては、コマンドが羅列されたコマンド領域を一行ずつ実行していく単純なもので、マルチスレッドプログラミングやイベント駆動のプログラミングを行うことができなかった。ＤＶＤビデオ規格は、インターネットなどのネットワークにアクセスする機能を有していないが、ネットワークアクセス機能を実現することを考えた場合、ネットワークからの応答やユーザからの応答は待ち時間が長く、マルチスレッドで処理を行えるシステム構成であることが、パフォーマンスの向上に非常に有効である。
【０００９】
さらに、このＤＶＤビデオ規格では、映像および音声が多重化されているＡＶ(Audio/Video)ストリーム中にもコマンドが埋め込まれている。ＡＶストリームの再生を進めていくに従ってコマンドを取得し、実行するという、いわば芋づるを辿るような動作モデルとなっている。そのため、タイトル選択のメニュー画面や分岐のあるマルチストーリーにおいて、ユーザがボタンを選択実行したときに、始めて次の動作が決まる。したがって、ＤＶＤビデオ規格では、コマンドを先読みして分岐予測や投機実行を行うといった高速処理技術が適用できないという問題点があった。
【００１０】
また、ディスクを制作するオーサリングの観点からも、再生専用のＤＶＤビデオ規格は、問題があった。一例として、ＡＶストリーム上のある時刻に表示されるように想定されたボタン表示に対して、ボタン表示のタイミングを時間軸上で前あるいは後ろにずらしたい場合を考える。例えば、第１図に示されるように、ＡＶストリーム上のボタン表示開時刻ｔ1からボタン表示終了時刻ｔ2まで表示されるように想定されたボタンを、時刻ｔ1より前の時刻ｔ3から表示させるように変更する。
【００１１】
周知のように、再生専用のＤＶＤビデオ規格では、ＡＶストリームは、ＭＰＥＧ２(Moving Pictures Experts Group 2)の規定に従い符号化され、パケッタイズされる。再生出力の時刻管理は、ｐｔｓ(Presentation Time Stamp)により行われる。第１図の例では、ボタンの表示開始時刻を、時刻ｔ1に対応するｐｔｓ１から時刻ｔ3に対応するｐｔｓ３に変更することになる。
【００１２】
ＤＶＤビデオ規格では、ナビゲーション情報、ビデオデータ、オーディオデータおよびサブピクチャデータがそれぞれパックとして、１本のＡＶストリームに多重化され、ＡＶストリーム中にコマンドなどが埋め込まれた構造となっている。ビデオデータ、オーディオデータおよびサブピクチャデータは、その多重化された時刻に表示されることを想定している。例えば、第２図Ａに示されるように、ｐｔｓ単位で管理される時間軸上の所定時刻に所定のデータが再生されるように、多重化がなされる。
【００１３】
このように多重化がなされているため、時刻ｐｔｓ１に表示されるように想定されたボタンＡを、時刻ｐｔｓ３に表示されるように変更するには、第２図ＡのＡＶストリームを、第２図Ｂに示されるように、ボタン１を表示するサブピクチャデータが時刻ｐｔｓ３の位置にくるように再多重化する必要がある。ボタンが選択されたときに実行するコマンドの内容を変更したい場合にも、同様にして、ＡＶストリームの再多重化を行わなくてはならなかった。再多重化は、例えば、ＤＶＤを再生するプレーヤ内で、再生したＡＶストリームを一旦メモリに格納して行う。
【００１４】
このように、従来では、より自由度の高いインタラクティブ機能を実現するのが困難であり、それを実現しようとすると、制作者側にもより大きい負担が掛かってしまうという問題点があった。
【００１５】
したがって、この発明の目的は、大容量の再生専用光ディスクにおいて、より自由度の高いインタラクティブ機能を容易に実現可能な再生装置、再生方法、再生プログラムおよび記録媒体を提供することにある。
【課題を解決するための手段】
【００１６】
この発明は、上述した課題を解決するために、記録媒体に階層構造で記録されたコンテンツデータを再生する再生装置において、所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトと、プレーヤオブジェクトの上位にあって、イベントの発生に対応した処理を記述可能であって、上記イベント毎に独立したオブジェクトとして構成されるプログラムオブジェクトとを有し、プレーヤオブジェクトは、プログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにした再生装置である。
【００１７】
また、この発明は、記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法において、所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、プレーヤオブジェクトの上位にあって、イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにした再生方法である。
【００１８】
また、この発明は、記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法をコンピュータ装置に実行させる再生プログラムにおいて、再生方法は、所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、プレーヤオブジェクトの上位にあって、イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにした再生プログラムである。
【００１９】
また、この発明は、記録媒体に階層構造で記録されたコンテンツデータを再生する再生方法をコンピュータ装置に実行させる再生プログラムが記録されたコンピュータ装置に読み取り可能な記録媒体において、再生方法は、所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、プレーヤオブジェクトの上位にあって、イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにした記録媒体である。
【００２０】
また、この発明は、再生装置によって再生されるコンテンツデータが階層構造で記録された記録媒体において、少なくともコンテンツデータと、イベントの発生に対応した処理を記述可能であって、イベント毎に独立したオブジェクトとして構成されるプログラムオブジェクトとが記録され、プログラムオブジェクトを再生装置に読み出させて、所定の変化に応じてイベントを発生させるように構成された、プログラムオブジェクトの下位にあるプレーヤオブジェクトからのイベント発生に対応した処理を構成させるとともに、コンテンツデータの再生処理を、プログラムオブジェクトに記述されたイベントの発生に対応した処理に基づきプレーヤオブジェクトに制御させるようにした記録媒体である。
【００２１】
上述したように、請求の範囲１、請求の範囲１３、請求の範囲１４および請求の範囲１５に記載の発明は、所定の変化に応じてイベントを発生させるように構成されたプレーヤオブジェクトにより、プレーヤオブジェクトの上位にあって、イベントの発生に対応した処理を記述可能なプログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき、記録媒体に階層構造で記録されたコンテンツデータの再生処理を制御するようにしているため、一つのプレーヤオブジェクトで記録媒体毎に独自の処理の再生制御を行うことができる。
【００２２】
また、請求の範囲１６に記載の発明は、少なくともコンテンツデータと、イベントの発生に対応した処理を記述可能なプログラムオブジェクトとが記録され、コンテンツデータの再生処理が、所定の変化に応じてイベントを発生させるように構成された、プログラムオブジェクトの下位にあるプレーヤオブジェクトによって、プログラムオブジェクトに記述されたイベントの発生に対応した処理に基づき制御されるようにしているため、一つのプレーヤオブジェクトに対し、記録媒体毎に独自の再生制御を行わせるようにできる。
【発明の効果】
【００２３】
この発明では、ＢＤ−ＲＯＭプレーヤのＡＶストリーム再生機能を抽象化した仮想プレーヤを構築し、仮想プレーヤに対してイベントモデルを適用して発生するイベントを定めた。また、ユーザ入力により発生するユーザイベントを定義した。そのため、一つのイベントモデルでＤＶＤビデオの持つ機能を実現できるという効果がある。
【００２４】
また、この発明では、ＢＤ−ＲＯＭプレーヤのＡＶストリーム再生機能を抽象化した仮想プレーヤを構築し、仮想プレーヤに対応するＪａｖａクラスを定義している。そして、仮想プレーヤに対してイベントモデルを適用して発生するイベントを定めると共に、ユーザ入力により発生するユーザイベントを定義した。そのため、再生専用ビデオディスクにおける再生制御の方法として、Ｊａｖａのイベントモデルを適用でき、Ｊａｖａプログラムからプレイリストの再生制御が可能となるという効果がある。
【００２５】
そのため、複雑なインタラクティブ機能を組み込む場合でも、ディスク制作者側の負担が軽くて済むという効果がある。
【００２６】
また、この発明は、Ｊａｖａ言語に限らず、ＥＣＭＡスクリプトのようなスクリプト言語にも適用でき、イベントに対応するイベントハンドラの内容をコンテンツ制作者側がスクリプト言語を用いて記述して、イベント発生時にコンテンツ制作者側が意図する動作を容易に実現させることができる効果がある。
【発明を実施するための最良の形態】
【００２７】
以下、この発明について、下記の構成に従い説明する。
１．発明の実施の第１の形態
１−１．ＢＤ−ＲＯＭのＡＶストリーム再生機能について
１−１ａ．ＢＤ−ＲＯＭのＨＤムービーモードについて
１−１ｂ．ＢＤ−ＲＯＭのフルプロファイルについて
１−２．ＪａｖａによるＢＤ仮想プレーヤモデル
１−３．ＢＤ基本プレーヤで生成されるイベントについて
１−３ａ．イベントの分類
１−３ｂ．イベントモデルについて
１−４．ユーザ入力について
１−５．ファイルの管理構造について
１−６．デコーダモデルについて
２．発明の実施の第２の形態
２−１．ＵＭＤビデオ規格について
２−２．ＵＭＤビデオ規格のプレーヤモデルについて
２−３．ムービープレーヤのイベントモデルについて
２−４．ムービープレーヤオブジェクトおよびユーザ入力について
２−５．ムービープレーヤオブジェクトでのイベントの扱いについて
【００２８】
１．発明の実施の第１の形態
以下、この発明の実施の第１の形態について説明する。先ず、理解を容易とするために、現状のＢｌｕ−ｒａｙ  Ｄｉｓｃの派生規格として提案されている、再生専用の記録媒体の規格について、概略的に説明する。以下では、記録可能なＢｌｕ−ｒａｙ  Ｄｉｓｃと区別するために、Ｂｌｕ−ｒａｙ  Ｄｉｓｃの派生規格の再生専用の記録媒体をＢＤ−ＲＯＭ(Blu-ray Disc-Read Only Memory)と称し、ＢＤ−ＲＯＭ規格においてＤＶＤビデオと同等のインタラクティブ機能を用意するために、ＨＤ(High Definition)ムービーモードが用意されている。
【００２９】
１−１．ＢＤ−ＲＯＭのＡＶストリーム再生機能について
１−１ａ．ＢＤ−ＲＯＭのＨＤムービーモードについて
第３図Ａおよび第３図Ｂは、ＢＤ−ＲＯＭ規格のＨＤムービーモードにおける一例のレイヤ構成を示す。ＢＤ−ＲＯＭ規格のＨＤムービーモードは、下層側から、クリップレイヤ(Clip Layer)、プレイリストレイヤ(PlayList Layer)、ムービーオブジェクトレイヤ(Movie Object Layer)およびインデックステーブルレイヤ(Index Table Layer)からなる。
【００３０】
クリップレイヤは、１または複数のクリップからなる。クリップ(Clip)は、クリップＡＶストリーム(Clip AV Streem)およびクリップインフォメーション(Clip Information)からなる。ＡＶ(Audio/Video)ストリームの実体は、クリップＡＶストリームファイルであり、ＭＰＥＧ２(Moving Pictures Experts Group 2)トランスポートストリームにタイムスタンプを付加した形式で記録される。クリップＡＶストリームファイルには、ボタン画像を表示するためのボタンオブジェクトを多重化することができる。
【００３１】
クリップＡＶストリームファイルの記録時に、クリップＡＶストリームファイルに１対１に対応してクリップインフォメーションファイルが同時に作成される。クリップＡＶストリームファイルおよびクリップインフォメーションファイルの一組を、クリップと称する。
【００３２】
クリップは、記録の単位ともいうべきものであり、再生時にどのような順序でクリップを再生するかは、クリップの上位のレイヤで管理する。プレイリストレイヤは、クリップの再生経路を指定するレイヤであり、１または複数のプレイリストを含む。ＢＤ−ＲＯＭ規格のＨＤムービーモードにおいては、プレイリストは、ムービープレイリスト(Movie PlayList)と称される１種類が存在する。ムービープレイリストは、プレイアイテム(PlayItem)の集合からなる。プレイアイテムには、クリップの再生範囲を示した一組のＩＮ点およびＯＵＴ点が含まれており、プレイアイテムを連ねることによって、任意の順序でクリップを再生することができるようになる。プレイアイテムは、クリップを重複して指定することができる。クリップＡＶストリームファイルのＩＮ点およびＯＵＴ点は、バイトポジションで指定される。
【００３３】
ムービーオブジェクトは、プレイリストレイヤの上位にあり、１または複数のムービーオブジェクトからなる。ムービーオブジェクトは、プレイリストの再生指示や、プレーヤ設定を行うコマンド列から構成される。ムービーオブジェクトが有するコマンドにより、複数の言語用に用意されたストリームのうちどれを選択するか、或いは、選択されるプレイリストがある条件に従って変化するような、条件分岐を伴うプレイリスト再生を実現することができる。条件分岐を伴うプレイリスト再生を行うアプリケーション例としては、マルチストーリーが挙げられる。ムービーオブジェクトによって、双方向性（インタラクティブ性）が導入されることになる。
【００３４】
インデックステーブルを含むインデックステーブルレイヤは、プレイリストレイヤの上位にある。インデックステーブルは、ディスク挿入時に最初に実行されるムービーオブジェクト、メニューキーが押されたときに実行されるムービーオブジェクトおよびユーザに見せるタイトルの一覧表から構成される。インデックステーブルにより、ユーザインターフェイスが提供される。タイトルは、１または複数のムービーオブジェクトで構成される。インデックステーブルには、各タイトルで最初に実行されるムービーオブジェクトが羅列されている。プレーヤは、このインデックステーブルを基に、各種動作時に最初に実行するムービーオブジェクトを決めている。
【００３５】
ＢＤ−ＲＯＭのＨＤムービーモードにおけるディスク上には、以上説明したようなデータベースが構成される。プレーヤは、ディスク上からこうしたデータベースを読み取り、指定された動作を行う。
【００３６】
次に、プレーヤ側のモデルを説明する。現実のプレーヤ実装においては、さまざまな形態が考えられるが、ここでは、プレーヤモデルを、ハードウェアに近いストリームを再生する機能ブロックと、その上位にありソフトウェアでコマンドを解釈し実行する機能ブロックという、２つの機能ブロックに分ける。第４図は、ＢＤ−ＲＯＭのプレーヤモデルの一例のレイヤ構成を示す。第４図の左側が、ＨＤムービーモードにおける２つの機能ブロックに分けられたレイヤ構成を示している。
【００３７】
ＢＤプレゼンテーションエンジン(Presentation Engine)２００は、プレイリストやクリップを扱い、ＡＶストリームのデコードを行い、動画や音声を再生する機能ブロックである。字幕ストリームや、ボタン画像やメニューを表示するためのグラフィックスストリームのデコードも、ＢＤプレゼンテーションエンジン２００で行う。
【００３８】
ＢＤプレゼンテーションエンジン２００は、上位レイヤの指示に従って指定のプレイリストを再生する。
【００３９】
ＢＤ−ＲＯＭのＨＤムービーモードでは、ＢＤプレゼンテーションエンジン２００の上に、ナビゲーションエンジン(Navigation Engine)２０１が存在する。ナビゲーションエンジン２０１は、インデックステーブルやムービーオブジェクトを解釈し、最終的に再生するプレイリストをＢＤプレゼンテーションエンジン２００に指示する。
１−１ｂ．ＢＤ−ＲＯＭのフルプロファイルについて
次に、ＢＤ−ＲＯＭ規格のフルプロファイルについて説明する。ＢＤ−ＲＯＭ規格のフルプロファイルは、上述したＢＤ−ＲＯＭ規格のＨＤムービーモードに対してより高い自由度と拡張性を持たせた、ＢＤ−ＲＯＭ規格に提案されるモードである。以下、ＢＤ−ＲＯＭ規格のフルプロファイルモードを、フルプロファイルと略称する。
【００４０】
この発明の実施の第１の形態では、高い自由度と拡張性を実現するために、プレーヤモデルに対してＪａｖａ仮想マシン（ＪａｖａＶＭ：Java Vertual Machine)を搭載し、Ｊａｖａアプリケーションを実行することで、フルプロファイルを実現している。この点が上述したＢＤ−ＲＯＭのＨＤムービーモードとは大きく異なる点である。なお、Ｊａｖａ、ＪａｖａＶＭなどは、Sun Microsystems, Inc.による登録商標である。
【００４１】
フルプロファイルにおいても、プレーヤの機能は全て利用できることが必要である。これは、ＢＤプレゼンテーションエンジン２００とＪａｖａアプリケーションとの間にＡＰＩ(Application Programming Interface)が定義されており、そのＡＰＩを介してＢＤプレゼンテーションエンジン２００を操作できることを意味する。これは、ＢＤ−ＲＯＭのＨＤムービーモードにおけるナビゲーションエンジン２０１のように、ＪａｖａアプリケーションがＢＤプレゼンテーションエンジン２００の上位に位置すると考えればよい。すなわち、第４図の右側に一例が示されるように、フルプロファイルにおいては、ＢＤプレゼンテーションエンジン２００の上位に、ＪａｖａＶＭ２０２を介してＪａｖａアプリケーション２０３が乗る構成となる。
【００４２】
なお、Ｊａｖａでは、他に、ネットワーク機能やグラフィクス機能を有する。そのため、Ｊａｖａアプリケーション２０３およびＪａｖａＶＭ２０２の下位レイヤとして、ネットワークレイヤ２０４およびＧＵＩ(Graphical User Interface)レイヤ２０５を有する。
【００４３】
Ｊａｖａアプリケーション２０３からＢＤプレゼンテーションエンジン２００を操作するということは、プレイリストを再生するプレーヤをソフトウェア上で仮想的に考え、そのプレーヤに対して再生、停止、ストリーム選択などの命令を発して、プレーヤ操作を行うと見なせばよい。プレーヤからＪａｖａアプリケーション２０３へは、どのプレイリストを再生しているかといった現在のプレーヤの状態や、ストリーム選択やユーザからの入力など、各種動作の変化の時刻を伝える必要がある。この発明の実施の第１の形態では、こうしたプレーヤの機能を、Ｊａｖａアプリケーション２０３上で抽象化したオブジェクトとして考える。このプレイや機能を抽象化したオブジェクトを、ＢＤ基本プレーヤと称する。
【００４４】
第５図を用いて、ＢＤ基本プレーヤについて説明する。ＢＤ基本プレーヤ３０は、この発明の実施の第１の形態により定義されるディスク状記録媒体を再生するもので、パソコンなどのコンピュータ環境上のオブジェクトである。コンピュータ環境は、汎用的なパーソナルコンピュータに限られず、例えば、この発明の実施の第１の形態により定義されるディスク状記録媒体を再生するように専用的に構成された再生装置および／または記録再生装置に組み込まれたソフトウェア環境も含む。なお、以下、この発明の実施の第１の形態により定義されるディスク状記録媒体を、ディスクと略称する。
【００４５】
ＢＤ基本プレーヤ３０は、ソフトウェア上の抽象化されたオブジェクトである。ＢＤ基本プレーヤ３０の下位に、ＯＳ(Operating System)およびハードウェア３３が存在する。ＢＤ基本プレーヤ３０の上位プログラムとして、ＡＰＩ３２を介してＪａｖａプログラム３１が存在する。
【００４６】
ＢＤ基本プレーヤ３０の状態は、概略的には、プレイリストやグラフィクスを再生する状態Ａと、再生が停止された状態Ｂの２つの状態に分類できる。状態Ａは、高速再生、逆転再生といった変速再生や、ディスク上の任意の時刻から再生する飛び込み再生といった特殊再生などの複数の動作を含む。さらに、ＢＤ基本プレーヤ３０は、内部にプレーヤ状態を保持する変数（共通パラメータ３４）を持つ。共通パラメータ３４は、実際には、コンピュータ環境上のレジスタなどからなる。上位レイヤのアプリケーション（Ｊａｖａプログラム３１）は、Ｊａｖａのメソッドを通じて共通パラメータ３４にアクセスすることで、ＢＤ基本プレーヤ３０の状態に応じた個別の処理を行うことができる。
【００４７】
ＢＤ基本プレーヤ３０は、ソフトウェア上の抽象化されたオブジェクトである。ＢＤ基本プレーヤ３０は、Ｊａｖａプログラム３１によるＡＰＩ３２を介しての制御を、最終的に、下位にあるＯＳおよびハードウェア３３への制御に変換していることになる。
【００４８】
ＢＤ基本プレーヤ３０は、ＡＰＩ３２によって上位のプログラム（Ｊａｖａプログラム３１）から制御されると共に、ＢＤ基本プレーヤ３０で発生する状態の変化を上位プログラムに伝える必要がある。なぜなら、今再生しているプレイリストを再生し終わったら別のプレイリストを再生させる、といった複数の動作を順序立ててＢＤ基本プレーヤ３０に行わせるには、ＢＤ基本プレーヤ３０の状態を上位プログラムが把握している必要があるからである。この発明の実施の第１の形態では、このプレーヤの状態を上位レイヤに伝える仕組みとして、イベントモデルを導入する。
【００４９】
第６図は、プレイリストの再生中に発生するイベントの例を示す。再生開始時には、先ず、イベントPlayStartedが発生する。それから、プレイリストの再生が開始されるときには、イベントPlayListStartedが発生する。プレイリストの先頭は、プレイアイテムの先頭でもあるため、イベントPlayListStartedの発生と同時にイベントPlayItemSartedも発生する。さらに、プレイリストの先頭にチャプタを示すチャプタマークが打たれている場合には、イベントMarkEncounteredが発生する。
【００５０】
同様に、プレイアイテム中にマークが打たれているときは、当該プレイアイテムを再生中にこのマークが検出されることによりイベントMarkEncounteredが発生する。プレイアイテムの再生が終了されると、イベントPlayItemEndedが発生し、そこでプレイリストも終了していれば、イベントPlayListEndedがさらに発生する。再生終了時には、イベントPlayEndedが発生する。
【００５１】
このように、プレーヤの動作中には、様々なイベントが発生するものとし、イベント発生を上位プログラムに伝えることで、上位プログラムは、プレーヤの状態を把握できるようになる。上位プログラム側では、各イベント発生通知時に実行されるプログラムを用意しておくことで、各種イベント発生に対処する。
【００５２】
この発明の実施の第１の形態では、以上のように、プレーヤの抽象化の方法、Ｊａｖａプログラムからプレーヤを操作するメソッドモデルおよびプレーヤの状態をＪａｖａプログラムに伝えるためのイベントモデルを提供し、ＢＤ−ＲＯＭの制御プログラムにＪａｖａ言語を導入する。この実施の第１の形態が適用されたシステムでは、ディスク制作者は、ＡＰＩ３２を介してＢＤ基本プレーヤ３０を操作するＪａｖａプログラム３１を作成することになる。
【００５３】
次に、プレーヤ機能を詳細に分析して抽象化し、Ｊａｖａのクラスで表現した具体例を示す。
【００５４】
１−２．ＪａｖａによるＢＤ仮想プレーヤモデル
ＢＤ−ＲＯＭのフルプロファイルを定めるにあたり、Ｂｌｕ−ｒａｙ  Ｄｉｓｃを実行する環境を定義する必要がある。ＢＤ−ＲＯＭを再生する理想的なＢＤ基本プレーヤ３０のモデルを、ＢＤ−ＲＯＭ仮想プレーヤモデルと名づける。ＢＤ基本プレーヤ３０は、ＢＤ−ＲＯＭ仮想プレーヤモデル中のプレイリストを再生する機能ブロックに相当する。ＢＤ−ＲＯＭ仮想プレーヤモデルでは、ＢＤ基本プレーヤ３０の取り得る状態や状態遷移の条件を定義すると共に、ＢＤ基本プレーヤ３０で再生できるストリームの属性、ストリームを制御するコマンドレス（スクリプト）の記述方法などを定義する。ＢＤ−ＲＯＭに格納されたスクリプトやストリームは、このＢＤ−ＲＯＭ仮想プレーヤモデル上で正しく動作するものでなければならない。
【００５５】
また、実際のＢＤ−ＲＯＭプレーヤには、様々な実装方法があるが、実装に依存しないモデルを想定することで、最小限必要なハードウェア資源を明確にすることが可能となる。
【００５６】
この発明の実施の第１の形態で定義されるＢＤ−ＲＯＭ仮想プレーヤモデルでは、ＢＤ基本プレーヤ３０を制御するプログラミング言語として、Ｊａｖａを用いる。Ｊａｖａは、Sun Microsystems, Inc.によって作られたプログラミング言語で、適用するシステムの規模により、Ｊ２ＥＥ、Ｊ２ＳＥ、Ｊ２ＭＥなどの複数のエディションを有する。ここでは、セットトップボックスなどでの組み込みでの使用を想定したエディションであるＪ２ＭＥを一例として使用することを想定している。すなわち、Ｊ２ＭＥをベースとして、ＢＤ−ＲＯＭ仮想プレーヤモデルに必要な拡張を加えるという考え方である。
【００５７】
Ｊａｖａ言語は、新たなクラスを定義することにより容易に拡張ができる特徴がある。例えば、単体ではイベント処理できないＨＴＭＬ(Hyper Text Markup Language)文書でイベント処理を実現するためには、ＨＴＭＬ文書内にイベント処理が可能なスクリプト、例えばＥＣＭＡ(European Computer Manufacturers Association)スクリプトを記述してイベントを処理する。
【００５８】
Ｊａｖａ言語を用いることで、このように、ある機能を実現するために複数の技術を使うのではなく、Ｊａｖａ言語で定められた拡張の方法に従って機能を追加できる。そのため、完成したプログラムも、Ｊａｖａ言語のみを用いて記述されたものとなる。また、Ｊａｖａは、既に数多くのプログラム開発環境が提供されており、制作者にとってディスクを作りやすい環境といえる。
【００５９】
ＢＤ−ＲＯＭ仮想プレーヤモデルをＪａｖａ言語で記述する場合、既にSun Microsystems, Inc.によって規定されているＪａｖａのクラス、ＡＰＩは、そのまま用いることができる。一方、ＢＤ基本プレーヤ３０は、ＢＤ−ＲＯＭ独自の機能であり、既存のクラスやＡＰＩとしては用意されていない。このＢＤ−ＲＯＭ独自の機能をＪａｖａで実現するには、様々な方法が考えられるが、この発明の実施の第１の形態では、ＢＤ基本プレーヤ３０の機能とそれに関するＡＰＩ、イベントモデルなどをＢＤ−ＲＯＭに適した形で構築した。
【００６０】
先ず、ＢＤ基本プレーヤ３０をＪａｖａの一つのクラスとして定義する。そのクラスのクラス名を、BDBasicPlayerと定義する。第７図〜第１３図は、クラスBDBasicPlayerのメソッドの例を一覧して示す。ＢＤ基本プレーヤ３０に対する命令は、全てこのメソッドを通して行う。
【００６１】
第７図は、プレーヤ設定情報取得に関する一例のメソッドを示す。メソッドgetPlayerSpeed()で、プレーヤの再生速度を取得する。メソッドgetPlayerDirection()で、プレーヤの再生方向を取得する。メソッドgetDescriptionLanguage()で、プレーヤの表示言語を取得する。メソッドgetPlayListNumber()で、現在再生中のプレイリスト番号を取得する。メソッドgetChapterNumber()で、現在再生中のチャプター番号を取得する。メソッドgetPlayerSupport()で、プレーヤのバージョンおよび当該プレーヤが有する機能を取得する。
【００６２】
第８図Ａ、第８図Ｂおよび第８図Ｃは、プレイリストの再生に関する一例のメソッドを示す。メソッドplayPlayList(int playListNumber,long[playListTime])で、"playListNumber"で指定されたプレイリストの再生を開始する。なお、"playListTime"は、必須ではない。"playListTime"によりプレイリスト内の経過時刻を指定し、そこからプレイリストを再生する。メソッドplayPlayList(String playListURL,long[PlayListTime])で、"playListURL"で指定されたプレイリストの再生を開始する。"playListURL"は、プレイリストをＵＲＬ(Uniform Resource Locator)で指定する。例えばインターネット上にあるプレイリストをＵＲＬで指定することができる。一例として、プレーヤがインターネット接続機能を有していれば、この"playListURL"で指定されたＵＲＬからプレイリストをダウンロードして再生するようにできる。"playListTime"は、必須ではない。"playListTime"によりプレイリスト内の経過時刻を指定し、そこからプレイリストを再生する。
【００６３】
メソッドplayPlayItem(int playListNumber,int playItemNumber)で、"playListNumber"で指定されるプレイリストの、"palyItemNumber"で指定されるプレイアイテムから再生を開始する。"playItemNumber"は、プレイアイテムを識別するための"PlayItem_id"であり、０から始まる数値である。プレイリストの先頭から再生するのであれば、"playItemNumber"の値は０になる。メソッドplayPlayItem(String playListURL,int playItemNumber)で、"playListURL"で指定されるプレイリストの、"playItemNumber"で指定されるプレイアイテムから再生を開始する。"playItemNumber"は、"PlayItem_id"であり、０から始まる数値である。プレイリストの先頭から再生するのであれば、"playItemNumber"の値は０になる。
【００６４】
メソッドplayChapterMark(int playListNumber,int chapterNumber)は、"playListNumber"で決まるプレイリスト中の、"chapterNumber"で指定されるあるチャプタから再生する。"playListNumber"は、"playListURL"であってもよい。プレイリストの先頭には、必ずChapterMark（チャプタマーク）が付けられている。
【００６５】
メソッドmoveAndPlay(string position,object)position=("prev"|"next"|"top"|"tail")object=("PlayItem"|"Chapter")で、プレイリスト内での移動が指示される。"next"は、現在再生中の箇所から次のプレイアイテムまたはチャプタに飛び、再生を開始する。"top"は、プレイリストの先頭に移動する。"tail"は、プレイリストの最後に移動する。"prev"は、現在再生中のプレイリストの先頭から再生を開始する。メソッドstop()で、再生を停止する。このとき、標準レジスタの値は保持されない。メソッドplaySoundEffect(int sound_id)で、"sound_id"で選択された効果音を再生する。
【００６６】
第９図は、ビデオストリームに関する一例のメソッドを示す。メソッドgetVideoStreamAvailability()で、指定のビデオストリームが含まれているか否かを取得する。メソッドsetVideoStreamNumber()で、デコードするビデオストリームを指定する。メソッドgetVideoStreamNumber()で、選択中のビデオストリームの番号を取得する。メソッドgetVideoStreamAttribute()で、ビデオストリームの属性を取得する。ビデオストリームの属性は、例えば、符号化方式、解像度、アスペクト比、アスペクト比が４：３のときのディスプレイモード、クローズドキャプションか否か、などである。メソッドsetAngleNumber()で、アングル番号を指定する。メソッドgetAngleNumber()で、選択中のアングル番号を取得する。メソッドgetMaxVideoStreams()で、選択可能なビデオストリームの数を取得する。
【００６７】
第１０図は、オーディオストリーム関する一例のメソッドを示す。メソッドgetAudioStreamAvailability()で、指定のオーディオストリームが含まれているか否かを取得する。メソッドgetAudioStreamLanguage()で、指定のオーディオストリームの言語についての情報を取得する。メソッドsetAudioStreamNumber()で、再生するオーディオストリームを指定する。メソッドgetAudioStreamNumber()で、再生しているオーディオストリームの番号を取得する。メソッドgetAudioStreamAttribute()で、オーディオストリームの属性を取得する。オーディオストリームの属性は、例えば、符号化方式、チャンネル数、量子化ビット数、サンプリング周波数などである。メソッドgetMaxAudioStreams()で、選択可能なオーディオストリームの数を取得する。
【００６８】
第１１図は、サブピクチャストリーム関する一例のメソッドを示す。メソッドgetSPStreamAvailability()で、指定のサブピクチャストリームが含まれているか否かを取得する。メソッドgetSPStreamLanguage()で、指定のサブピクチャストリームの言語を取得する。メソッドgetSPDisplayStatus()で、サブピクチャストリームの表示状態、すなわち、現在表示されているか、非表示であるかを取得する。メソッドsetSPDisplayStatus()で、サブピクチャストリームの表示状態、すなわち、表示するか非表示とするかを設定する。メソッドgetSPStreamAttribute()で、サブピクチャストリームの属性を取得する。サブピクチャストリームの属性は、例えば、異なる解像度のサブピクチャストリームを持つ場合の解像度別情報、アスペクト比４：３またはワイド用などの情報である。
【００６９】
第１２図は、内蔵タイマに関する一例のメソッドを示す。メソッドsleep()で、指定されたミリ秒間、処理を停止する。メソッドsetTimeout()で、指定されたミリ秒後に関数や処理を実行する。メソッドsetInterval()で、指定されたミリ秒ごとに処理を実行する。メソッドclearTimer()で、指定された登録タイマＩＤの処理を中止する。メソッドpauseTimer()で、指定した登録タイマＩＤのタイマを一時停止する。メソッドresumeTimer()で、指定した登録タイマＩＤのタイマを一時停止から再開する。
【００７０】
第１３図は、キー入力に関する一例のメソッドを示す。メソッドgetPressedKey()で、ユーザが押したキーの種類を取得する。
【００７１】
１−３．ＢＤ基本プレーヤで生成されるイベントについて
プレーヤ操作に関するメソッドを実行した際、プレーヤの動作が正常に開始されたかなど、直後に反応を知ることができるものは、メソッドに対する戻り値で知ることができる。しかし、時間のかかる処理を指示した場合、その処理が終了するまで待つような方法では、他の処理ができない。また、いつ発生するかわからない処理もある。このような場合はイベントの仕組みを導入することで効率の良い処理が可能となる。
【００７２】
プレーヤの動作中には、様々なイベントが発生する。どのようなイベントが発生するかは、ＢＤ−ＲＯＭ仮想プレーヤモデルで定義する。プレーヤの動作に変化が生じるとイベントが発生するものとし、そのイベント発生に対処するプログラムが用意されている場合に、そのプログラムが実行される、というモデルをＢＤ−ＲＯＭ仮想プレーヤモデルで定義する。
【００７３】
例えば、複数のプレイリストを指定の順序で再生していく場合、前のプレイリストの再生終了のイベントを受けて次のプレイリストの再生を開始する処理を行うプログラムを用意しておく。また、何らかの原因で次のプレイリストが再生されなかった場合には、例外が発生するものとして例外処理するプログラムを用意しておく。
【００７４】
プログラムとして記述されていない場合には、規格で規定されているプレーヤ組み込みの動作（デフォルトのイベントハンドラ）を実行するか、或いは何も実行されずそのイベントは無視されることになる。何も処理を行う必要がないときには、積極的にイベントを無視することになる。その際は、後述するイベントリスナ登録を行わないか、イベントに対応したプログラムを記述しないようにすることで、イベントを無視することができる。
【００７５】
このように、不定期なイベントが発生し、イベント発生をきっかけに用意しておいたプログラムが実行されるモデルを、イベントドリブンモデルという。
【００７６】
１−３ａ．イベントの分類
ＢＤ−ＲＯＭ仮想プレーヤモデルにおけるイベントは、（１）再生中のコンテンツから発せられるイベント、（２）ユーザからの割り込みによるイベント、（３）プレーヤ状態の変化によるイベント、の３種類に大別することができる。
【００７７】
（１）の、再生中のコンテンツから発せられるイベントは、例えばプレイリストを再生中に、マークで指し示された時刻に来ると発生するマーク検出の割り込みイベントである。このイベント発生を契機として、グラフィックスの表示や消去を行う。この種類のイベントは、予め設定された割り込みで、再生の度に同じタイミングで発生する点が特徴である。
【００７８】
（２）の、 ユーザからの割り込みによるイベントは、主として、プレーヤを操作するリモートコントロールコマンダに対するキー入力を想定している。この種類のイベントは、ユーザが何時キー入力をするか分からないため、事前に割り込みのタイミングを知ることができない。
【００７９】
（３）の、プレーヤの状態の変化によるイベントは、プレーヤが停止状態から再生状態に変化したときや、再生中のストリームが変更されたときなど、プレーヤの状態遷移を表すイベントである。また、プログラム中でタイマーを設定した場合は、ある時刻になるとタイマー割り込みのイベントが発生する。プレーヤの状態変化は、上述した（１）再生中のコンテンツから発せられるイベントや、（２） ユーザからの割り込みによるイベントにより引き起こされるイベントでもあることも多い。
【００８０】
第１４図Ａ、第１４図Ｂおよび第１４図Ｃは、ＢＤ−ＲＯＭのオブジェクトBDBasicPlayerで生成される一例のイベント定義を一覧して示す。オブジェクトBDBasicPlayerは、クラスBDBasicPlayerにより生成されるオブジェクトである。
【００８１】
先ず、（１）の、再生中のコンテンツから発せられるイベントについて説明する。第１４図Ａ、第１４図Ｂおよび第１４図Ｃにおいて、イベントMarkEncounteredEventは、再生中にマークを検出した際に発生される。このイベントは、例えばグラフィクス画面を表示する際に利用される。イベントValidPeriodStartedEventは、ユーザ入力の選択有効期間が開始した際に発生される。イベントValidPeriodEndedEventは、ユーザ入力の有効期間が終了した際に発生される。このイベントは、例えばリンクの強制実行の時に利用される。イベントPlayRepeatedEventは、繰り返し再生区間の先頭を検出した際に発生される。イベントVideoStreamChangedEventは、再生するビデオストリームが変わった際に発生される。イベントAudioStreamChangedEventは、再生するオーディオストリームが変わった際に発生される。イベントSubpictureStreamChangedEventは、再生するサブピクチャストリームが変わった際に発生される。イベントStreamDisplayStatusChangedEventは、ストリームの表示／非表示状態が変わった際に発生される。イベントPlayListStartedEventは、プレイリストの先頭を検出した際に発生される。イベントPlayListEndedEventは、プレイリストの終わりを検出した際に発生される。イベントPlayItemStartedEventは、プレイアイテムの先頭を検出した際に発生される。イベントPlayItemEndedEventは、プレイアイテムの終わりを検出した際に発生される。
【００８２】
次に、（２）の、ユーザからの割り込みにより発生されるイベントについて説明する。イベントRmKeyEventは、リモートコントロールコマンダのキーが押された際に発生される。どのキーが押されたかは、対応するイベントリスナ（後述する）内で判定する。
【００８３】
次に、（３）の、プレーヤの状態の変化により発生されるイベントについて説明する。イベントPlayStartedEventは、プレーヤが再生を開始した際に発生される。イベントPlayStoppedEventは、プレーヤが再生が停止した際に発生される。イベントPlayStilledEventは、プレーヤが再生を一時停止した際に発生される。イベントStillReleasedEventは、プレーヤにおいて再生の一時停止が解除された際に発生される。イベントPlayPausedEventは、プレーヤでの再生がユーザにより一時停止（ポーズ）された際に発生される。イベントPauseReleasedEventは、ポーズが解除された際に発生される。イベントTimerFiredEventは、カウントダウンタイマが０になった際に発生される。または、カウントアップタイマが指定の値になった際に発生される。
【００８４】
１−３ｂ．イベントモデルについて
第１４図Ａ、第１４図Ｂおよび第１４図Ｃで説明した各イベントは、オブジェクトBDBasicPlayer内で発生するものとする。つまり、Ｊａｖａ言語におけるイベントソースは、オブジェクトBDBasicPlayerであると定める。イベントは、Ｊａｖａ言語の上では、イベントオブジェクトとして定義される。イベント発生時に実行するメソッドをリスナと呼ぶ。リスナが実行されるためには、イベントソースに対してイベントリスナ登録を行う必要がある。リスナがイベントソースに登録されていれば、オブジェクトBDBasicPlayerは、イベントをイベントリスナに送信する。イベントを受信したオブジェクトは、オブジェクト内に用意したメソッドを実行する。
【００８５】
第１５図を用いて、リスナおよびイベントについて説明する。オブジェクト２１１、２１１、・・・は、イベントを受信しリスナを実行させるリスナインターフェイスを実装している。オブジェクト２１１は、受信したいイベントに対応するリスナを、オブジェクトBDBasicPlayer２１０に対して登録する（ステップＳ１０）。あるイベントに対応するリスナをオブジェクトBDBasicPlayer２１０に対して登録することを、イベントリスナ登録と称する。オブジェクトBDBasicPlayer２１０に対して、複数のオブジェクト２１１、２１１、・・・からイベントリスナ登録を行うことができきる。
【００８６】
リスナインターフェイスを実装したオブジェクトとは、イベント発生時に実行するメソッドを実装したオブジェクトである。第１５図の例では、あるイベント発生時に実行されるメソッドであるdoAction()が、オブジェクト２１１に実装されている。オブジェクトBDBasicPlayer２１０内でイベントが発生（ステップＳ１１）し、このイベントがオブジェクトBDBasicPlayer２１０に対してイベントリスナ登録されたイベントであれば、当該イベントリスナ登録を行ったオブジェクト２１１に対して、当該イベントが送信される（ステップＳ１２）。イベントを受信したオブジェクト２１１は、メソッドdoAction()を実行する（ステップＳ１３）
第１６図Ａおよび第１６図Ｂは、イベントリスナ登録に関する一例のメソッドを一覧して示す。メソッドaddContentsListener(ContentsListener l)で、オブジェクトBDBasicPlayerからイベントContentsEventを受け取るために、指定されたリスナをオブジェクトBDBasicPlayerに登録する。登録されたリスナは、配列ContentsListener()に追加される。イベントContentsEventは、第１４図Ａ、第１４図Ｂおよび第１４図Ｃを用いて説明した、（１）の、再生中のコンテンツから発せられるイベントの総称である。メソッドaddRmtKeyListener(RmtKeyListener l)で、オブジェクトBDBasicPlayerからイベントRmtKeyEvent（第１４図Ａ、第１４図Ｂおよび第１４図Ｃを用いて説明した、（２）の、ユーザからの割り込みにより発生されるイベント）を受け取るために、指定されたリスナを登録する。登録されたリスナは、配列RmtkeyListener()に追加される。メソッドaddPlayerStatusListener(PlayerStatusListener l)で、オブジェクトBDBasicPlayerからイベントPlayerStatusEventを受け取るために、指定されたリスナを登録する。登録されたリスナは、配列PlayerStatusListener()に追加される。イベントPlayerStatusEventは、第１４図Ａ、第１４図Ｂおよび第１４図Ｃを用いて説明した、（３）の、プレーヤの状態の変化により発生されるイベントの総称である。
【００８７】
メソッドremoveContentsListener(ContentsListener l)で、オブジェクトBDBasicPlayerからイベントContentsEventを受け取らないように、指定されたリスナを削除する。メソッドremoveRmtKeyListener(RmtKeyListener l)で、オブジェクトBDBasicPlayerからイベントRmtKeyEventを受け取らないように、指定されたリスナを削除する。メソッドremovePlayerStatusListener(PlayerStatusListener l)で、オブジェクトBDBasicPlayerからイベントPlayerStatusEventを受け取らないように、指定されたリスナを削除する。
【００８８】
このように、"add"で始まるメソッドを実行することで、イベントリスナ登録が行われる。イベントリスナ登録は、目的とするイベントが発生する前に行う。イベントを受け取る必要がなくなった時には、"remove"で始まるメソッドを実行することで、イベント送信を停止させることができる。
【００８９】
第１６図Ａおよび第１６図Ｂにおいて、メソッドgetContentsListeners()で、オブジェクトBDBasicPlayerに登録されている全てのContentsListenerの配列を返す。メソッドgetRmtkeyListeners()で、オブジェクトBDBasicPlayerに登録されている全てのRmtkeyListenerの配列を返す。メソッドgetPlayerStatusListeners()で、オブジェクトBDBasicPlayerに登録されている全てのPlayerStatusListenerの配列を返す。
【００９０】
イベントリスナ登録を用いたプログラムの作成について説明する。ここでは、プレイリストを再生中、あるシーンになったときにボタンを表示させる動作を行わせるプログラムを作成する例である。プレイリストを再生中に、特定のシーンに入ったことを知るには、マーク機能を利用すればよい。マークは、プレイリストの任意の時刻に設定することが可能な頭出し点を設ける機能である。マークが設定された時刻に再生がさしかかると、第１４図Ａ、第１４図Ｂおよび第１４図Ｃを用いて説明したイベントMarkEncounteredEventが発生する。このイベントMarkEncounteredEventの発生をきっかけとしてボタンが表示されるようなリスナインターフェイスを実装したボタンオブジェクトを作成すればよい。すなわち、ボタンのオブジェクトには、オブジェクトBDBasicPlayerにイベントリスナ登録をし、イベントMarkEncounteredEventを受け取った際に表示を開始するようなプログラムを実装しておけばよい。
【００９１】
より具体的には、第１７図に一例が示されるように、先ず、プレイリスト上のどのシーンでボタンを表示させるかを決め（ステップＳ２０）、プレイリスト上のボタンを表示させる時刻に、マークを設定する（ステップＳ２１）。次に、表示させるボタンのオブジェクトに、ステップＳ２１で設定されたマークに対応するイベントリスナ登録を行うメソッドを、プログラム中に記述する（ステップＳ２２）。すなわち、このステップＳ２２では、第１５図で説明したステップＳ１０の動作を行わせる記述がなされる。そして、イベント発生時に実行させる処理をボタンオブジェクトに記述し、ボタンオブジェクトに対して、マーク発生イベントに対応するリスナインターフェイスを実装する（ステップＳ２３）。すなわち、このステップＳ２３では、第１５図で説明したステップＳ１３の内容が記述される。これらのプログラムは、Ｊａｖａ言語で以て記述される。
【００９２】
第１８図は、第１７図のようなプログラミングにより規定された動作を、再生側が実装する際の一例の処理を示す。オブジェクトBDBasicPlayerにより、プレイリストの再生が開始される（ステップＳ３０）。オブジェクトBDBasicPlayerは、プレイリストの再生中に、プレイリスト中に設けられたマークを検出したものとする（ステップＳ３１）。オブジェクトBDBasicPlayerは、検出されたマークに対応するイベントリスナが登録されているか否かを調べる（ステップＳ３２）。すなわち、ステップＳ３２では、第１５図を用いて説明した、ステップＳ１０の処理が行われているか否かが調べられる。若し、対応するイベントリスナが登録されていないと判断されれば、処理はステップＳ３６に移行し、オブジェクトBDBasicPlayerは、イベント送信を行わない。
【００９３】
一方、ステップＳ３２で、マークに対応するイベントリスナが登録されていると判断されれば、処理はステップＳ３３に移行する。ステップＳ３３では、オブジェクトBDBasicPlayerは、イベントリスナを登録したオブジェクトに対してイベントMarkEncounteredEventを送信する。これは、第１５図を用いて説明した、ステップＳ１２の処理である。このイベントMarkEncounteredEventを受けたオブジェクトは、イベントMarkEncounteredEventの発生時に実行するメソッドの実行を開始する（ステップＳ３４）。すなわち、第１５図を用いて説明した、ステップＳ１３のメソッドdoAction()が実行される。この例では、このメソッドdoAction()は、ボタンを画面上に表示する処理が記述されている。この記述に従い、画面上にボタンが表示される（ステップＳ３５）。
【００９４】
背景技術において第２図Ａおよび第２図Ｂを用いて既に説明したように、従来のＤＶＤビデオでは、ボタンの情報がＡＶストリームに多重化されているため、ボタンの表示開始時刻を変更するためには、ＡＶストリームの再多重化を行う必要があった。
【００９５】
これに対してこの発明の実施の第１の形態による、ＢＤ−ＲＯＭ仮想プレーヤモデルでは、マークの時間軸上の設定位置を変えるだけで、ボタンの表示開始時刻を変更することができる。この発明の実施の第１の形態では、第１９図Ａ、第１９図Ｂおよび第１９図Ｃに概略的に示されるように、クリップＡＶストリームファイル（第１９図Ａ）、マークデータが格納されるファイル（第１９図Ｂ）およびボタンを構成するデータが格納されるファイル（第１９図Ｃ）は、互いに独立的な構成となっている（ファイル構成の詳細は、後述する）。なお、クリップＡＶストリームファイルは、ビデオパックおよびオーディオパックが多重化されたファイルである。
【００９６】
このように、マークの情報は、クリップＡＶストリームとは別のデータベースファイルに格納される。そのため、第１９図Ａ、第１９図Ｂおよび第１９図Ｃに示されるように、当初、表示開始時刻が時刻ｐｔｓ１とされているボタン画像を、時刻ｐｔｓ２から表示させようとする場合でも、例えばデータベースから読み込まれたマーク情報について、時刻ｐｔｓ１を時刻ｐｔｓ２に書き換えるだけでよく、マークの位置を変更しても、クリップＡＶストリームの再多重化を行う必要が無い。
【００９７】
また、この実施の第１の形態では、ボタンを構成するデータも、クリップＡＶストリームとは別のファイルに格納される。そのため、ボタンが選択された際の処理の記述についても、クリップＡＶストリームファイルとは独立して存在するボタンオブジェクトのメソッドを変更するだけでよい。既に説明したように、従来のＤＶＤビデオでは、ボタン選択時の処理を行うボタンコマンドがＡＶストリームに多重化されていたため、ボタンが選択された際の処理の変更は、容易には実現できなかった。
【００９８】
ＢＤ−ＲＯＭのフルプロファイルにおいては、以上のようなＢＤ−ＲＯＭ仮想プレーヤモデルを構築することにより、従来のＤＶＤビデオビデオと比較して、オーサリングの柔軟性、容易性の向上を実現することができる。
【００９９】
上述では、ＢＤ−ＲＯＭ仮想プレーヤモデルを、オブジェクト指向的なイベントリスナのモデルに基づき構築した。ＢＤ−ＲＯＭ仮想プレーヤモデルは、この例に限らず、より簡便な、イベントドリブンモデルで構築することも可能である。
【０１００】
第２０図を用いて、イベントドリブンモデルによるＢＤ−ＲＯＭ仮想プレーヤモデルについて説明する。オブジェクトBDBasicPlayerで発生するイベントは、第１５図を用いて説明したオブジェクト指向的なモデルと同一である。このイベントドリブンモデルの場合は、イベント発生時に呼び出されるメソッドが、オブジェクトBDBasicPlayer内に定義されたメソッドprocessEvent()だけとする。すなわち、このモデルでは、どのイベントが呼び出されても同じメソッドが呼び出される。そのため、イベントの種類によって処理を変えたい場合には、どのイベントが発生したかをメソッドprocessEvent()の中で判定する必要がある。
【０１０１】
このモデルでは、イベント毎にイベントリスナ登録を行う必要がない。そのため、簡易な構成のモデルを構築できる。しかしながら、イベント発生の度にメソッドprocessEvent()が呼び出されるため、効率が悪い。また、処理するメソッドprocessEvent()が固定的にオブジェクトBDBasicPlayer内に定義されているため、別のオブジェクト内で新しい処理ルーチンを定義して実行するといった拡張性に乏しい。そのため、拡張性を重視するこの発明の実施の第１の形態には、第１５図を用いて説明したオブジェクト指向的なモデルでＢＤ−ＲＯＭ仮想プレーヤモデルを構築するのが好ましい。
【０１０２】
１−４．ユーザ入力について
第２１図Ａ、第２１図Ｂ、第２１図Ｃおよび第２１図Ｄは、ＢＤ−ＲＯＭ仮想プレーヤモデルが受け付けるユーザ入力コマンドの定義の一例を一覧して示す。このユーザ入力は、プレーヤを操作するためのリモートコントロールコマンダに設けられたキーからの入力や、プレーヤ装置から出力されるメニュー画面に応じた入力を想定している。ユーザ入力は、ＢＤ−ＲＯＭ仮想プレーヤモデルにとっては、キー入力イベントの一種である。
【０１０３】
コマンドtimeSearch(playlistNumber,Time)は、再生中のシナリオの、"Time"で指定される時刻からの再生を指示する。コマンドplay(playlistNumber,chapterNumber)は、指定のシナリオの、"chapterNumber"で指定されるチャプタからの再生を指示する。コマンドstop()は、再生の停止を指示する。コマンドprev()は、再生中のチャプタの１つ前のチャプタの先頭からの再生開始を指示する。コマンドtop()は、再生中のチャプタの先頭からの再生開始を指示する。コマンドnext()は、再生中のチャプタの次のチャプタの先頭からの再生開始を指示する。コマンドforwardScan(speed)は、"speed"で指定された速度での順方向再生を指示し、コマンドbackwardScan(speed)は、"speed"で指定された速度での逆方向再生を指示する。"speed"は、０．１〜３６０の範囲で値を指定できる。
【０１０４】
コマンドmoveCursor(direction,[level])は、カーソルの上下左右の移動を指示する。"direction"は、"upper"、"lower"、"left"または"right"の何れかの値であって、それぞれカーソルの上、下、左、右方向への移動を指示する。また、"level"は、"０"〜"２５５"の範囲で値を指定できる。"level"オプションは、通常は用いないか、値が"０"とされる。"level"の値として中間値（"１"〜"２５５"）を使用することで、アナログジョイスティックなどを表現する。
【０１０５】
コマンドclick(buttonNumber)は、画面上のボタンのクリックを指示する。コマンドfocus(buttonNumber)は、画面上のボタンにフォーカスを当てる旨を指示する。
【０１０６】
コマンドstillOff()は、プレーヤによって一時停止された再生の再開を指示する。コマンドstillOff()は、コマンドpauseOffと統合できる。コマンドpauseOn()は、一時停止を指示する。このコマンドpauseOn()は、シナリオ再生時にのみ動作できる。コマンドpauseOff()は、一時停止の解除を指示する。
【０１０７】
コマンドLanguageSelect(languageCode)は、メニューの表示言語を指定する。コマンドStreamChange(StreamNumber)は、再生するストリームの変更を指示する。コマンドsetEnabled(boolean)は、ストリームの表示／非表示を指定する。コマンドangleChange(angleNumber)は、表示アングルの変更を指示する。コマンドparentalCountrySelect(countryCode)は、パレンタルレベル用のカントリーコードを設定する。コマンドvideoPresentationModeChange(mode)は、ビデオの表示形式を指定する。"mode"は、"Wide"（ワイド）、"LB"（レターボックス）または"PanScan"（パンスキャン）の何れかの値を取る。
【０１０８】
第２２図は、リモートコントロールコマンダからのキー入力イベントを表すクラスRmtKeyEventの例を示す。パラメータ"source"は、イベントの発生元のオブジェクトであって、オブジェクトBDBasicPlayerを指す。パラメータ"id"は、イベントのタイプを表す整数である。パラメータ"when"は、イベントが発生した時刻を指定するlong形式の整数である。パラメータ"mtKeyCode"は、入力仮想キーに対応する整数型コードまたは"VK_UNDEFINED"とされる。"VK_UNDEFINED"については、後述する。
【０１０９】
第３図Ａおよび第３図Ｂを用いて既に説明したように、リモートコントロールコマンダのキーによるユーザ入力は、先ずハードウェアが受け取り、オブジェクトBDBasicPlayerにも伝えられる。このユーザ入力に応じて、オブジェクトBDBasicPlayerでは、クラスRmtKeyEventによりオブジェクトRmtKeyEventが発生し、このオブジェクトRmtKeyEventに対応したイベントリスナを登録しているオブジェクトに対して、ユーザ入力によるコマンドが通知される。
【０１１０】
第２３図は、オブジェクトRmtKeyEventが有する一例のメソッドを一覧して示す。メソッドgetRmtKeyCodeは、このイベントが発生したキーのキーコードを返す。メソッドsetRmtKeyCodeは、このイベントが発生するキーのキーコードを設定する。例えば、メソッドgetRmtKeyCodeを実行することで、どのキーが押されたことによってオブジェクトRmtKeyEventが発生したかを知ることができる。
【０１１１】
第２４図、ならびに、第２５図Ａおよび第２５図Ｂは、第２３図で説明したメソッドgetRmtKeyCodeによって得られる一例のキーを一覧して示す。第２４図、ならびに、第２５図Ａおよび第２５図Ｂに示される「VK」で始まる各キーは、オブジェクトBDBasicPlayer上の仮想的なキーである。キーVK_POWERは、電源キーに対応する機能を提供する。キーVK_POWER_ONは、電源ＯＮキーに対応する機能を提供する。キーVK_POWER_OFFは、電源ＯＦＦキーに対応する機能を提供する。キーVK_MENUは、メニューを表示させるメニューキーに対応する機能を提供する。キーVK_ENTERは、「決定」を指示する決定キーに対応する機能を提供する。キーVK_RETURNは、処理のステップを一つ戻す戻るキーに対応する機能を提供する。
【０１１２】
キーVK_PLAYは、再生を指示する再生キーに対応する機能を提供する。キーVK_STOPは、再生の停止を指示する停止キーに対応する機能を提供する。キーVK_PAUSEは、再生の一時停止を指示する一時停止キーに対応する機能を提供する。キーVK_FAST_FORWARDは、早送り再生を指示する早送りキーに対応する機能を提供する。キーVK_FAST_REVERSEは、早戻し再生を指示する早戻しキーに対応する機能を提供する。キーVK_SLOW_FORWARDは、順方向のスロー再生を指示するスロー（順方向）キーに対応する機能を提供する。キーVK_SLOW_REVERSEは、逆方向のスロー再生を指示するスロー（逆方向）キーに対応する機能を提供する。キーVK_STEP_FORWARDは、順方向のコマ送り再生を指示するコマ送り（順方向）キーに対応する機能を提供する。キーVK_STEP_REVERSEは、逆方向のコマ送り再生を指示するコマ送り（逆方向）キーに対応する機能を提供する。
【０１１３】
キーVK_NEXTは、「次」を意味する値を入力する次指定キーに対応する機能を提供する。キーVK_PREVIOUSは、「前」を意味する値を入力する前指定キーに対応する機能を提供する。例えば、キーVK_NEXTおよびキーVK_PREVIOUSを用いて、前後のチャプタへの移動を指示することができる。
【０１１４】
キーVK_UPは、「上」を意味する値を入力する上方向指定キーに対応する機能を提供する。キーVK_DOWNは、「下」を意味する値を入力する下方向指定キーに対応する機能を提供する。キーVK_RIGHTは、「右」を意味する値を入力する右方向指定キーに対応する機能を提供する。キーVK_LEFTは、「左」を意味する値を入力する左方向指定キーに対応する機能を提供する。キーVK_UP_RIGHTは、「右上」を意味する値を入力する右上方向指定キーに対応する機能を提供する。キーVK_UP_LEFTは、「左上」を意味する値を入力する左上方向指定キーに対応する機能を提供する。キーVK_DOWN_RIGHTは、「右下」を意味する値を入力する右下方向指定キーに対応する機能を提供する。キーVK_DOWN_LEFTは、「左下」を意味する値を入力する左下方向指定キーに対応する機能を提供する。これらの方向キーを用いることで、例えば画面上のカーソル表示の移動を指示することができる。
【０１１５】
キーVK_ANGLEは、マルチアングルのビデオに対するアングル切り替えを指示するアングル切り替えキーに対応する機能を提供する。キーVK_PRESENTATION_GRAPHICSは、英語字幕、日本語字幕、字幕表示／非表示などを切り替える字幕切り替えキーに対応する機能を提供する。キーVK_AUDIOは、サラウンドやバイリンガルなどオーディオ設定を切り替えるオーディオ切り替えに対応する機能を提供する。キーVK_VIDEO_ASPECTは、ビデオのアスペクト比切り替えを指示するアスペクト切り替えキーに対応する機能を提供する。キーVK_COLORED_KEY_1は、色つきファンクションキー１、キーVK_COLORED_KEY_2は、色つきファンクションキー２、キーVK_COLORED_KEY_3は、色つきファンクションキー３、キーVK_COLORED_KEY_4は、色つきファンクションキー４、キーVK_COLORED_KEY_5は、色つきファンクションキー５、キーVK_COLORED_KEY_6は、色つきファンクションキー６にそれぞれ対応する機能を提供する。キーVK_UNDEFINEDは、未定義キーである。
【０１１６】
第２４図、ならびに、第２５図Ａおよび第２５図Ｂに一覧したキーは、実際のリモートコントロールコマンダの物理キーと必ずしも一致しない。機器によっては、一つの物理キーに複数の機能を持たせることがある。また画面上にリモコンを表す画像を表示して、表示された画面上のキーをユーザに選択させることもある。そのため、第２４図、ならびに、第２５図Ａおよび第２５図Ｂに示すキーは、機能を抽象化した仮想的なキーである。オブジェクトBDBasicPlayerへのユーザ入力を、このような仮想キーで表現することにより、機器に依存しないユーザ入力を定義することができる。
【０１１７】
第２６図は、ユーザ入力イベントをきっかけとして、用意されたプログラムが実行される一例の手順を示す。第２６図は、通常再生中に、ユーザにより"next"キーが押されたときに、このキー入力に対応して、次のチャプタにジャンプして再生を開始すると同時に、用意されたメッセージを画面上に表示するプログラムの例である。
【０１１８】
"next"キーは、次のチャプタに移動して再生することをプレーヤに対して指示するためのキーであって、例えばリモートコントロールコマンダ上のキーである。第２６図のフローチャートは、ユーザが再生中にこの"next"キーを押すことで開始される（ステップＳ４１）。"next"キーが押されると、オブジェクトRmeKeyEvent発生され（ステップＳ４２）、次のチャプタマークを探すため、チャプタマークにデータベースが検索される（ステップＳ４３）。検索結果に基づき次のチャプタマークが存在するか否かが判断され（ステップＳ４４）、存在しなければ、一連の処理が終了され、通常再生が継続される。ステップＳ４４で、次のチャプタマークが存在すると判断されれば、処理はステップＳ４５に移行する。
【０１１９】
ステップＳ４５では、オブジェクトBDBasicPlayerは、"next"キーに応答して現在再生中のチャプタの再生が中止される（ステップＳ４５）。プレーヤの再生が中止されると、イベントPlayStoppedEventが発生される（ステップＳ４６）。オブジェクトBDBasicPlayerは、ステップＳ４３およびステップＳ４４で取得された次のチャプタマークが指し示す、クリップＡＶストリームファイル内のバイト位置を、クリップ情報ファイルの特徴点情報から取得する。取得されたファイル内バイト位置にアクセスし、その位置からストリームの読み込みを開始して、再生を開始する（ステップＳ４７）。
【０１２０】
ステップＳ４８以下は、チャプタが切り替わったことを知らせるメッセージを画面上に表示する一例の手順である。チャプタが切り替わった位置でメッセージを表示するためには、イベントMarkEncounteredEventに対応するイベントリスナとして、メッセージ表示のメソッドを実装しておけばよい。ストリームの再生が開始されると、イベントPlayStartedEventが発生される。それと共に、チャプタマークに対応してイベントMarkEncounteredEventが発生される（ステップＳ４８）。
【０１２１】
イベントMarkEncounteredEventの発生に伴い、ステップＳ４９で、イベントMarkEncounteredEventに対応したリスナの実行が開始される。このリスナでは、先ず、イベントMarkEncounteredEventにより検出されたマークの種別が取得され（ステップＳ５０）、このマークがチャプタマークであるか否かが判断される（ステップＳ５１）。若し、チャプタマークでないと判断されれば、処理はステップＳ５３に移行され、当該リスナの実行が終了される。ステップＳ５１で、検出されたマークがチャプタマークであると判断されれば、処理はステップＳ５２に移行され、チャプタ先頭であることを示すメッセージを表示する。
【０１２２】
この例では、ユーザがリモートコントロールコマンダのキーを押したことにより一つのイベントRmtKeyEventが発生し、このイベントRmtKeyEventの発生をきっかけにした一連の状態遷移によって、イベントPlayStoppedEvent、イベントPlayStartedEventおよびイベントMarkEncounteredEventといった、複数のイベントが引き起こされる。
【０１２３】
このように、この発明の実施の第１の形態によるＢＤ−ＲＯＭ仮想プレーヤモデルでは、ユーザ入力イベントは、プレーヤの状態を変化させ、新たなイベントを発生させる契機ともなり、新たに発生したイベントを利用してさまざまな処理を行わせることができる。
【０１２４】
この発明の実施の第１の形態では、上述のようにしてＢＤ−ＲＯＭ仮想プレーヤモデルを定義することで、ＤＶＤビデオにはなかった様々なメリットを得ることができる。例えば、この発明の実施の第１の形態によれば、従来のＤＶＤビデオにおける幾つかの機能を、一つのモデルで実現できる。
【０１２５】
第１の例として、字幕の強制出画機能およびＵＯＰ(User Operation)禁止機能が挙げられる。字幕の強制出画機能は、ユーザが字幕表示をオフに設定していても、特定の字幕を特定のシーンで強制的に表示させる機能である。また、ＵＯＰ禁止機能は、ユーザ入力を禁止する機能である。ＤＶＤビデオでは、これらの機能を実現するために、それぞれ専用のデータ構造と動作モデルが定義されていた。
【０１２６】
この発明の実施の第１の形態によるＢＤ−ＲＯＭ仮想プレーヤモデルでは、字幕の強制出画機能に関しては、字幕を強制的に出画させたいシーン（時刻）にマークを打っておき、そのマークに対応したイベントリスナ登録を行うと共に、字幕表示のオン／オフにかかわらず画面上に字幕を出画する処理をリスナとして用意しておく。このようにすることで、通常のマークを処理するモデルで、字幕の強制出画機能を同一の処理として実現することができる。
【０１２７】
また、ＵＯＰ禁止機能については、リモートコントロールコマンダのキー入力イベントに対するイベントリスナ登録を行わなければ、キー入力によるイベントが発生しても何も処理が行われないので、ユーザ入力が無視され、ＵＯＰが禁止される。
【０１２８】
このように、この発明の実施の第１の形態では、一つのイベントモデルでＤＶＤの機能を実現できるので、ディスク制作側の負担が軽くなるというメリットがある。
【０１２９】
また例えば、ＤＶＤビデオでは、リモートコントロールコマンダの各キーに対する動作が予め決まっていた。例えば、サブメニューキーを押すと、オーディオ、字幕、アングルの設定を変更するためのサブメニュー画面が表示されることが、サブメニューキーの動作として決められていた。しかしながら、サブメニューはＤＶＤビデオにおいて必須のデータではないので、サブメニューが無いディスクも存在する。この場合、サブメニューキーを押しても、何も反応がないことになる。
【０１３０】
一方、この発明の実施の第１の形態のＢＤ−ＲＯＭ仮想プレーヤモデルでは、第２１図Ａ、第２１図Ｂ、第２１図Ｃおよび第２１図Ｄ、第２２図、第２３図、第２４図、ならびに、第２５図Ａおよび第２５図Ｂを用いて説明したように、キーが押されたときにどのような処理を行うかは、ディスク制作側で決めることができる。そのため、サブメニューを用意しない場合でもメッセージを表示するようにプログラムすることで、サブメニューキーが押された場合には、メッセージを表示してサブメニューが無いことをユーザに伝えることが可能となる。
【０１３１】
このように、この発明の実施の第１の形態では、ディスク製作の際の自由度が上がり、ユーザにとって操作しやすいディスクを製作することができるようになるというメリットがある。
【０１３２】
さらに、この発明の実施の第１の形態では、ＢＤ−ＲＯＭ仮想プレーヤモデルに対応するＪａｖａクラスを定義し、Ｊａｖａプログラムによりプレイリストの再生制御を行うようにしている。Ｊａｖａプログラムを用いることにより、マルチスレッドプログラムが実現でき、ネットワークアクセスやユーザ入力の応答待ちによるタイムラグに容易に対処可能である。また、Ｊａｖａプログラムを用いることにより、コマンド先読みによる分岐予測や投機実行なども、容易に実現可能であり、高速処理が可能となる。
【０１３３】
１−５．ファイルの管理構造について
次に、ＢＤ−ＲＯＭのフルプロファイルに適用可能なファイルの管理構造について、第２７図を用いて説明する。ファイルは、ディレクトリ構造により、階層的に管理される。記録媒体上には、必ず１つのディレクトリ（第２７図の例ではルート(root)ディレクトリ）が作成される。このディレクトリの下が、１つの記録再生システムで管理される範囲とする。
【０１３４】
ルートディレクトリの下に、ディレクトリＢＤＭＶが置かれる。なお、図示はされていないが、ディレクトリＢＤＭＶは、ルートディレクトリの下に複数を置くことができる。
【０１３５】
ディレクトリＢＤＭＶの下には、２つのファイルすなわちファイル「scenario.hdmv」およびファイル「entrylist.data」が置かれると共に、ディレクトリ「ＰＬＡＹＬＩＳＴ」、ディレクトリ「ＣＬＩＰＩＮＦ」、ディレクトリ「ＳＴＲＥＡＭ」といった複数のディレクトリが置かれる。
【０１３６】
ファイル「scenario.hdmv」は、シナリオが格納されるシナリオファイルである。シナリオは、複数のプレイリストが並べられた構造であって、プレイリストの再生順序などを制御する。シナリオをより細分化した単位でユーザに見せるために、チャプタを設けることができる。設けられる。なお、第３図Ａおよび第３図Ｂを用いて説明した、ＢＤ−ＲＯＭのＨＤムービーモードにおけるムービーオブジェクトは、ファイル「scenario.hdmv」に格納される。
【０１３７】
ファイル「entrylist.data」は、シナリオ内の頭出し点（タイトルエントリ）、メニューを構成するプレイリストやプレイリスト群へのエントリポイントなどのメニューに関する情報が格納される。なお、第３図Ａおよび第３図Ｂを用いて説明した、ＢＤ−ＲＯＭのＨＤムービーモードにおけるインデックステーブルは、ファイル「entrylist.data」に格納される。
【０１３８】
ディレクトリ「ＰＬＡＹＬＩＳＴ」は、プレイリストが格納される。一つのプレイリストは、一つのファイル「*****.mpls」に格納される。クリップＡＶストリーム上のマーク位置を表す情報は、当該クリップＡＶストリームの再生範囲を指定したプレイリストファイル「*****.mpls」に格納される。
【０１３９】
ディレクトリ「ＣＬＩＰＩＮＦ」は、クリップインフォメーションファイル「#####.clpi」が格納される。ディレクトリ「ＳＴＲＥＡＭ」は、クリップＡＶストリームファイル「%%%%%.m2ts」が格納される。クリップインフォメーションファイルと、対応するクリップＡＶストリームファイルに対して、互いに関連したファイル名を付与することで、これらのファイルの関連付けが容易となる。例えば、クリップインフォメーションファイルと、対応するクリップＡＶストリームファイルにおいて、拡張子より前の部分「#####」と「%%%%%」とを同一とする。
【０１４０】
なお、図示しないが、Ｊａｖａプログラムを構成するＪａｖａクラスファイルは、例えばディレクトリＢＤＭＶの下に設けられた所定のディレクトリに格納される。これに限らず、例えば、ルートディレクトリの下に、ディレクトリＢＤＭＶと同階層に設けられたディレクトリに格納するようにしてもよい。
【０１４１】
１−６．デコーダモデルについて
次に、この発明の実施の第１の形態に適用可能なプレーヤデコーダ１００について説明する。第２８図Ａ、第２８図Ｂおよび第２８図Ｃは、この発明の実施の第１の形態に適用可能なプレーヤデコーダ１００の一例の構成を示す機能ブロック図である。このプレーヤデコーダ１００は、図示されないドライブ装置に装填されたディスクから再生されたデータを解釈し、コンテンツを構成するＡＶ(Audio/Video)ストリームを出力すると共に、出力されたＡＶストリームに対するユーザによるインタラクティブな操作を可能とする。
【０１４２】
なお、プレーヤデコーダ１００は、図示されないＣＰＵにより全体の動作が制御される。例えば、プレーヤデコーダ１００の各部におけるストリームやデータの流れは、ＣＰＵにより監視され、制御される。
【０１４３】
図示されないドライブ装置にディスクが装填されると、ＢＤ−ＲＯＭのＨＤムービーモードにおいては、先ず、プレイリストの再生順序を指定したファイル「scenario.hdmv」と、メニューやタイトルを構成するプレイリスト群の先頭プレイリストを指すファイル「entrylist.data」とが再生され、このファイル「scenario.hdmv」およびファイル「entrylist.data」の記述に基づき、必要な他のファイルが読み出され、ディスクに記録されたコンテンツが再生される。
【０１４４】
例えば、ファイル「scenario.hdmv」およびファイル「entrylist.data」の記述に基づき、ビデオプレーン１３４および第２ビデオプレーン１６０に表示するための動画データ、グラフィクスプレーンＡ１３２やグラフィクスプレーンＢ１３３、第２ビデオプレーン１６０に表示するための画像データ、プレイリストファイルなどがディスクから読み出される。フルプロファイルにおいては、プログラムを格納したファイルが読み出され、実行される。
【０１４５】
以下では、ディスクから読み出されるこれらのデータのうち、動画データ、サブピクチャ（字幕データ）や音声データといった、連続的に処理する必要があるストリームをリアルタイムストリームと称する。また、シナリオファイル、プレイリストファイル、スクリプトファイルおよびプログラムファイル、ならびに、一部の動画、静止画およびサウンドデータといった、連続的な処理を要求されない非リアルタイムなデータを、ストアオブジェクトと称する。ストアオブジェクトは、メモリ上などに蓄積、展開され、必要に応じて処理される。
【０１４６】
プレーヤデコーダ１００は、チャンネル（１）および（２）の２系統の入力チャンネルを有し、入力チャンネル（１）の入力端１０１に、ストアオブジェクトが入力される。入力チャンネル（２）の入力端２０２に、リアルタイムストリームが入力される。入力端２０２に、ストアオブジェクトを入力することも可能である。この実施の第１および第２の形態では、入力端２０２に入力されるリアルタイムストリームおよび一部のストアオブジェクトは、例えばＭＰＥＧ２  ＴＳ(Moving Pictures Experts Group 2  Transport Stream)である。
【０１４７】
なお、入力端２０２に入力されるリアルタイムストリームは、ＭＰＥＧ２  ＴＳに限られない。パケット単位で伝送され、ビデオデータ、オーディオデータ、静止画像データなどを多重化可能であれば、他の形式のストリームを入力するようにしてもよい。このときには、後述するＰＩＤフィルタ１１０は、そのストリーム形式に適合したデマルチプレクサとして用いられ、ビデオデータ、オーディオデータ、静止画像データなどを分離する。
【０１４８】
また、例えば、ドライブ装置においてディスクの回転速度を２倍速などの高速回転としてディスクからの読み出し転送レートを上げ、時分割で動作させることにより、ディスクからの、チャンネル（１）および（２）の２系統の読み出しが実現可能である。
【０１４９】
先ず、入力チャンネル（１）の系統について説明する。入力端１０１に入力されたストアオブジェクトは、スイッチ回路１０２に入力される。ストアオブジェクトとしてＪａｖａファイルや、ＥＣＭＡ(European Computer Manufacturers Association)スクリプト、ＨＴＭＬ(Hyper Text Markup Language)ファイル（またはＸＨＴＭＬファイル）などによるプログラムコードが入力された場合、スイッチ回路１０２において出力端１０２Ａが選択され、入力されたプログラムコードがコードバッファ１０４に蓄えられる。
【０１５０】
一方、ストアオブジェクトとして画像データが入力された場合、スイッチ回路１０２において出力端１０２Ｂが選択され、入力された画像データがスイッチ回路１０３に入力される。入力端２０２に入力されたリアルタイムストリームに、グラフィクスプレーンＡ１３２やグラフィクスプレーンＢ１３３に表示するための画像データが含まれていない場合には、スイッチ回路１０３で入力端１０３Ａが選択され、スイッチ回路１０２から入力された画像データがコンテンツバッファ１０５に蓄えられる。
【０１５１】
同様にして、入力端２０２に入力されたリアルタイムストリームに、グラフィクスプレーンＡ１３２やグラフィクスプレーンＢ１３３に表示するための画像データが含まれている場合には、スイッチ回路１０３において入力端１０３Ｂが選択され、当該画像データがコンテンツバッファ１０５に蓄えられる。コードバッファ１０４およびコンテンツバッファ１０５に蓄えられたストアオブジェクトは、必要に応じて読み出され、マルチメディアエンジン１０６に供給される。
【０１５２】
コンテンツバッファ１０５に蓄えられたストアオブジェクトのうち画像データは、スイッチ回路１０７および１０８をそれぞれ介して、グラフィクスデコーダＡ１１６およびグラフィクスデコーダＢ１１７にも供給される。
【０１５３】
マルチメディアエンジン１０６は、ＸＭＬパーサ１０６Ａ、プログラム/スクリプトインタプリタ１０６Ｂおよびグラフィクスレンダラ１０６Ｃを含む。マルチメディアエンジン１０６は、さらに、サウンドプレーヤ１０６Ｄを有し、オーディオデータの扱いを可能としている。マルチメディアエンジン１０６は、独立的なハードウェアで構成してもよいし、上述した図示されないＣＰＵの、所定のプログラムに基づく処理で実現することも可能である。
【０１５４】
ＸＭＬパーサ１０６Ａは、ＸＭＬ(Extensible Markup Language)文書を解析する機能を有し、ＨＴＭＬ文書やＸＨＴＭＬ文書の解析も可能である。ＸＭＬパーサ１０６Ａで解釈されたＨＴＭＬ文書やＸＨＴＭＬ文書は、このプレーヤデコーダ１００で実行可能な形式に変換される。プログラム/スクリプトインタプリタ１０６Ｂは、Ｊａｖａ（登録商標）プログラムやＥＣＭＡスクリプト等を解析し、このプレーヤデコーダ１００で実行可能な形式に変換される。また、グラフィクスレンダラ１０６Ｃは、画像データを字幕プレーン１１およびグラフィクスプレーン１２に展開可能な形式にデコードする。
【０１５５】
マルチメディアエンジン１０６において、バッファ１０９をワークメモリとして、これらＸＭＬパーサ１０６Ａ、プログラム/スクリプトインタプリタ１０６Ｂおよびグラフィクスレンダラ１０６Ｃの処理が行われる。例えば、ＸＭＬパーサ１０６Ａおよびプログラム/スクリプトインタプリタ１０６Ｂにより、バッファ１０９のうちコードバッファ１０９Ａが用いられる。また、グラフィクスレンダラ１０６Ｃにより、バッファ１０９のうちグラフィクスバッファ１０９Ｄが用いられる。バッファ１０９は、上述のコードバッファ１０９Ａおよびグラフィクスバッファ１０９Ｄの他に、文字列の表示に用いるフォントデータが格納されるフォントバッファ１０９Ｂ、ＸＭＬパーサ１０６ＡでＨＴＭＬ文書を解析した結果を階層化された木構造で保持するためのツリーバッファ１０９Ｃ、サウンドプレーヤ１０６Ｄで用いるオーディオデータが格納されるサウンドバッファ１０９Ｅなどが含まれる。
【０１５６】
マルチメディアエンジン１０６では、必要に応じて、コードバッファ１０４に蓄えられたＪａｖａプログラムの読み出し、コンテンツバッファ１０５からの画像データの読み出しなどを行う。コードバッファ１０４およびコンテンツバッファ１０５に格納されたデータは、当該データが不要になるまで、コードバッファ１０４やコンテンツバッファ１０５に保持しておくことができる。したがって、これらコードバッファ１０４やコンテンツバッファ１０５に格納されたデータは、必要に応じて何度でも読み出して使うことができる。
【０１５７】
マルチメディアエンジン１０６では、上述の他にも、例えば、コードバッファ１０４に蓄えられたＥＣＭＡスクリプトを読み出し、実行することができる。また、読み出されたＥＣＭＡスクリプトの記述に基づき、必要に応じて、コードバッファ１０４から他のＥＣＭＡスクリプトやＨＴＭＬ文書（またはＸＨＴＭＬ文書）を読み出し実行することができる。
【０１５８】
さらに、マルチメディアエンジン１０６により、ユーザからの、リモートコントロールコマンダやポインティングデバイスなどによる入力が受け取られ、所定に処理される。ユーザ入力は、さらに、後述するグラフィクスデコーダＡ１１６、グラフィクスデコーダＢ１１７、オーディオデコーダ１１８、ＭＰＥＧビデオデコーダ１２０およびシステムデコーダ１２１にも供給される。
【０１５９】
グラフィクスレンダラ１０６Ｃで処理された画像データは、スイッチ回路１３０および１３１をそれぞれ介してグラフィクスプレーンＡ１３２およびグラフィクスプレーンＢ１３３に供給される。なお、この例では、グラフィクスプレーンＡ１３２およびグラフィクスプレーンＢ１３３に供給される画像データとして、ＰＮＧ形式、ランレングス形式、ＪＰＥＧ形式などが挙げられるが特に規定しない。これらの各プレーン１３２、１３３に画像データが供給されるタイミングは、マルチメディアエンジン１０６により制御される。
【０１６０】
マルチメディアエンジン１０６は、さらに、後述するプレゼンテーションプロセッサ１５５に対して、ビデオプレーン１３４、第２ビデオプレーン１６０、グラフィクスプレーンＡ１３２およびグラフィクスプレーンＢ１３３の切り換え、アルファ合成などを指示する制御信号を供給する。同様に、マルチメディアエンジン１０６は、後述するプレゼンテーションプロセッサ１５７に対して、オーディオストリーム出力を制御するような制御信号を供給する。
【０１６１】
マルチメディアエンジン１０６では、例えば、図示されないＲＯＭ(Read Only Memory)などに予め格納されたＪａｖａプログラムを読み込み、オブジェクトBDBasicPlayerをマルチメディアエンジン１０６上に構築する。また、マルチメディアエンジン１０６では、コードバッファ１０４に蓄えられたＪａｖａプログラムを読み出す。コードバッファ１０４から読み出されたＪａｖａプログラムにより構成されるオブジェクトからオブジェクトBDBasicPlayerに対して、必要に応じてイベントリスナ登録が行われる。
【０１６２】
第１５図を用いて説明したように、マルチメディアエンジン１０６上で、例えばユーザ入力に応じて、コードバッファ１０４から読み出されたＪａｖａプログラムによるオブジェクトに対して、オブジェクトBDBasicPlayerからイベント送信がなされ、当該オブジェクトにおいて、対応するメソッドが実行される。また、オブジェクトBDBasicPlayerは、プレーヤデコーダ１００の状態の変化を検出し、所定の変化が検出されたら、対応するイベントを発生させる。マルチメディアエンジン１０６は、このようにして発生されたイベントに応じたメソッドなどにより、図示されないドライブ装置や、このプレーヤデコーダ１００の各部を制御し、ディスクの再生制御を行うことになる。
【０１６３】
次に、入力チャンネル（２）の系統について説明する。入力端２０２にＭＰＥＧ２  ＴＳで入力されたリアルタイムストリームは、ＰＩＤフィルタ１１０に供給され、ＭＰＥＧ２  ＴＳのトランスポートパケットに格納されるＰＩＤ(Packet Identification)が抽出され、当該トランスポートパケットに格納されるストリームの属性が検出される。ＰＩＤフィルタ１１０では、このストリーム属性に基づき、入力されたリアルタイムストリームが、トランスポートパケット毎に対応する系統に振り分けられる。
【０１６４】
ＰＩＤに基づき、トランスポートパケットがストアオブジェクトに属する画像データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１Ａに一旦溜め込まれ、所定のタイミングで読み出されて入力端１０３Ｂが選択されたスイッチ回路１０３に入力され、スイッチ回路１０３を介してコンテンツバッファ１０５に格納される。
【０１６５】
ＰＩＤフィルタ１１０において、ＰＩＤに基づき、トランスポートパケットが字幕データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１ＢおよびバッファＢｎ１１２Ｂに一旦溜め込まれ、所定のタイミングで読み出されて入力端１０７Ｂが選択されたスイッチ回路１０７に入力され、スイッチ回路１０７を介してグラフィクスデコーダＡ１１６に供給される。
【０１６６】
グラフィクスデコーダＡ１１６では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された字幕データがデコードされて字幕などを表示するための画像データとされる。この画像データは、所定のタイミングでスイッチ回路１３０の入力端１３０Ｂに入力され、スイッチ回路１３０を介してグラフィクスプレーンＡ１３２に展開される。また、スイッチ回路１３１を介してグラフィクスプレーンＢ１３３にも展開させることが可能である。
【０１６７】
ＰＩＤフィルタ１１０において、ＰＩＤに基づき、トランスポートパケットがグラフィクスデータが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１ＣおよびバッファＢｎ１１２Ｃに一旦溜め込まれ、所定のタイミングで読み出されて入力端１０８Ｂが選択されたスイッチ回路１０８に入力され、スイッチ回路１０８を介してグラフィクスデコーダＢ１１７に供給される。
【０１６８】
グラフィクスデコーダＢ１１７では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納されたグラフィクスデータがデコードされ、グラフィクスデータとされる。この画像データは、所定のタイミングでスイッチ回路１３１の入力端１３１Ｂに入力され、スイッチ回路１３１を介してグラフィクスプレーンＢ１３３に展開される。また、スイッチ回路１３０を介してグラフィクスプレーンＡ１３２にも展開させることが可能である。
【０１６９】
なお、グラフィクスデコーダＡ１１６とグラフィクスデコーダＢ１１７には、機能的な違いはない。つまり、モデル上、独立して動作するグラフィクスデコーダが２系統あることを表している。すなわち、字幕データとグラフィクスデータとをそれぞれ独立にデコードできることを想定している。実装においては、１系統の高速なグラフィクスデコーダを時分割で使用し、仮想的に２系統のグラフィクスデコーダが存在しているとみなす方法もある。
【０１７０】
ＰＩＤフィルタ１１０において、ＰＩＤに基づき、トランスポートパケットがオーディオデータが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１ＤおよびバッファＢｎ１１２Ｄに一旦溜め込まれ、所定のタイミングで読み出されてオーディオデコーダ１１８に供給される。このトランスポートパケットに格納されるオーディオデータは、例えばＭＰＥＧに準拠した方式で圧縮符号化されている。
【０１７１】
オーディオデコーダ１１８は、例えばリニアＰＣＭ(Pulse Code Modulation)オーディオデコーダ１１９も有する。オーディオデコーダ１１８は、入力されたトランスポートストリームのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された圧縮符号化されたオーディオデータをリニアＰＣＭオーディオデータにデコードする。
【０１７２】
オーディオデコーダ１１８から出力されたリニアＰＣＭオーディオデータは、オーディオ用のプレゼンテーションプロセッサ１５７に入力され、マルチメディアエンジン１０６の制御に基づき所定の音響効果などが付加されて、出力端１５８に導出される。
【０１７３】
ＰＩＤフィルタ１１０において、ＰＩＤに基づき、トランスポートパケットが動画データが格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１Ｅ、バッファＭＢｎ１１３およびバッファＥＢｎ１１４に一旦溜め込まれ、所定のタイミングで読み出されてＭＰＥＧビデオデコーダ１２０に供給される。このトランスポートパケットに格納される動画データは、ＭＰＥＧ２方式により圧縮符号化されている。
【０１７４】
ＭＰＥＧビデオデコーダ１２０では、供給されたトランスポートパケットのヘッダ情報を除去すると共に、当該トランスポートパケットに格納された、ＭＰＥＧ２方式で圧縮符号化された動画データをベースバンドの動画データにデコードする。
【０１７５】
ＭＰＥＧデコーダ１２０から出力された動画データは、スイッチ回路１２４の入力端１２４Ａに入力される。スイッチ回路１２４において、ＭＰＥＧビデオデコーダ１２０からの動画データとマルチメディアエンジン１０６から出力された動画データが選択される。所定のタイミングで選択された動画データは、スイッチ１２３に入力される。スイッチ１２３では展開先のビデオプレーンが選択され、動画データは、ビデオプレーン１３４あるいは第２ビデオプレーン１６０に展開される。
【０１７６】
ＰＩＤフィルタ１１０において、ＰＩＤに基づき、トランスポートパケットがシステム情報が格納されているパケットであるとされれば、当該トランスポートパケットは、バッファＴＢｎ１１１ＦおよびＢｓｙｓ１１５を介してシステムデコーダ１２１に供給される。システムデコーダ１２１では、供給されたトランスポートパケットのヘッド情報が除去され、格納されているシステム情報が取り出される。システム情報は、例えば図示されないＣＰＵに渡される。
【０１７７】
グラフィクスプレーンＡ１３２上の画像データは、パレット１５０に供給され、２５６色からなるパレットに対してインデックスによる参照がなされ、ＲＧＢデータが出力されると共に、アルファブレンディングのためのパラメータである不透明度データα１が抜き出される。ＲＧＢデータは、ＲＧＢ／ＹＣｂＣｒ変換回路１５１によりＹＣｂＣｒデータに変換され、ＹＣｂＣｒデータおよび不透明度データα１は、プレゼンテーションプロセッサ１５５に供給される。
【０１７８】
グラフィクスプレーンＢ１３３上の画像データは、パレット１５２に供給され、２５６色からなるパレットに対してインデックスによる参照がなされ、ＲＧＢデータが出力されると共に、不透明度データα２が抜き出される。ＲＧＢデータは、ＲＧＢ／ＹＣｂＣｒ変換回路１５３によりＹＣｂＣｒデータに変換され、ＹＣｂＣｒデータおよび不透明度データα２は、プレゼンテーションプロセッサ１５５に供給される。
【０１７９】
ビデオプレーン１３４の出力は、アップ／ダウンコンバータ１５４を介してプレゼンテーションプロセッサ１５５に供給される。同様に、第２ビデオプレーン１６０の出力は、アップ／ダウンコンバータ１６１を介してプレゼンテーションプロセッサ１５５に供給される。
【０１８０】
なお、アップ／ダウンコンバータ１５４は、画像の解像度を変換する回路であって、例えば高解像度のＨＤ(High Definition)画像から通常の解像度を有するＳＤ(Standard Definition)画像への変換を行う。
【０１８１】
プレゼンテーションプロセッサ１５５は、グラフィクスプレーンＡ１３２の画像データによる不透明度α１と、グラフィクスプレーンＢ１３３による不透明度α２とを用いたアルファブレンディング処理を行う。また、プレゼンテーションプロセッサ１５５では、ビデオプレーン１３４および第２ビデオプレーン１６０の出力を画素単位で切り替えて、上述したピクチャインピクチャ機能や壁紙表示機能などを実現する。
【０１８２】
すなわち、プレゼンテーションプロセッサ１５５では、ビデオプレーン１３４と第２ビデオプレーン１６０の画像データを図示されないスイッチで切り替えて一つの画像データを構成し、その画像データに対し、グラフィクスプレーンＡ１３２の画像データに設定された不透明度α１に基づき、グラフィクスプレーンＡ１３２の画像データが合成される。さらに、ビデオプレーンとグラフィクスプレーンＡ１３２が合成された画像データに対して、グラフィクスプレーンＢ１３３の画像データに設定された不透明度α２に基づき、グラフィクスプレーンＢ１３３の画像データが合成される。この、グラフィクスプレーンＢ１３３の画像データ、グラフィクスプレーンＡ１３２の画像データ（字幕データ）、ならびに、ビデオプレーン１３４、第２ビデオプレーン１６０の画像データが合成された画像データが出力端１５６に導出される。
【０１８３】
なお、プレゼンテーションプロセッサ１５５は、画像データに対してリアルタイムでエフェクト処理を行うこともできる。
【０１８４】
上述では、プレーヤデコーダ１００の各部がハードウェアで構成されるように説明したが、これはこの例に限られない。例えば、プレーヤデコーダ１００をソフトウェア上の処理として実現することも可能である。この場合、プレーヤデコーダ１００をコンピュータ装置上で動作させることができる。また、プレーヤデコーダ１００をハードウェアおよびソフトウェアが混合された構成で実現することもできる。例えば、オーディオデコーダ１１８やＭＰＥＧビデオデコーダ１２０をハードウェアで構成し、その他をソフトウェアで構成することが考えられる。
【０１８５】
プレーヤデコーダ１００をソフトウェアのみ、または、ハードウェアおよびソフトウェアの混合により構成し、コンピュータ装置で実行させるためのプログラムは、例えばＣＤ−ＲＯＭ(Compact Disc-Read Only Memory)といった記録媒体に記録されて提供される。このＣＤ−ＲＯＭをコンピュータ装置のＣＤ−ＲＯＭドライブに装填し、ＣＤ−ＲＯＭに記録されたプログラムを所定にコンピュータ装置にインストールすることで、上述の処理をコンピュータ装置上で実行可能な状態とすることができる。なお、コンピュータ装置の構成は、極めて周知であるため、説明は省略する。
【０１８６】
２．発明の実施の第２の形態
次に、この発明の実施の第２の形態について説明する。この実施の第２の形態は、ＥＣＭＡスクリプトと呼ばれるスクリプト言語を用いてプレーヤモデルを記述する例である。ＥＣＭＡスクリプトは、ＥＣＭＡ(European Computer Manufacturers Association)により定められた、ＪａｖａＳｃｒｉｐｔ（登録商標）に基づいたクロスプラットフォーム用のスクリプト言語である。ＥＣＭＡスクリプトは、ＨＴＭＬ文書との親和性が高いことと、独自のオブジェクトの定義が可能であるため、この発明によるプレーヤモデルに用いて好適である。
【０１８７】
なお、第２８図Ａ、第２８図Ｂおよび第２８図Ｃを用いて既に説明したように、プレーヤデコーダ１００は、マルチメディアエンジン１０６においてＥＣＭＡスクリプトの解析や実行が可能であるので、この実施の第２の形態にもそのまま適用することができる。
【０１８８】
なお、以下では、このＥＣＭＡスクリプトを元にしたスクリプト言語を用いた、この発明の実施の第２の形態に基づく規格を、ＵＭＤ(Universal Media Disc：登録商標)ビデオ規格と呼ぶ。また、ＵＭＤビデオ規格のうち、特にスクリプトに関する部分をＵＭＤビデオスクリプト規格と呼ぶ。
【０１８９】
２−１．ＵＭＤビデオ規格について
先ず、理解を容易とするために、この実施の第２の形態に適用可能なＵＭＤビデオ規格について、概略的に説明する。第２９図は、ＵＭＤビデオ規格のレイヤ構成を示す。この第２９図は、実施の第１の形態で説明した第１図に対応するものである。ＵＭＤビデオ規格では、スクリプトレイヤ、プレイリストレイヤおよびクリップレイヤの３層のレイヤ構造が定義され、この構造に基づきストリーム管理がなされる。
【０１９０】
ＵＭＤビデオ規格においては、ディジタル符号化されたビデオ、オーディオおよび字幕を、ＭＰＥＧ２(Moving Pictures Experts Group 2)のエレメンタリストリームとして多重化したＭＰＥＧ２ストリームとして扱う。このビデオ、オーディオおよび字幕のエレメンタリストリームが多重化されたＭＰＥＧ２ストリームを、クリップＡＶストリーム(Clip AV Stream)と呼ぶ。クリップＡＶストリームは、クリップＡＶストリームファイルに格納される。クリップＡＶストリームファイルの記録時に、当該クリップＡＶストリームファイルに１対１に対応して、クリップインフォメーションファイル(Clip Information File)が同時に作成される。これらクリップインフォメーションファイルと、対応するクリップＡＶストリームファイルとからなる組を、クリップ(Clip)と呼ぶ。
【０１９１】
クリップは、ディスクへの記録の単位ともいうべきものであり、再生時にどのような順序でクリップを再生するかは、クリップの上位のレイヤであるプレイリストレイヤで管理する。プレイリストレイヤは、クリップの再生経路を指定するレイヤであり、１または複数のプレイリスト(Play List)を含む。プレイリストは、プレイアイテムの(PlayItem)の集合からなる。プレイアイテムには、クリップの再生範囲を示した一組のイン(In)点およびアウト(Out)点が含まれており、プレイアイテムを連ねることによって、任意の順序でクリップを再生することができるようになる。プレイアイテムは、クリップを重複して指定することができる。クリップＡＶストリームファイルのイン点およびアウト点は、タイムスタンプ（クリップ内時刻）で指定され、タイムスタンプは、クリップインフォメーションファイルの情報によってクリップＡＶストリームファイル上のバイト位置に変換される。
【０１９２】
プレイリストは、クリップの全部または一部を指すプレイアイテムを順序に従って再生していく構造だけを有しており、プレイリストのみを用いて再生順の分岐や、ユーザとの双方向性を実現することは、できない。
【０１９３】
スクリプトレイヤは、言語仕様のＥＣＭＡスクリプトを拡張した、ＵＭＤビデオスクリプトによって構築されるレイヤである。ＵＭＤビデオスクリプトは、ＥＣＭＡスクリプトを基本として、ＵＭＤビデオに特有な機能を実現するための拡張を加えたスクリプトである。
【０１９４】
スクリプトレイヤは、プレイリストレイヤの上位のレイヤであり、プレイリストの再生指示や、プレーヤ設定を行うコマンド列から構成される。スクリプトレイヤのコマンドにより、複数の言語用に用意されたストリームのうち何れを選択する、ある条件に従って選択されるプレイリストに再生の流れが変化する、というような、条件分岐を伴うプレイリスト再生を実現することができる。このような条件分岐を伴うプレイリスト再生が用いられるアプリケーションの例としては、マルチストーリーが挙げられる。このスクリプトレイヤにより、ユーザとの双方向性機能（インタラクティブ機能）が導入されることになる。
【０１９５】
２−２．ＵＭＤビデオ規格のプレーヤモデルについて
次に、ＵＭＤビデオ規格に従ったデータを再生する再生装置（プレーヤ）のモデル、すなわち、プレーヤモデルについて説明する。プレーヤは、先ず、ディスクからスクリプトプログラム、プレイリストおよびクリップインフォメーションファイルを読み出し、次に、これらにより定められている再生順序に従って、クリップＡＶストリームファイルを読み出し、ビデオ、オーディオおよび字幕などを再生する。
【０１９６】
スクリプトプログラムの言語仕様においては、プレイリストを再生する機能ブロックを、スクリプトプログラム内のオブジェクトとして実装する。このプレイリスト再生を行うオブジェクトを、ＵＭＤビデオ規格では、ムービープレーヤ(Movie Player)オブジェクトと呼ぶ。プレイリストの再生指示や、プレーヤ設定を行うコマンドは、このムービープレーヤオブジェクトが有するメソッドとなる。ムービープレーヤオブジェクトは、スクリプトレイヤからのメソッドによって制御される。このとき、ムービープレーヤオブジェクトからスクリプトレイヤに対して、状態の変化や再生位置などを通知する機能が必要となる。これは、ムービープレーヤオブジェクトがスクリプトプログラムに対してイベントを発することに対応し、そのイベントに対応した処理は、イベントハンドラとして記述される。
【０１９７】
このように、ムービープレーヤオブジェクトからスクリプトプログラムへの情報伝達は、イベントにより行い、スクリプトプログラムからムービープレーヤオブジェクトに対する制御をメソッドにより行うモデルを構築することにより、クリップＡＶストリームの再生をスクリプトプログラムで制御できるようになる。
【０１９８】
第３０図は、上述した、この実施の第２の形態による一例のプレーヤモデルを模式的に示す。ムービープレーヤ３００は、ＵＭＤビデオ規格においてビデオ、オーディオおよび字幕の再生を司るモジュールである。上述したムービープレーヤオブジェクトは、ムービーオブジェクトをスクリプトプログラムから操作するためにスクリプトプログラム内のオブジェクトとしたものである。換言すれば、ムービープレーヤオブジェクトは、ムービープレーヤの機能を実現するためのスクリプトプログラムそのものである。
【０１９９】
なお、ムービープレーヤ３００とムービープレーヤオブジェクトは、実質的に同一の対象を表すと考えられるので、以下、これらを同一の符号を付して説明する。
【０２００】
第３０図において、ムービプレーヤ３００は、ユーザ入力３１０などにより引き起こされる下位レイヤ（第３０図の例ではネイティブ実装プラットフォーム３０１）や、上位レイヤであるスクリプトレイヤ３０２からのメソッドに従って、プレイリストおよびクリップインフォメーションのデータベースに基づき、クリップＡＶストリームファイルの読み出し、読み出されたクリップＡＶストリームのデコードおよび表示を行う。
【０２０１】
ムービープレーヤオブジェクト３００の内部は、ＵＭＤビデオを再生するＵＭＤビデオプレーヤの実装に依存するものであって、スクリプトレイヤ３０２からは、ブラックボックス化されたオブジェクトとして、メソッドやプロパティといったＡＰＩ(Application Programming Interface)が提供される。ここで、ＵＭＤビデオプレーヤは、ムービープレーヤを実装した実際の機器を指す。全てのＵＭＤビデオプレーヤは、ＵＭＤビデオ規格の制約を守ってムービープレーヤを実装しており、再生互換を有する。
【０２０２】
第３０図に示されるように、ムービープレーヤオブジェクト３００は、ネイティブ実装プラットフォーム３０１からの制御コマンド３１１を受け付けるパス、スクリプトレイヤ３０２に対してイベント３１２を通知するパス、スクリプトレイヤ３０２からのメソッド３１３を受け付けるパスの、３本の入出力パスを有する。
【０２０３】
制御コマンド３１１は、ネイティブ実装のプラットフォーム３０１からの、ムービープレーヤオブジェクト３００の動作を制御するコマンドである。ネイティブ実装プラットフォーム３０１は、例えば、実際の機器としてのＵＭＤビデオプレーヤにおける、機器に固有の部分とムービープレーヤ３００とのインターフェイスである。イベント３１２は、ムービープレーヤ３００からスクリプトレイヤ３０２に対するスクリプトイベントである。メソッド３１３は、スクリプトレイヤ３０２のスクリプトプログラムからムービープレーヤ３００に渡されるメソッドである。
【０２０４】
ムービープレーヤオブジェクト３００は、内部に、ＵＭＤビデオ規格のプレイリストおよびクリップインフォメーションのデータベース３２０を有する。ムービープレーヤオブジェクト３００は、このデータベース３２０を用いて、ユーザ入力３１０に対するマスクや、時刻で指定された再生位置をクリップＡＶストリーム内のバイト位置に変換する処理などを行う。
【０２０５】
ムービープレーヤオブジェクト３００内のプレイバックモジュール３２１は、ビデオ、オーディオおよび字幕が多重されたＭＰＥＧ２  ＰＳ(Program Stream)であるクリップＡＶストリームのデコードを行う。プレイバックモジュール３２１は、プレイ、ストップおよびポーズの３状態を持ち、制御命令やメソッドによって、この３状態の間を遷移する（第３１図参照）。
【０２０６】
スクリプトレイヤ３０２は、ＵＭＤビデオスクリプト規格に基づくスクリプトプログラムを実行し、ムービープレーヤオブジェクト３００の制御や、画面表示を行うレイヤである。このスクリプトレイヤ３０２は、コンテンツ制作者側の意図したシナリオを実現する役割を果たす。スクリプトレイヤ３０２は、ムービープレーヤオブジェクト３００に対してメソッド３１３を発行し、ムービープレーヤオブジェクト３００からは、イベント３１２を受け取る。スクリプトレイヤ３０２は、ネイティブ実装プラットフォーム３０１との間で、ユーザ入力３１０に応じたキーイベント３１４や、画面描画などをネイティブ実装プラットフォーム３０１に対して指示するメソッド３１５などのやりとりを行う。
【０２０７】
例えば、メニュー画面上に配置されるボタンは、スクリプトレイヤ３０２のスクリプトプログラムからネイティブ実装プラットフォーム３０１に渡されるメソッド３１５に基づき、ネイティブ実装プラットフォーム３０１により描画される。ユーザがそのボタンに対して選択操作を行ったときには、ユーザ入力３１０に応じたキーイベント３１４がネイティブ実装プラットフォーム３０１からスクリプトレイヤ３０２に通知され、スクリプトレイヤ３０２内のスクリプトプログラムは、キーイベント３１４に基づきキー入力３１０に応じた処理を行う。
【０２０８】
なお、スクリプトプログラムとスクリプトプログラム内で使用する画像、音声などのデータは、ファイルとしてディスク上に記録される。このファイルは、第２５図Ａおよび第２５図Ｂで説明したファイルscenario.hdmvに相当する。
【０２０９】
このように、ビデオ、オーディオおよび字幕のデコードや表示制御はムービープレーヤ３００が司り、ボタンなどのＧＵＩ(Graphical User Interface)を構成するための部品画像の配置や表示、ならびに、ＧＵＩ部品に対して選択操作がなされたときの処理は、スクリプトレイヤ３０２が行うというように、役割分担がなされている。
【０２１０】
ネイティブ実装プラットフォーム３０１は、ムービープレーヤオブジェクト３００やスクリプトプログラムが動作するための基盤となるプラットフォームであって、例えば、実際のＵＭＤビデオプレーヤがハードウェアである場合、ハードウェアとプレーヤモデルとの間の処理を仲介する役割を果たすように、ハードウェアに固有に実装される。
【０２１１】
例えば、ネイティブ実装プラットフォーム３０１は、ユーザからのユーザ入力３１０を受け付け、受け付けたユーザ入力３１０がムービープレーヤ３００に対する命令なのか、スクリプトレイヤ３０２で描画および表示しているボタンに対する命令なのかを判定する。ネイティブ実装プラットフォーム３０１は、ユーザ入力３１０がムービープレーヤ３００に対する命令であると判定されれば、ユーザ入力３１０をムービープレーヤ３００に対する内部制御命令である制御コマンド３１１に変換し、ムービープレーヤ３００に対して制御命令を発する。一方、ネイティブ実装プラットフォーム３０１は、ユーザ入力３１０がスクリプトレイヤ３０２で描画および表示しているＧＵＩ部品に対する命令であると判定されれば、ユーザ入力３１０に応じたキーイベント３１４をスクリプトレイヤ３０２に通知する。
【０２１２】
次に、ムービープレーヤ３００についてより詳細に説明する。第３１図は、ムービープレーヤ３００の一例の内部構成を示す。上述したように、ムービープレーヤ３００は、データベース３２０およびプレイバックモジュール３２１とから構成される。データベース３２０は、ディスクから読み取ったプレイリストの情報と、クリップの情報すなわちクリップインフォメーションとを格納する領域である。
【０２１３】
プレイバックモジュール３２１は、デコーダエンジン３２２と、プレイバックモジュール３２１の状態を表す値であるプロパティ３２３とからなる。プロパティ３２３は、例えば言語コードのように、ムービープレーヤ３００の初期設定で値が決まるプロパティ３２３Ａ（リードオンリーパラメータ）と、プレイバックモジュール３２１の状態によって値が変化するプロパティ３２３Ｂ（プレーヤステータス）の２種類がある。
【０２１４】
初期設定で値が決まるプロパティ３２３Ａは、ネイティブなシステム、例えば実際の機器によって値がセットされ、プレイリストやクリップインフォメーション、スクリプトプログラムから値を変更されることがない。プロパティ３２３Ａは、スクリプトプログラムから値を読み出すことのみが可能とされる。一方、プレイバックモジュール３２１の状態を表すプロパティ３２３Ｂは、スクリプトプログラムから値を読み出すことができると共に、一部のスクリプトプログラムから値を書き込むことが可能とされる。
【０２１５】
なお、この動作モデルにおいては、プレイリストおよびクリップインフォメーションは、クリップＡＶストリームの再生前にディスクからプリロードされていることを想定している。これに限らず、他の実装であっても、ムービープレーヤモデルで定めた動作を実現できていればよい。
【０２１６】
ムービープレーヤオブジェクト３００は、スクリプトレイヤ３０２またはネイティブ実装プラットフォーム３０１からの指示に従い、指定されたプレイリストを再生する。例えば、ムービープレーヤ３００は、データベース３２０を参照し、指定されたプレイリストに対応するクリップＡＶストリームの再生位置をファイル中のバイト位置で得る。プレイバックモジュール３２１において、デコーダエンジン３２２は、この再生位置情報に基づき、クリップＡＶストリームのデコードを制御する。
【０２１７】
ムービープレーヤ３００は、第３２図に示されるように、プレイリストの再生状況に応じてプレイ(play)、ストップ(stop)およびポーズ(pause)の３状態を持つ。プレイ状態は、プレイリストの再生を行っており、時間が経過している状態を指す。通常再生の他、２倍速、１／２倍速といった変速再生や、早送りおよび巻き戻し（早戻し）もプレイ状態に含まれる。ポーズ状態は、プレイリストの再生を行っている状態で、時間軸が停止している状態である。再生をフレーム単位で進めたり戻したりする所謂コマ送り再生は、ポーズ状態とプレイ状態とを繰り返している状態である。ストップ状態は、プレイリストを再生していない状態である。
【０２１８】
例えば、ムービープレーヤ３００の状態は、ムービープレーヤ３００内のデコーダエンジン３２２におけるプレイ、ポーズおよびストップの状態遷移に伴うもので、デコーダエンジン３２２の状態遷移に応じてプロパティ３２３Ｂの値が更新される。
【０２１９】
リジュームインフォメーションは、ストップ状態直前の状態を記憶する。例えば、ムービープレーヤ３００があるプレイリストをデコードしプレイ状態となっているときに、状態がストップ状態に遷移すると、ストップ状態の直前の状態を記憶する。リジュームインフォメーションは、ハードウェアとしてのプレーヤが持つ不揮発性メモリに、ディスクのタイトル毎に識別可能なように複数を記憶させることができる。
【０２２０】
２−３．ムービープレーヤのイベントモデルについて
ムービープレーヤ３００のイベントモデルについて説明する。ムービープレーヤ３００は、プレイリストを再生するプレイ状態で、様々なイベントを発生する。このイベントは、イベントハンドラと呼ばれる、スクリプトで記述された処理プログラムの実行を引き起こす。イベントハンドラは、イベント発生によって呼び出されるメソッドである。このイベント発生によって処理プログラムの実行を開始するプログラム実行モデルを、イベントドリブンモデルと呼ぶ。この実施の第２の形態においては、スクリプトプログラムは、イベントハンドラ群によってムービープレーヤオブジェクト３００の動作を制御する。
【０２２１】
第３３図は、この発明の実施の第２の形態によるムービープレーヤ３００のイベントモデルを模式的に示す。第３３図において、イベントハンドラonEventA()、onEventB()およびonEventC()は、インターフェイスであって、それぞれのイベントハンドラの内容は、スクリプトで記述されている。イベントハンドラの内容は、例えばコンテンツ制作者側で作成され実装される。ＵＭＤビデオスクリプト規格においては、ムービープレーヤオブジェクト３００からスクリプトプログラムに通知されるイベント毎に、イベントハンドラが用意される。第３３図の例では、イベントＡが発生したときに実行される処理プログラムは、イベントハンドラonEventA()に決められている。イベントＢおよびイベントＣについても同様に、イベントＢの発生時には対応するイベントハンドラonEventB()が実行され、イベントＣの発生時には対応するイベントハンドラonEventC()が実行される。
【０２２２】
イベント発生に応じて呼び出されるイベントハンドラは、システム側で選択されるため、コンテンツ制作者側では、どのイベントが発生したかを判断する処理を、スクリプトプログラム内に記述しておく必要が無い。
【０２２３】
この実施の第２の形態によるイベントモデルは、実施の第１の形態で第１５図を用いて既に説明した、イベント登録、イベント登録削除といった処理が必要なイベントリスナのモデルよりも簡単である。一方、どのようなイベントが発生しても一つのメソッドprocessEvent()を呼び出すモデル（第２０図参照）では、どのイベントが発生したかを知り、イベント毎に用意してある処理ルーチンを切り替えるという前処理を、メソッドprocessEvent()の中に記述しておく必要がある。メソッドprocessEvent()は、コンテンツ制作者側が実装するものであるから、モデルとしては簡単でも、コンテンツ制作者側の負担が大きくなる。さらに、大きな一つの処理プログラム（メソッド）がイベントの発生毎に呼ばれることになり、メモリの領域を多く占有し、実行速度も遅くなると考えられる。この発明の実施の第２の形態による、イベント毎に処理プログラム（イベントハンドラ）を用意するモデルでは、このような点について有利であるといえる。
【０２２４】
２−４．ムービープレーヤオブジェクト３００について
次に、ムービープレーヤオブジェクト３００の外部的な仕様について説明する。一般に、ＥＣＭＡスクリプト言語仕様に従う言語により定義されたオブジェクトは、プロパティとメソッドとを持つ。この実施の第２の形態によるムービープレーヤオブジェクト３００も、第３１図および第３２図を用いて既に説明したように、同様にしてプロパティとメソッドとを有する。プロパティは、外部のオブジェクトから、対象となるオブジェクト名とプロパティ名とを指定することで、直接的に読み書きすることが可能である。これに限らず、プロパティ値の設定を行うメソッドsetXXX()（「XXX」は、対象のプロパティ名）や、プロパティ値の読み出しを行うメソッドgetXXX()を定義することで、他のオブジェクトのプロパティの読み書きを、メソッドで行うことが可能となる。
【０２２５】
この実施の第２の形態によるムービープレーヤオブジェクト３００のプロパティおよびメソッドは、実施の第１の形態において第７図〜第１２図を用いて既に説明したプロパティおよびメソッドと同一の仕様を適用できる。つまり、この実施の第２の形態において、スクリプトレイヤ３０２のスクリプトプログラムとムービープレーヤオブジェクト３００との間の仕様（ＡＰＩ）、すなわち、第３０図を用いて説明したメソッド３１３は、上述した実施の第１の形態においてＪａｖａで定義したクラスと同様に考えることができる。
【０２２６】
一方、ユーザからのキー入力については、第３０図を用いて既に説明したように、ユーザ入力３１０をネイティブ実装プラットフォーム３０１が先ず、受け取る。つまり、ネイティブ実装プラットフォーム３０１は、ユーザからのキー入力をユーザ入力３１０として受け取り、ユーザ入力３１０がムービープレーヤ３００に対するコマンドなのか、スクリプトレイヤ３０２のスクリプトプログラムに対するイベントなのかを判定し、判定結果に応じて、制御コマンド３１１またはキーイベント３１４を発生し、対応する上位レイヤ（ムービープレーヤ３００またはスクリプトレイヤ３０２）に通知する。
【０２２７】
ユーザ入力３１０は、例えば第２４図、ならびに、第２５図Ａおよび第２５図Ｂを用いて既に説明したキー入力である。ここで、第２４図に示されるキー入力に対応する機能と、第２５図Ａおよび第２５図Ｂに示されるキー入力に対応する機能とでは、役割が異なるため、通知先をネイティブ実装プラットフォーム３０１で振り分ける必要がある。
【０２２８】
第２４図に示されるキー入力により、ビデオ、オーディオおよび字幕の再生に関する指示がなされる。ネイティブ実装プラットフォーム３０１は、ユーザ入力３１０として第２４図に示されるキー入力を受け取ると、受け取ったキー入力を第２１図Ａ、第２１図Ｂ、第２１図Ｃおよび第２１図Ｄで説明したようなコマンドに変換する。変換されたコマンドは、ムービープレーヤ３００に対する制御コマンド３１１として通知される。すなわち、第２１図Ａ、第２１図Ｂ、第２１図Ｃおよび第２１図Ｄを用いて説明したユーザ入力コマンドは、第３０図の制御コマンド３１１に対応する。
【０２２９】
一方、第２５図Ａおよび第２５図Ｂに示されるキー入力は、ＧＵＩに対するユーザ入力３１０である。ネイティブ実装プラットフォーム３０１は、ユーザ入力３１０として第２５図Ａおよび第２５図Ｂに示されるキー入力を受け取ると、受け取ったキー入力をキーイベント３１４に変換し、スクリプトレイヤ３０２に通知する。
【０２３０】
なお、上述した第２５図Ａおよび第２５図Ｂには、キーVK_ANGLE、キーVK_PRESENTATION_GRAPHICS、キーVK_AUDIOという、ストリーム切り替えに関するキー入力も含まれているが、これらは、スクリプトプログラムからムービープレーヤ３００に対するメソッドで実現されるようにしているので、スクリプトレイヤ３０２に伝えられるべきキー入力である。
【０２３１】
２−５．ムービープレーヤオブジェクト３００でのイベントの扱いについて
Ｊａｖａ言語を用いた上述の実施の第１の形態では、第１４図Ａ、第１４図Ｂおよび第１４図Ｃのようなイベントを、オブジェクトBDBasicPlayerが持つとしていた。そして、第１５図に示されるようなイベントリスナモデルに基づき、第１６図Ａおよび第１６図Ｂを用いて説明したようなメソッドで、リスナの登録や削除を行うようにしていた。この実施の第１の形態によるイベントリスナモデルでは、プログラム実行中に動的にリスナを登録および削除することができるようにされ、イベントへの応答処理をプログラムの途中で変更することが可能である。そのため、より自由度が高く、高度な機能を実現するプログラミングが可能である。
【０２３２】
一方、この実施の第２の形態に適用されるＥＣＭＡスクリプトを元にしたスクリプト言語においては、リスナ登録および削除を行うことはせず、イベントに応じて、予め固定的に用意された処理プログラムが呼び出されるようにしている。実施の第１の形態におけるリスナに対応するインターフェイスは、ムービープレーヤオブジェクト３００のイベントハンドラである。イベントハンドラのモデルでは。第１６図Ａおよび第１６図Ｂに示されるようなリスナ登録に関連するメソッドは、不要となる。
【０２３３】
この実施の第２の形態では、イベントそれぞれに対応して、第３４図Ａおよび第３４図Ｂに一例が示されるイベントハンドラが設けられる。イベントハンドラ名は、イベント名の先頭に「on」を付加したものになる。この第３４図Ａおよび第３４図Ｂに一例が示されるイベントハンドラは、上述した実施の第１の形態において第１４図Ａ、第１４図Ｂおよび第１４図Ｃを用いて説明したイベントに対応するものである。
【０２３４】
イベントハンドラonTimerFired()は、ムービープレーヤ３００におけるカウントダウンタイマの値が"０"になったか、あるいは、カウントアップタイマの値が指定の値になったときに発生されるイベントに対応する。これにより、あるタイミングにおける処理を実現できる。
【０２３５】
イベントハンドラonPlayStopped()は、ムービープレーヤ３００における再生が停止された（ストップ）ときに発生されるイベントに対応する。イベントハンドラonPlayStilled()は、ムービープレーヤ３００における再生が一時停止された（ポーズ）ときに発生されるイベントに対応する。イベントハンドラonPlayStarted()は、ムービープレーヤ３００における再生が開始された（スタート）ときに発生されるイベントに対応する。イベントハンドラonPlayRepeated()は、ムービープレーヤ３００における繰り返し再生時の先頭を検出したときに発生されるイベントに対応する。これらにより、デコーダエンジン３２２の状態に応じた処理を実現できる。
【０２３６】
イベントハンドラonSPDisplayStatusChanged()は、ムービープレーヤ３００における字幕（サブピクチャ）のストリームの表示および非表示状態が変わったときに発生されるイベントに対応する。イベントハンドラonSelectedAudioChanged()は、ムービープレーヤ３００における再生するオーディオストリームが変わったときに発生されるイベントに対応する。イベントハンドラonVideoStopped()は、ムービープレーヤ３００における再生するビデオストリームが変わったときに発生されるイベントに対応する。これらにより、再生されるストリームの変化に応じた処理を実現できる。
【０２３７】
イベントハンドラonPlayListStarted()は、ムービープレーヤ３００におけるプレイリストの先頭を検出したときに発生されるイベントに対応する。イベントハンドラonPlayListEndedは、ムービープレーヤ３００におけるプレイリストの終わりを検出したときに発生されるイベントに対応する。イベントハンドラonPlayItemStarted()は、ムービープレーヤ３００におけるプレイアイテムの先頭を検出したときに発生されるイベントに対応する。イベントハンドラonPlayItemEnded()は、ムービープレーヤ３００におけるプレイアイテムの終わりを検出したときに発生されるイベントに対応する。プレイリストやプレイアイテムの連続的な再生など、プレイリストやプレイアイテムの再生開始や再生終了に応じた処理を実現できる。
【０２３８】
イベントハンドラonMarkEncountered()は、ムービープレーヤ３００における再生中に、プレイリスト中のマークを検出したときに発生されるイベントに対応する。プレイリスト中にある時刻を示すマークを予め設定しておくことで、再生中のプレイリストにおける分岐処理などが実現できる。
【０２３９】
これらのイベントハンドラの内容は、コンテンツ制作者側がスクリプト言語により記述する。これにより、イベント発生時にコンテンツ制作者の意図する動作を実現することができる。
【図面の簡単な説明】
【０２４０】
【図１】  従来技術によりボタンの表示開始時刻を変更することを説明するための図である。
【図２】  ストリームの再多重化を説明するための図である。
【図３】  ＢＤ−ＲＯＭ規格のＨＤムービーモードにおける一例のレイヤ構成を示す略線図である。
【図４】  ＢＤ−ＲＯＭのプレーヤモデルの一例のレイヤ構成を示す略線図である。
【図５】  ＢＤ基本プレーヤ３０について説明するための図である。
【図６】  プレイリストの再生中に発生するイベントの例を示す略線図である。
【図７】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図８】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図９】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図１０】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図１１】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図１２】  クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図１３】  第１３図は、クラスBDBasicPlayerのメソッドの例を一覧して示す略線図である。
【図１４】  Ｄ−ＲＯＭのオブジェクトBDBasicPlayerで生成される一例のイベント定義を一覧して示す略線図である。
【図１５】  リスナおよびイベントについて説明するための図である。
【図１６】  イベントリスナ登録に関する一例のメソッドを一覧して示す略線図である。
【図１７】  イベントリスナ登録を用いたプログラム作成の一例の手順を示すフローチャート、
【図１８】  イベントリスナ登録を用いたプログラムを再生側が実装する際の一例の処理を示すフローチャート、
【図１９】  クリップＡＶストリームファイル、マークデータが格納されるファイルおよびボタンを構成するデータが格納されるファイルを概念的に示す略線図である。
【図２０】  イベントドリブンモデルによるＢＤ−ＲＯＭ仮想プレーヤモデルについて説明するための図である。
【図２１】  ＢＤ−ＲＯＭ仮想プレーヤモデルが受け付けるユーザ入力コマンドの定義の一例を一覧して示す略線図である。
【図２２】  リモートコントロールコマンダからのキー入力イベントを表すクラスRmtKeyEventの例を示す略線図である。
【図２３】  オブジェクトRmtKeyEventが有する一例のメソッドを一覧して示す略線図である。
【図２４】  メソッドgetRmtKeyCodeによって得られる一例のキーを一覧して示す略線図である。
【図２５】  メソッドgetRmtKeyCodeによって得られる一例のキーを一覧して示す略線図である。
【図２６】  ユーザ入力イベントをきっかけとして、用意されたプログラムが実行される一例の手順を示すフローチャート、
【図２７】  ＢＤ−ＲＯＭのフルプロファイルに適用可能な一例のファイルの管理構造を示す略線図である。
【図２８】  この発明の実施の第１の形態に適用可能なプレーヤデコーダ１００の一例の構成を示す機能ブロック図である。
【図２９】  ＵＭＤビデオ規格のレイヤ構成を示す略線図である。
【図３０】  この実施の第２の形態による一例のプレーヤモデルを模式的に示す図である。
【図３１】  ムービープレーヤの一例の内部構成を示す略線図である。
【図３２】  ムービープレーヤの３状態を示す略線図である。
【図３３】  この発明の実施の第２の形態によるムービープレーヤのイベントモデルを模式的に示す図である。
【図３４】  ムービープレーヤオブジェクトの一例のイベントハンドラを示す略線図である。
【符号の説明】
【０２４１】
３０  ＢＤ基本プレーヤ
３１  Ｊａｖａプログラム
３２  ＡＰＩ
３４  共通パラメータ
３５  プレーヤコマンド
１０４  コードバッファ
１０６  マルチメディアエンジン
２００  ＢＤプレゼンテーションエンジン
２０１  ナビゲーションエンジン
２０２  ＪａｖａＶＭ
２０３  Ｊａｖａアプリケーション
２１０  オブジェクトBDBasicPlayer
２１１  リスナインターフェイス
３００  ムービープレーヤ
３０１  ネイティブ実装プラットフォーム
３０２  スクリプトレイヤ
３１０  ユーザ入力
３１１  制御コマンド
３１２，３１４  イベント
３１３，３１５  メソッド
３２０  データベース
３２１  プレイバックモジュール
３２２  デコーダエンジン
３２３  プロパティ
Ｓ２０  プレイリスト上のどのシーンでボタンを表示させるか決める
Ｓ２１  その時刻にマークを設定する
Ｓ２２  ボタンオブジェクトにマークに対応するイベントリスナを登録するメソッドをプログラム中に記述する
Ｓ２３  マーク発生イベントに対応するリスナインターフェイスを実装する（イベント発生時に実行させる処理を記述）
Ｓ３０  プレイリスト再生スタート
Ｓ３１  BDBasicPlayerがプレイリスト再生中にマークがつけられた時刻を通過したことを検出
Ｓ３２  マークイベントに対応するイベントリスナが登録されている
Ｓ３３  イベントリスナを登録したオブジェクトにマークイベント送信
Ｓ３４  イベントの通知を受けたオブジェクトは、マークイベント発生時に実行するメソッドを実行
Ｓ３５  ボタンを表示
Ｓ３６  マーク検出のイベントを通知しない
Ｓ４１  再生中にユーザが’ネクスト’キーを押した
Ｓ４２  RmtKeyEventが発生
Ｓ４３  次のチャプタマークの位置をデータベースから知る
Ｓ４４  チャプタマークが有るか？
Ｓ４５  現在の再生を中止する
Ｓ４６  PlayStoppedEvent発生
Ｓ４７  次のチャプタマークの位置のバイト位置にアクセスしてビデオ再生を開始する
Ｓ４８  PlayStartedEvent, MarkEncounteredEvent発生
Ｓ４９  MarkEncounteredEventに対応したリスナを実行開始
Ｓ５０  Markの種類を知る
Ｓ５１  チャプタマークで有るか？
Ｓ５２  チャプタ先頭であることを示すメッセージを表示
Ｓ５３  リスナ実行終了
【図１】
0004241731.tif 000002
0004241731.tif 000003
0004241731.tif 000004
0004241731.tif 000005
【図４】
0004241731.tif 000006
【図５】
0004241731.tif 000007
【図６】
0004241731.tif 000008
【図７】
0004241731.tif 000009
0004241731.tif 000010
0004241731.tif 000011
0004241731.tif 000012
【図９】
0004241731.tif 000013
【図１０】
0004241731.tif 000014
【図１１】
0004241731.tif 000015
【図１２】
0004241731.tif 000016
【図１３】
0004241731.tif 000017
0004241731.tif 000018
0004241731.tif 000019
0004241731.tif 000020
【図１５】
0004241731.tif 000021
0004241731.tif 000022
0004241731.tif 000023
【図１７】
0004241731.tif 000024
【図１８】
0004241731.tif 000025
0004241731.tif 000026
【図２０】
0004241731.tif 000027
0004241731.tif 000028
0004241731.tif 000029
0004241731.tif 000030
0004241731.tif 000031
【図２２】
0004241731.tif 000032
【図２３】
0004241731.tif 000033
【図２４】
0004241731.tif 000034
0004241731.tif 000035
0004241731.tif 000036
【図２６】
0004241731.tif 000037
【図２７】
0004241731.tif 000038
0004241731.tif 000039
0004241731.tif 000040
0004241731.tif 000041
【図２９】
0004241731.tif 000042
【図３０】
0004241731.tif 000043
【図３１】
0004241731.tif 000044
【図３２】
0004241731.tif 000045
【図３３】
0004241731.tif 000046
0004241731.tif 000047
0004241731.tif 000048