Microsoft DirectX 8.0

スクリプト ベースの DVD アプリケーションの記述

ここでは、MSWebDVD ActiveX® コントロールを使用してスクリプト ベースの DVD アプリケーションを記述する場合の基本的な作業について説明する。以下で述べる DVD 操作の概念に関する背景知識については、「DVD の基礎」を参照すること。

MSWebDVD オブジェクトの埋め込み

MSWebDVD オブジェクトによって、すべての DVD 操作コマンドおよびビデオ矩形表示が処理される。オブジェクトは、ビデオ表示矩形として Web ページに表示される。したがって、HTML ドキュメントの BODY 要素に埋め込む必要がある。矩形の幅と高さ、およびアプリケーションに必要なすべてのプロパティのデフォルト値を設定する。

<OBJECT CLASSID=clsid:38EE5CEE-4B62-11D3-854F-00A0C9C898E7 ID=DVD 
STYLE="height:369px; width:740px">
<PARAM NAME="BackColor" VALUE="1048592">
<PARAM NAME="EnableResetOnStop" VALUE="-1">
<PARAM NAME="ColorKey" VALUE="1048592">
</OBJECT>

ユーザーが DVD コマンドを発行できるようにする

ユーザーが DVD プレーヤーを制御できるようにするには、 "Stop" や "Play" などの DVD コマンドを発行するためのボタンが付いた UI を作成する必要がある。次のコード例では、基本的な HTML ボタンを MSWebDVD オブジェクト メソッドに結びつける方法を示す。

<INPUT ID=button1 NAME="button1" TYPE=button VALUE="Play" onClick='Play();'>
<INPUT ID=button2 NAME="button2" TYPE=button VALUE="Pause" onClick='Pause();'>

<SCRIPT LANGUAGE="JScript">
function Play(){
	 DVD.Play();	
}

function Pause(){
DVD.Pause();
}

</SCRIPT>

DVD メニューの操作

ユーザーがマウスで画面上のボタンをクリックすると、MSWebDVD は自動的にメニュー コマンドを処理する。基本的なマウスのサポートを実装するために、アプリケーションで何か行う必要はない。しかし、メニュー ボタンのクリックで別の動作が行われるようにするために、この自動的なマウスの処理をアプリケーションによって無効にできる。たとえば、ユーザーがクリックしたボタンに応じて、特定のテキストまたはイメージを表示させることができる。カスタム マウス処理を実装するには、SelectAndActivateButtonGetButtonAtPosition などの MSWebDVD メニュー関連メソッドを使用する。 自動的なマウスの処理を完全に無効にするには、DisableAutoMouseProcessing プロパティを TRUE に設定する。

MSWebDVD では、SelectUpperButton などのメソッドのセットにより、DVD リモート コントロールを表すイメージ マップ、および現在のメニューを上下左右に動かすためのボタンを Web ページに表示させることができる。ドキュメントの中では、これらのボタンを "方向" ボタンまたは "相対" ボタンと呼んでいる。DVD メニューのボタンとは異なり、方向ボタンはアプリケーションによって表示される。

オーディオ ストリームとサブピクチャ ストリーム

DVD-Video ディスクには最大 8 つのオーディオ ストリームを含むことができる。これには 0 から 7 までの番号が付けられ、それぞれ 6 つまでの独立したチャンネルを持つ。これらのうち、同時に選択できるのは 1 つのストリームだけである。サブピクチャの場合は、最大で 32 個のストリームを使用でき、0 から 31 までの番号が付けられている。これらのうち、同時に選択できるのは 1 つのストリームだけである。一般に、ディスクはデフォルトのオーディオおよびサブピクチャ ストリームを使って作成されているが、アプリケーションによって、特定のタイトルに対して使用可能なストリームをユーザーにすべて表示して、希望する言語のストリームを選択させることもできる。このプロセスにおける基本的な手順は、オーディオ ストリームの場合も、サブピクチャ ストリームの場合も同じである。

  1. 指定されたタイトルに対して使用可能なストリームの数を決定する。
  2. 各ストリームを順番に見て、それぞれのストリーム属性を取得する。
  3. 返されたロケール識別子 (LCID) から言語コードを取得して、人間が読める文字列を作成する。
  4. ユーザーが希望のストリームを選択できるように、"選択" ボックスやその他のユーザー インターフェイス コントロールを設定する。

(オーディオおよびサブピクチャ ストリームには 0 から番号が付けられているのに対して、タイトル、アングル、およびペアレンタル ロック レベルには 1 から番号が付けられていることに注意する)

ペアレンタル ロック レベルの適用

DVD-Video ディスクのタイトルやタイトルの一部には、一般的なペアレンタル ロック レベル (PML) 1 から 8 までを割り当てることができる。 8 は最も制限の強いレベルで、0 は最も制限の弱いレベルである。これは、親の承諾なしに子供が成人向けコンテンツを見ることを防ぐ方法を提供するという考え方である。各レベルの意味は国によって異なる。アメリカとカナダでは、Motion Picture Association of America のレーティング システム (G、PG、PG-13、NC-17) にレベルを割り当てているが、他の国では事情が異なる。国際的な市場向けの DVD アプリケーションでは、ペアレンタル ロック ロジックに特定のレーティング システムをハード コードすべきではない。

MSWebDVD オブジェクトは、デフォルトでディスク上の PML を無視する。ディスク上の PML マーカーが通知されるアプリケーションの場合は、NotifyParentalLevels(TRUE) を呼び出す必要がある。それにより MSWebDVD は、ディスク上で PML 情報を検出したときにアプリケーションに通知するようになる。PML を適用するには、ユーザーとレベルを関連付ける何らかのパスワード制御ロジックをアプリケーションに実装し、EC_DVD_PARENTAL_LEVEL_CHANGE イベントに応答してアクセスの許可または拒否を適切に行わなければならない。

ブックマークの保存と復元

ブックマークとは、現在のユーザー セッションのスナップショット (ディスク上の現在位置、DVD を見ているユーザーのペアレンタル ロック レベル、選択されたオーディオおよびサブピクチャ ストリーム、その他の情報) を作成するために MSWebDVD オブジェクトが使用する内部データ構造である。つまり、ユーザーは DVD-Video ディスク上の位置を保存し、後でその位置から再生することができる。

ユーザーは、SaveBookmark によってディスク上の位置を保存し、RestoreBookmark メソッドによって保存した位置から再生を再開できる。

一度に保存にできるブックマークは 1 つのみである。SaveBookmark を 2 回呼び出すと、最初のブックマークがオーバーライドされる。ブックマークは、コンピュータに固有のものである。同じ HTML ページを別のコンピュータで動作させて RestoreBookmark を呼び出すと、そのコンピュータで最後に保存されたブックマークが復元される。ブックマークが保存されていない場合はエラーが返される。

DVD イベント通知の処理

MSWebDVD オブジェクトは、特定のイベントが発生したときに、アプリケーションで指定されたメソッドに通知を送信する。これは、DVD ドメインが変更された場合、新しいペアレンタル ロック レベを検出した場合、およびアングル ブロックに入る場合などである。イベント パラメータには、イベントに関する追加情報を含むことができる。エラーメッセージや警告も同じ方法で送信される。さまざまな DVD イベント通知を取得するには、 MSWebDVD オブジェクトの OBJECT タグの下に次の HTML SCRIPT タグを入力する。

<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="DVDNotify(EventCode, Param1, Param2)">
    ProcessDVDEvent(EventCode, Param1, Param2)
</SCRIPT>

続いて、次のコード例に示すように、スクリプトにおいてイベント コードおよび ProcessDVDEvent 関数を定義する。(イベント処理関数には任意の名前を付けることができる。"ProcessEvents" である必要はない。)イベント コードの詳細については、「DVD イベント通知コード」を参照すること。

<SCRIPT LANGUAGE="JScript">


// DVD イベント コードには、257 から 283 までの値が設定されている。
var EC_DVDBASE = 256;

var EC_DVD_DOMAIN_CHANGE = (EC_DVDBASE + 1);
var EC_DVD_TITLE_CHANGE = (EC_DVDBASE + 2);
var EC_DVD_CHAPTER_START = (EC_DVDBASE + 3);
var EC_DVD_AUDIO_STREAM_CHANGE = (EC_DVDBASE + 4);
var EC_DVD_SUBPICTURE_STREAM_CHANGE = (EC_DVDBASE + 5);
var EC_DVD_ANGLE_CHANGE  = (EC_DVDBASE + 6);
var EC_DVD_BUTTON_CHANGE = (EC_DVDBASE + 7);
var EC_DVD_VALID_UOPS_CHANGE = (EC_DVDBASE + 8);
var EC_DVD_STILL_ON  = (EC_DVDBASE + 9);
var EC_DVD_STILL_OFF  = (EC_DVDBASE + 10);
var EC_DVD_CURRENT_TIME  = (EC_DVDBASE + 11); // MSWebDVD では使用しない
var EC_DVD_ERROR  = (EC_DVDBASE + 12);
var EC_DVD_WARNING  = (EC_DVDBASE + 13);
var EC_DVD_CHAPTER_AUTOSTOP  = (EC_DVDBASE + 14);
var EC_DVD_NO_FP_PGC  = (EC_DVDBASE + 15);
var EC_DVD_PLAYBACK_RATE_CHANGE  = (EC_DVDBASE + 16);
var EC_DVD_PARENTAL_LEVEL_CHANGE  = (EC_DVDBASE + 17);
var EC_DVD_PLAYBACK_STOPPED  = (EC_DVDBASE + 18);
var EC_DVD_ANGLES_AVAILABLE  = (EC_DVDBASE + 19);
var EC_DVD_PLAYPERIOD_AUTOSTOP  = (EC_DVDBASE + 20);
var EC_DVD_BUTTON_AUTO_ACTIVATED  = (EC_DVDBASE + 21);
var EC_DVD_CMD_START  = (EC_DVDBASE + 22);            // MSWebDVD では使用しない
var EC_DVD_CMD_END = (EC_DVDBASE + 23);               // MSWebDVD では使用しない
var EC_DVD_DISC_EJECTED  = (EC_DVDBASE + 24);
var EC_DVD_DISC_INSERTED  = (EC_DVDBASE + 25);
var EC_DVD_CURRENT_HMSF_TIME  = (EC_DVDBASE + 26);
var EC_DVD_KARAOKE_MODE  = (EC_DVDBASE + 27);


var nCurDomain;
var nCurParentalLevel;
  
function ProcessDVDEvent(EventCode, Param1, Param2)
{
switch (EventCode)
  {
case EC_DVD_DOMAIN_CHANGE:
nCurDomain = Param1;
// 何か行う。
break;
case EC_DVD_PARENTAL_LEVEL_CHANGE:
nCurParentalLevel = Param1;
// 何か行う
break;
      
// 他のイベントを処理する
      
default:
break;
  }

}
</SCRIPT>

UOP イベント通知の処理

MSWebDVD オブジェクトは、ディスクによって特定のユーザー動作 (UOP) が有効または無効になったときに、UOP イベント通知を送信してアプリケーションに知らせる。各ユーザー動作には独自のイベントがあり、その動作が有効か無効かを示す 1 つの Boolean パラメータが設定されている。個々のイベントの詳細については、「MSWebDVD イベント」を参照すること。

処理対象の各イベントに対して、次の例のようにイベント ハンドラを指定する。(任意のハンドラ メソッドを呼び出すことができる。)

<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="PlayForwards(bEnabled)">
    PlayForwardsEventHandler(bEnabled)
</SCRIPT>
次に、イベントに適切に応答するようにハンドラ メソッドを定義する。ここでは、"button_Play" 変数はアプリケーションの "Play" ボタンの id 属性であると仮定する。
function PlayForwardsEventHander(bEnabled)
{
if(bEnabled == true)
button_Play.disabled = false;
else
button_Play.disabled = true;
}

HTML コンテンツとビデオの同期化

ディスクからのタイムコード イベントを処理することによって、Web アプリケーションは HTML コンテンツをビデオと同期化できる。たとえば、ビデオの指定された位置でページ上のイメージまたはテキストを変更することができる。次のコード例により、JScript 関数呼び出しをタイムコード イベントに同期化させる方法を示す。
//DVDTriggerPoints 配列は、各トリガのフレーム数を保持する。昇順でなければならない。
//timecode2frames() を使用して、タイムコード (hh:mm:ss:ff) をフレームの合計数に変換する。

var DVDTriggerPoints = new Array(
timecode2frames("01:15:24:00"), 
timecode2frames("01:23:02:00"));

//DVDTriggerProcs 配列は、DVDTimePoints で定義された各トリガ ポイントで呼び出される関数を保持する。
var DVDTriggerProcs = new Array(
"showDogPic();",
"showCatPic();");

//DVDTriggerIndex は現在のトリガ (DVDTriggerPoints および DVDTriggerProcs を示す) を把握する。
var DVDTriggerIndex = 0;

//DVD イベントを処理する
function ProcessDVDEvent(EventCode, Param1, Param2) {
  switch (EventCode) {
case EC_DVD_CURRENT_HMSF_TIME:
          if(MSWebDVD.CurrentDomain == 4) {  //ディスクが再生中でなければ、チェックは必要ない。
             if (DVDTriggerIndex < DVDTimePoints.length) {  //チェックすべきトリガ ポイントは残っているか?
currentDVDTime = (MSWebDVD.DVDTimeCode2bstr(Param1));
                 if (timecode2frames(currentDVDTime)>= DVDTriggerPoints[DVDTimeIndex]) {
// トリガ ポイントが過ぎたら、関連する関数を実行する。
eval(DVDTriggerProcs[DVDTimeIndex++]);
                 }
             }
          }
break;
 
// 他のイベントを処理する。
   }
}

function timecode2frames(timeCode) {

   if (timeCode != "undefined") {
return timeCode.substring(0,2)*108000
+ timeCode.substring(3,5)*1800
+ timeCode.substring(6,8)*30
+ timeCode.substring(9,11);
   } else {
return 0;
   }
}

LCID の操作

LCID すなわち "ロケール識別子" は、特定の地理的な範囲を識別できる、いくつかの異なる値を含んだ 32 ビット データ型である。この内部値の 1 つが "プライマリ言語 ID" であり、これによって英語、スペイン語、ロシア語など、地域やロケールの基本的な言語を識別する。

2 つのメソッド (SelectDefaultAudioLanguageSelectDefaultSubpictureLanguage) に対する入力パラメータとして、MSWebDVD には完全に有効な LCID が必要である。これは Windows® で認識される有効な LCID の場合もあれば、認識されない LCID の場合もある。(ホスト システムが、フォント、キーボード マッピングなどで実際にロケールをサポートしている必要はない。)次の表に、一般的な LCID および、あまり一般的でない LCID (Windows がデフォルトでは認識しないにも関わらず MSWebDVD に対して有効) を示す。これは、使用できる LCID の完全なリストではない。Windows が認識する LCID の完全なリストなど、LCID の詳細については、MSDN オンライン ドキュメント (http://msdn.microsoft.com) を参照すること。
有効な LCID の一部
アフリカーンス語 0x0436 アルバニア語 0x041c アラビア語 (アルジェリア) 0x1401
アラビア語 (バーレーン) 0x3c01 アラビア語 (エジプト) 0x0c01 アラビア語 (イラク) 0x0801
アラビア語 (ヨルダン) 0x2c01 アラビア語 (クエート) 0x3401 アラビア語 (レバノン) 0x3001
アラビア語 (リビア) 0x1001 アラビア語 (モロッコ) 0x1801 アラビア語 (オマーン) 0x2001
アラビア語 (カタール) 0x4001 アラビア語 (サウジアラビア) 0x0401 アラビア語 (シリア) 0x2801
アラビア語 (チュニジア) 0x1c01 アラビア語 (アラブ首長国連邦) 0x3801 アラビア語 (イエメン) 0x2401
バスク語 0x042d ベラルーシ語 0x0423 ブルガリア語 0x0402
カタロニア語 0x0403 中国語 (香港) 0x0c04 中国語 (中華人民共和国) 0x0804
中国語 (シンガポール) 0x1004 中国語 (台湾) 0x0404 クロアチア語 0x041a
チェコ語 0x0405 デンマーク語 0x0406 オランダ語 (ベルギー) 0x0813
オランダ語 (標準) 0x0413 英語 (オーストラリア) 0x0c09 英語 (ベリーズ) 0x2809
英語 (カナダ) 0x1009 英語 (カリブ) 0x2409 英語 (アイルランド) 0x1809
英語 (ジャマイカ) 0x2009 英語 (ニュージーランド) 0x1409 英語 (南アフリカ共和国) 0x1c09
英語 (トリニダード) 0x2c09 英語 (イギリス) 0x0809 英語 (アメリカ) 0x0409
エストニア語 0x0425 フェロー語 0x0438 ペルシア語 0x0429
フィンランド語 0x040b フランス語 (ベルギー) 0x080c フランス語 (カナダ) 0x0c0c
フランス語 (ルクセンブルク) 0x140c フランス語 (標準) 0x040c フランス語 (スイス) 0x100c
ドイツ語 (オーストリア) 0x0c07 ドイツ語 (リヒテンシュタイン) 0x1407 ドイツ語 (ルクセンブルク) 0x1007
ドイツ語 (標準) 0x0407 ドイツ語 (スイス) 0x0807 ギリシャ語 0x0408
ヘブライ語 0x040d ハンガリー語 0x040e アイスランド語 0x040f
インドネシア語 0x0421 イタリア語 (標準) 0x0410 イタリア語 (スイス) 0x0810
日本語 0x0411 韓国語 0x0412 韓国語 (Johab) 0x0812
ラトヴィア語 0x0426 リトアニア語 0x0427 マレー語 (マレーシア) 0x043e
マレー語 (ブルネイ) 0x083e ノルウェー語 (ブークモール) 0x0414 ノルウェー語 (ニーノシク) 0x0814
ポーランド語 0x0415 ポルトガル語 (ブラジル) 0x0416 ポルトガル語 (標準) 0x0816
ルーマニア語 0x0418 ロシア語 0x0419 セルビア語 (キリル) 0x0c1a
セルビア語 (ラテン) 0x081a スロバキア語 0x041b スロヴェニア語 0x0424
スペイン語 (アルゼンチン) 0x2c0a スペイン語 (ボリビア) 0x400a スペイン語 (チリ) 0x340a
Spanish (Colombia)スペイン語 (コロンビア) 0x240a スペイン語 (コスタリカ) 0x140a スペイン語 (ドミニカ共和国) 0x1c0a
スペイン語 (エクアドル) 0x300a スペイン語 (エルサルバドル) 0x440a スペイン語 (グアテマラ) 0x100a
スペイン語 (ホンジュラス) 0x480a スペイン語 (メキシコ) 0x080a スペイン語 (現代) 0x0c0a
スペイン語 (ニカラグア) 0x4c0a スペイン語 (パナマ) 0x180a スペイン語 (パラグアイ) 0x3c0a
スペイン語 (ペルー) 0x280a スペイン語 (プエルトリコ) 0x500a スペイン語 (旧来) 0x040a
スペイン語 (ウルグアイ) 0x380a スペイン語 (ベネズエラ) 0x200a スワヒリ語 0x0441
スウェーデン語 0x041d スウェーデン語 (フィンランド) 0x081d タイ語 0x041e
トルコ語 0x041f ウクライナ語 0x0422    

いくつかの MSWebDVD メソッドおよびプロパティは、サウンドトラックまたは字幕で利用できる言語を示すロケール識別子 (LCID) 値を返す。この情報を利用するには、アプリケーションによって、返された LCID からプライマリ言語 ID を抽出する必要がある。そのためには、iLCID の値と 0x3FF の間でビットごとの AND 演算を実行する。 (プライマリ言語 ID は、LCID の最下位の 10 ビットに含まれている。)次のコード例により、その方法を示す。

iPrimaryLang = iLCID & 0x3FF;

プライマリ言語 ID から、人間が読める文字列を取得するには、次の例のように GetLangFromLangID を呼び出す。

sLanguage = DVD.GetLangFromLangID(iPrimaryLang);

LCID および言語の識別子の詳細については、Microsoft® Platform SDK を参照すること。

次の表に、前の表の LCID に対するプライマリ言語 ID を示す。

有効なプライマリ言語 ID の一部
アフリカーンス語0x36アルバニア語0x1cアラビア語0x01バスク語0x2d
ベラルーシ語0x23ブルガリア語0x02カタロニア語0x03中国語0x04
クロアチア語0x1aチェコ語0x05デンマーク語0x06オランダ語0x13
英語0x09エストニア語0x25フェロー語0x38ペルシア語0x29
フィンランド語0x0bフランス語0x0cドイツ語0x07ギリシャ語0x08
ヘブライ語0x0dハンガリー語0x0eアイスランド語0x0fインドネシア語0x21
イタリア語0x10日本語0x11韓国語0x12ラトヴィア語0x26
リトアニア語0x27マレー語0x3eノルウェー語0x14ポーランド語0x15
ポルトガル語0x16ルーマニア語0x18ロシア語0x19セルビア語0x1a
スロバキア語0x1bスロヴェニア語0x24スペイン語0x0aスワヒリ語0x41
スウェーデン語0x1dタイ語0x1eトルコ語0x1fウクライナ語0x22

カラオケ ディスクの再生

カラオケ ディスクは DVD-Video ディスクの 一種であり、同じ操作構造を持っている。曲は一般にタイトルとしてフォーマットされ、タイトルは演奏者や音楽スタイルなどの条件に基づいてタイトル セットにグループ化できる。カラオケと他の種類の DVD-Video との主な違いはオーディオ ストリームである。すべてのカラオケ ディスクには、マルチチャンネル オーディオ (通常は Dolby AC-3) が含まれている。チャンネル 0 および 1 には常にバックグラウンドの演奏が含まれ、チャンネル 2 〜 5 にはそれぞれガイド ボーカル、ガイド メロディ、サウンド エフェクトを含むことができる。カラオケ アプリケーションは、各補助チャンネルについてボリュームと出力先スピーカを制御できる。

カラオケの再生には、DVD ナビゲータから送信されるマルチチャンネル カラオケ ミキシング情報をサポートするデコーダも必要である。具体的に言えば、このデコーダは DVD カラオケ プロパティ セット (AM_KSPROPSETID_DvdKaraoke) をサポートする必要がある。

DVD ナビゲータはディスク上にカラオケ コンテンツを検出してカラオケ モードに入ると、デコーダにそれを通知し、デコーダはアプリケーションによって明示的にオンにされるまで上位 3 つのチャンネル (補助チャンネル) を無音状態にする。カラオケ アプリケーションの基本的な動作は次のとおりである。

  1. 補助チャンネル数とその内容を確認する。
  2. チャンネルの内容を表示してユーザーがいつでも任意の補助チャンネルをオンまたはオフにできるようにするユーザー インターフェイスを提供する。

DVD テキスト文字列の操作

DVD ディスク、特にカラオケ ディスクには、ビデオまたはオーディオ コンテンツを補足するテキスト情報のデータベースが含まれている場合がある。カラオケ ディスク上のそのようなテキストとしては、曲名、アーティスト名、レコード レーベルなどがある。このテキストは、複数の言語で存在することができる。このような文字列はオプションであり、ディスク上に必ず含めなければならないわけではない。文字列が含まれる場合は、DVD ボリュームの論理的な階層を厳密に反映するように構成される。各文字列の前には、その文字列がディスク構造のどの部分に属するかを識別し、文字列の内容の手がかりとなるような数字が付加される。

テキスト文字列には、基本的な型として構造識別子と内容文字列の 2 つがある。0x01 〜 0x20 の値を持つ型が構造識別子である。これは空の文字列であり、数値コードはその後に続く内容文字列が属する論理構造を識別するために使用される。この構造は、DVD ディスクの内容 (ボリューム、タイトル、チャプターなど) の論理構造とかなり厳密に対応している。もう一方の型は、ユーザー インターフェイスで視聴者に表示される情報を保持する内容文字列を識別する。内容文字列の使用方法は厳密に定義されていないため、DVD 作成者はさまざまな方法でそれを使用できる。

これまで、DVD テキスト文字列はほとんどカラオケ ディスク専用に使用されてきた。これらのディスクは、ほとんどの場合、0x01 と 0x02 の構造識別子と 0x30 の内容文字列を使用している。しかし、時がたつにつれて、より多くの種類の DVD-Video ディスクにテキスト文字列が含まれるようになると考えるのが妥当である。これらの文字列は、より複雑に構成され、ディスクの内容の詳細な記述を提供するようになるであろう。

次のコードにより、ディスク上のテキスト文字列の言語ブロックの数を確認する方法、およびユーザーが言語を選択できるように表示するための人間が読める文字列を取得する方法を示す。このコードでは、文字列は "TextLanguageList" と呼ばれる HTML SELECT 要素に追加される。LCID およびプライマリ言語の詳細については、「GetLangFromLangID」を参照すること。

function GetTextLanguages()
  {
//テキスト ブロックの数を取得する。
var numLangs = DVD.GetDVDTextNumberOfLanguages(); 
	  var iLCID;
	  var iPrimaryLang;
	  var sLanguage;
	  var oOption;

	for (j = 0; j < numLangs; j++)
	{
//言語ブロックに対するロケール識別子を取得する
		iLCID = DVD.GetDVDTextLanguageLCID(j);
    
//LCID からプライマリ言語 ID を取得する
		iPrimaryLang = iLCID & 0x3FF;
    
//プライマリ言語 ID から、人間が読める文字列を取得する
		sLanguage = DVD.GetLangFromLangID(iPrimaryLang);
    
//HTML  ページ上の SELECT 要素に追加する
		oOption = document.createElement("OPTION");
		oOption.text = sLanguage;
		document.all.TextLanguageList.add(oOption);
	} 
	
  } //関数 GetTextStrings の終わり

次のテスト コードは、文字列を列挙してテキスト文字列の型を検査する方法を示している。ここでは、数値文字列の型をどのように使用して内容文字列を編成するのかを理解する目的で、単に結果を "myTextArea" と呼ばれる HTML TEXTAREA 要素にダンプしている。実際のアプリケーションでは独自のデータ構造を作成して文字列を保持するか、または視聴者にとって便利な方法で文字列を表示する。

// iLanguage は、言語ブロックに対する 0 から始まるインデックスである
function GetTextStrings(iLanguage)
   {
	var numStrings, stringType, j; 
	numStrings = DVD.GetDVDTextNumberOfStrings(iLanguage);
	
	for( j = 0; j < numStrings; j++)
      	{
	  stringType = DVD.GetDVDTextStringType(iLanguage, j);

	  if(stringType > 0x20) //実際にはここで何らかのテキストを読み込む
          {
	    myTextArea.value += (stringType + ": " + DVD.GetDVDTextString(iLanguage, j) + "\n");
          }
	  else // ボリューム構造のレベルを示すノードである
			// 次の文字列を適用する
          {
            myTextArea.value += (stringType + "\n");
          }
			
        }
   } //関数 GetTextStrings の終わり

DVD テキスト文字列の型

次の表に、DVD テキスト文字列の型のサブセットの一覧を示す。値が 0x20 以下のすべての型は空の文字列であり、ディスクのコンテンツ データ構造におけるノード レベルを示すだけである。その他の文字列は、内容文字列である。ほとんどのタイトルおよび曲名の型は 0x30 である。Title、 SubTitle、および Original カテゴリ内の型によって、特定のジャンルを詳細に識別できる。これらのカテゴリの正確な意味と使用目的は公開文書に定義されており、DVD フォーラムの Web サイト (www.dvdforum.org) からダウンロードできる。

構造識別子
Volume0x01後に続く文字列が DVD ボリュームに関係することを示す。
Title0x02後に続く文字列が タイトルに関係することを示す。
ParentalID0x03後に続く文字列が 特定のペアレンタル ID に関係することを示す。
Chapter0x04後に続く文字列がチャプターに関係することを示す。
Cell 0x05後に続く文字列がセル (一般にムービーの 1 シーン) に関係することを示す。
ストリーム識別子
Audio0x10後に続く文字列がオーディオストリームに関係することを示す。
Subpicture0x11後に続く文字列がサブピクチャ ストリームに関係することを示す。
Angle0x12後に続く文字列がアングル ブロックに関係することを示す。
オーディオ チャンネル識別子
Channel0x20後に続く文字列がオーディオ ストリームの 1 つのチャンネルに関係することを示す。
一般的な内容文字列
Name0x30タイトル名、チャプター名、曲名などに対する最も一般的な識別子。
Comments0x31タイトル、チャプター、曲に関する一般的なコメント。
タイトル内容文字列
Series0x38タイトル、チャプター、曲などに関する追加情報。
Movie0x39ムービーの場合のタイトルまたはチャプターに関する追加情報。
Video 0x3aビデオの場合のタイトルまたはチャプターに関する追加情報。
Album0x3bアルバムの場合のタイトルまたはチャプターに関する追加情報。
Song0x3c曲の場合のタイトルまたはチャプターに関する追加情報。
Other0x3f他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。
二次タイトル内容文字列
Series0x40タイトル、チャプター、曲などに関する追加情報。
Movie0x41ムービーの場合のタイトルまたはチャプターに関する追加情報。
Video 0x42ビデオの場合のタイトルまたはチャプターに関する追加情報。
Album0x43アルバムの場合のタイトルまたはチャプターに関する追加情報。
Song0x44曲の場合のタイトルまたはチャプターに関する追加情報。
Other0x45他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。
オリジナル内容文字列
Series0x48タイトル、チャプター、曲などに関する追加情報。
Movie0x49ムービーの場合のタイトルまたはチャプターに関する追加情報。
Video 0x4aビデオの場合のタイトルまたはチャプターに関する追加情報。
Album0x4bアルバムの場合のタイトルまたはチャプターに関する追加情報。
Song0x4c曲の場合のタイトルまたはチャプターに関する追加情報。
Other0x4f他のジャンルまたはカテゴリーに属する場合のタイトルまたはチャプターに関する追加情報。
その他の情報内容文字列
Other Scene0x50ムービーのタイトルまたはチャプターにおける代わりのシーンに関する追加情報。
Other Cut0x51ムービーのタイトルまたはチャプターにおける代わりのカットに関する追加情報。
Other Take0x52ムービーのタイトルまたはチャプターにおける代わりのテイクに関する追加情報。