(57)【要約】  MPEG-2 Systemsの拡張されたプログラムストリームに含まれるシステムヘッダの生成において、基本ストリームＩＤが拡張ＩＤであって、かつ基本バッファサイズ情報が０バイトを表す場合に、拡張ＩＤ、マーカビットおよび拡張ストリームＩＤを含む合計２４ビットと、拡張ＩＤ、マーカビット、拡張バッファバウンドスケール情報および拡張バッファサイズバウンド情報の合計２４ビットとで表現される、拡張ＩＤと拡張ストリームＩＤとのペアを用いて多重化されるエレメンタリーストリームの再生に必要な拡張バッファサイズ情報を生成して記録する。
2008102732.tif 000002
【特許請求の範囲】
【請求項１】
ビデオデータ、オーディオデータ、およびメタデータのうち、少なくともひとつのデータを表すエレメンタリーストリームを入力する入力部と、
前記エレメンタリーストリームを分割して複数のＰＥＳペイロードを生成するＰＥＳペイロード生成部と、
前記複数のＰＥＳペイロードの各々に、当該ＰＥＳペイロードに含まれるデータを識別するための、（Ａ）８ビットで表現可能な所定の範囲の値である基本ストリームＩＤ又は（Ｂ）前記所定の範囲の外の８ビットで表現可能な値である拡張ＩＤおよび７ビットで表現可能な値である拡張ストリームＩＤの組、のいずれかを含むＰＥＳヘッダを付加して、前記複数のＰＥＳペイロードの各々にそれぞれ対応する複数のＰＥＳパケットを生成するＰＥＳパケット生成部と、
前記基本ストリームＩＤを示す８ビットの第１フィールド、前記第１フィールドに続く２ビットの第２フィールド、前記基本ストリームＩＤによって識別されるエレメンタリーストリームの再生に必要なバッファバウンドスケール情報を示す前記第２フィールドに続く１ビットの第３フィールド、および、当該エレメンタリーストリームの再生に必要なバッファサイズバウンド情報を示す前記第３フィールドに続く１３ビットの第４フィールドからなる２４ビットの基本ストリームＩＤ用バッファサイズ情報を生成する基本バッファサイズ情報生成部と、
前記所定の範囲の外の８ビットで表現可能な値であって前記拡張ＩＤとは異なる値である第一の識別ＩＤを示す８ビットの第１フィールド、前記第１フィールドに続く９ビットの第２フィールド、および、拡張ストリームＩＤを示す前記第２フィールドに続く７ビットの第３フィールドからなる２４ビットの情報（Ｃ）、および、前記所定の範囲の外の８ビットで表現可能な値であって前記拡張ＩＤとも前記第一の識別ＩＤとも異なる値である第２の識別ＩＤを示す８ビットの第１フィールド、前記第１フィールドに続く２ビットの第２フィールド、前記第２フィールドに続く前記拡張ＩＤと前記拡張ストリームＩＤとの組によって識別されるエレメンタリーストリームの再生に必要なバッファバウンドスケール情報を示す前記第２フィールドに続く１ビットの第３フィールド、および、当該エレメンタリーストリームの再生に必要なバッファサイズバウンド情報を示す前記第３フィールドに続く１３ビットの第４フィールドからなる２４ビットの情報（Ｄ）、を含む４８ビットの拡張ストリームＩＤ用バッファサイズ情報を生成する拡張バッファサイズ情報生成部と、
前記ＰＥＳパケットの各々に対応するエレメンタリーストリームを再生するための前記基本バッファサイズ情報および前記拡張バッファサイズ情報を含むシステムヘッダを含んだパックヘッダを、前記複数のＰＥＳパケットを並べたＰＥＳパケット列に付加してパックを生成するパック生成部と、
前記パックをプログラムストリームとして出力する出力部と、
を具備するデータ多重化装置。
【請求項２】
請求項１記載のデータ多重化装置において、
拡張ＩＤおよび拡張ストリームＩＤの組によって識別され、拡張バッファサイズ情報が同じ値を持つ複数のエレメンタリーストリームを多重化する場合、もしくは、拡張ＩＤおよび拡張ストリームＩＤの組によって識別される一つのエレメンタリーストリームを多重化する場合、前記基本バッファサイズ情報生成部は、基本ストリームＩＤを示す８ビットの第１フィールドの値を０ｘＦＤに設定するとともに、前記第１フィールド、前記第１フィールドに続く２ビットの第２フィールド、前記第２フィールドに続く１ビットの第３フィールド、および、前記第３フィールドに続く１３ビットの第４フィールドからなる２４ビットにて前記拡張バッファサイズ情報を生成する、データ多重化装置。
【請求項３】
請求項１又は２記載のデータ多重化装置により生成される前記プログラムストリームから前記エレメンタリーストリームを分離するデータ分離装置であって、
前記プログラムストリームを入力する入力部と、
前記パックヘッダを解釈するパックヘッダ解釈部と、
前記ＰＥＳヘッダを解釈するＰＥＳヘッダ解釈部と、
前記ＰＥＳペイロードを抽出して前記エレメンタリストームを得るＰＥＳペイロード抽出部と、
前記プログラムストリームに対する処理先を選択する入力選択部と、
前記エレメンタリーストリームの出力先を選択する出力選択部と、
前記パックヘッダ解釈部、前記ＰＥＳヘッダ解釈部、前記ＰＥＳペイロード抽出部、前記入力選択部および前記出力選択部の動作を制御するパック解釈制御部と、を具備し、
前記パックヘッダ解釈部は、
前記パックヘッダの処理先を選択するパックヘッダ入力選択部と、
前記パックヘッダ本体を解釈するパックヘッダ本体解釈部と、
前記システムヘッダ本体を解釈するシステムヘッダ本体解釈部と、
前記基本バッファサイズ情報を解釈する基本バッファサイズ情報解釈部と、
前記拡張バッファサイズ情報を解釈する拡張バッファサイズ情報解釈部と、
前記パックヘッダ入力選択部、前記パックヘッダ本体解釈部、前記システムヘッダ本体解釈部、前記基本バッファサイズ情報解釈部および前記拡張バッファサイズ情報解釈部の動作を制御するパックヘッダ解釈制御部を有し、
前記パックヘッダ解釈制御部は、前記パック生成制御部から動作開始の指示を受けた際、前記パックヘッダ本体解釈部を起動し、システムヘッダの解釈を行う場合には前記システムヘッダ本体解釈部、前記基本バッファサイズ情報解釈部および前記拡張バッファサイズ情報解釈部のいずれかひとつ、または両方を起動する、データ分離装置。
【請求項４】
請求項３記載のデータ分離装置において、
前記基本バッファサイズ情報解釈部は、基本ストリームＩＤを示す８ビットの第１フィールドが０ｘＦＤの場合、続く１６ビットによって示される基本バッファサイズ情報を、全ての拡張ＩＤおよび拡張ストリームＩＤの組によってＰＥＳ化される１つ以上のエレメンタリーストリームに対する拡張バッファサイズ情報であると解釈する、データ分離装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビデオデータ、オーディオデータおよびメタデータを同期して再生可能とするためのデータ多重化方法及び装置とデータ分離方法及び装置に関する。
【背景技術】
【０００２】
ビデオデータ、オーディオデータおよびメタデータを同期して再生させるために、これらのデータのエレメンタリーストリームを多重化する方法に関して、MPEG-2 Systems (ISO/IEC 13818-1)が国際標準方式として策定されている（ITU-T Rec. H.222.0 (2000)|ISO/IEC 13818-1:2000 (MPEG-2 Systems)）。当初のMPEG-2 Systems規格では、MPEG規格ファミリーであるMPEG-1, MPEG-2およびMPEG-4などの動画像符号化方式により符号化されたビデオ符号化データ、オーディオ符号化データおよびユーザがプライベートに定義したデータを多重化する仕組みが組み込まれていた。この後、MPEG-2 Systems規格について、メタデータの多重化をサポートするという規格の拡張が行われた（ITU-T Rec. H.222.0 (2000)/Amd.2(06/2003)|ISO/IEC 13818-1:2000/Amd.2:2004）。【０００３】
MPEG-2 Systems規格では、トランスポートストリーム（ＴＳ）とプログラムストリーム（ＰＳ）という２種類の多重化フォーマットが定義されている。ＴＳは放送で活用されている形式であり、プログラムストリームはＤＶＤで活用されている。プログラムストリームは複数のパックと呼ばれる単位からできている。パックは、１つのパックヘッダと０個以上のＰＥＳパケットからできている。パックヘッダは、１つのパックヘッダ本体と０個または１個のシステムヘッダからできており、当該パックが受信される時刻情報を含んでいる。ＰＥＳパケットは、１つのＰＥＳヘッダと０バイト以上のＰＥＳペイロードからできている。ＰＥＳペイロードには、ビデオデータ、オーディオデータおよびメタデータ等の要素（エレメンタリーストリーム）が適当なサイズで分割されて記録されている。ＰＥＳヘッダには、ＰＥＳペイロードに含むデータを分類するための識別子であるストリームＩＤが記録されており、同一ＩＤのＰＥＳペイロードを連結することにより、分割されたエレメンタリーストリームから１つの連続したエレメンタリーストリームを得ることができる。さらに、ＰＥＳヘッダには、ＰＥＳペイロードに含まれるデータがビデオのピクチャやオーディオのフレームの切れ目を含む場合に、次に始まるピクチャやフレームの再生および表示時刻を、パックヘッダ中の受信時刻情報で示される受信時刻からの相対時刻で記録することができる。【０００４】
システムヘッダは、当該プログラムストリームのシステム的な特徴に関する情報を含んでいる。例えば、あるストリームＩＤのエレメンタリーストリームの生成および再生に必要なバッファサイズ情報がストリームＩＤとバッファサイズを対にした形で記録される。【０００５】
ITU-T Rec. H.222.0 (2000)/Amd.2(06/2003)|ISO/IEC 13818-1:2000/Amd.2:2004に開示された、メタデータ多重化のためのMPEG-2 Systems規格の拡張では、複数のメタデータを識別できるように、ＰＥＳヘッダで用いるストリームＩＤに新たに拡張ＩＤ(extended_stream_id = 0xFD)という値を定義し、拡張ＩＤの場合は新たに拡張ストリームＩＤ(stream_id_extension）と呼ばれる７ビットの値を使って１２８種類のエレメンタリーストリームを識別できるようになった。【０００６】
しかしながら、ITU-T Rec. H.222.0 (2000)/Amd.2(06/2003)|ISO/IEC 13818-1:2000/Amd.2:2004に開示された手法によるMPEG-2 Systemsの拡張では、システムヘッダでの拡張ストリームＩＤ毎のバッファサイズ情報（拡張バッファサイズ情報）の記録手段は拡張されず、拡張ストリームＩＤ毎に拡張バッファサイズ情報を記録する手段が提供されなかった。そのため、拡張ＩＤに対して一括でバッファサイズ情報を記録することのみが現状では可能であり、拡張ストリームＩＤ毎に拡張バッファサイズ情報を記録する手段を提供するための、規格の追加拡張が望まれる。【０００７】
一方、ITU-T Rec. H.222.0 (2000)/Amd.2(06/2003)|ISO/IEC 13818-1:2000/Amd.2:2004に開示された拡張を利用して既に製品が発売されている。従って、規格の追加拡張を行う際には、市場の混乱を招かないように「バックワードコンパチビリティ」を有することが産業上望まれる。さらに、既存の規格に沿って作成されたデータ（プログラムストリーム）が、追加拡張された規格に沿って開発された機器においても正常に再生できる「フォワードコンパチビリティ」を確保することが望ましい。
【発明の開示】
【０００８】
本発明は、従来の機器での再生時及び従来のデータの新しい機器での再生時にエラーが発生することなく、拡張ストリームＩＤ毎に拡張バッファサイズ情報を記録できるデータ多重化／分離方法および装置を提供することを目的とする。
【０００９】
本発明の一態様によると、ビデオデータ、オーディオデータ、およびメタデータのうち、少なくともひとつのデータを表すエレメンタリーストリームを入力する入力部と、前記エレメンタリーストリームを分割して複数のＰＥＳペイロードを生成するＰＥＳペイロード生成部と、前記複数のＰＥＳペイロードの各々に、当該ＰＥＳペイロードに含まれるデータを識別するための、（Ａ）基本ストリームＩＤ又は（Ｂ）拡張ＩＤおよび拡張ストリームＩＤの組、のいずれかを含むＰＥＳヘッダを付加して、前記複数のＰＥＳペイロードの各々にそれぞれ対応する複数のＰＥＳパケットを生成するＰＥＳパケット生成部と、前記基本ストリームＩＤを示す８ビットの第１フィールド、前記第１フィールドに続く２ビットの第２フィールド、前記基本ストリームＩＤによって識別されるエレメンタリーストリームの再生に必要なバッファバウンドスケール情報を示す前記第２フィールドに続く１ビットの第３フィールド、および、当該エレメンタリーストリームの再生に必要なバッファサイズバウンド情報を示す前記第３フィールドに続く１３ビットの第４フィールドからなる２４ビットの基本ストリームＩＤ用バッファサイズ情報を生成する基本バッファサイズ情報生成部と、第一の識別ＩＤを示す前記基本ストリームＩＤまたは前記拡張ＩＤで指定可能な値ではない値を持つ８ビットの第１フィールド、前記第１フィールドに続く９ビットの第２フィールド、および、拡張ストリームＩＤを示す前記第２フィールドに続く７ビットの第３フィールドからなる２４ビットの情報（Ｃ）、および、第二の識別ＩＤを示す前記基本ストリームＩＤ、前記拡張ＩＤ、または前記第一の識別ＩＤで指定可能な値ではない値を持つ８ビットの第１フィールド、前記第１フィールドに続く２ビットの第２フィールド、前記第２フィールドに続く前記拡張ＩＤと前記拡張ストリームＩＤとの組によって識別されるエレメンタリーストリームの再生に必要なバッファバウンドスケール情報を示す前記第２フィールドに続く１ビットの第３フィールド、および、当該エレメンタリーストリームの再生に必要なバッファサイズバウンド情報を示す前記第３フィールドに続く１３ビットの第４フィールドからなる２４ビットの情報（Ｄ）、を含む４８ビットの拡張ストリームＩＤ用バッファサイズ情報を生成する拡張バッファサイズ情報生成部と、前記ＰＥＳパケットの各々に対応するエレメンタリーストリームを再生するための前記基本バッファサイズ情報および前記拡張バッファサイズ情報を含むシステムヘッダを含んだパックヘッダを、前記複数のＰＥＳパケットを並べたＰＥＳパケット列に付加してパックを生成するパック生成部と、前記パックをプログラムストリームとして出力する出力部と、を具備するデータ多重化装置が提供される。
【図面の簡単な説明】
【００１０】
【図１】図１はMPEG-2 Systems規格におけるプログラムストリームの構造を示す図である。
【図２】図２は現行MPEG-2 Systems規格に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットを示す図である。
【図３】図３は第１の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットを示す図である。
【図４】図４は第１の実施形態に則って生成されたデータを第１の実施形態に則って開発された機器で再生する際の動作を説明する図である。
【図５】図５は第１の実施形態に則って生成されたデータを従来のMPEG-2 Systems規格に則って開発された機器で再生する際の動作を説明する図である。
【図６】図６は従来の拡張されたMPEG-2 Systems規格に則って生成されたデータを第１の実施形態に則って開発された機器で再生する際の動作を説明する図である。
【図７】図７は第１の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットの変形例を示す図である。
【図８】図８は第１の実施形態を従うシステムヘッダ内のバッファサイズ情報の記録フォーマットの他の変形例を示す図である。
【図９】図９は第２の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットを示す図である。
【図１０】図１０は第２の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットの変形例を示す図である。
【図１１】図１１は第２の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットの他の変形例を示す図である。
【図１２】図１２は第１および第２の実施形態に従うデータ多重化装置全体を示すブロック図である。
【図１３】図１３は図１２中のパックヘッダ生成部を示すブロック図である。
【図１４】図１４はデータ多重化装置の典型的な動作を説明するフローチャートである
【図１５】図１５は第１および第２の実施形態に従うデータ分離装置全体を示すブロック図である。
【図１６】図１６は図１５中のパックヘッダ解釈部を示すブロック図である。
【図１７】図１７はデータ分離装置の典型的な動作を説明するフローチャートである。
【図１８】図１８は第３の実施形態に従うシステムヘッダ内のバッファサイズ情報の記録フォーマットを示す図である。
【図１９】図１９はデータ分離装置による分離方法を示すフローチャートである。
【発明を実施するための最良の形態】
【００１１】
（プログラムストリームの基本構成）  
まず、図１を用いてプログラムストリーム（ＰＳ）について説明する。図１に示されるように、プログラムストリームは複数のパックと呼ばれる単位からできている。パックは、１つのパックヘッダと０個以上のＰＥＳパケットからできている。【００１２】
パックヘッダは、１つのパックヘッダ本体と０個または１個のシステムヘッダからできており、パックが受信される時刻を示す情報（受信時刻情報）を含んでいる。【００１３】
ＰＥＳパケットは、１つのＰＥＳヘッダと０バイト以上のＰＥＳペイロードからできている。ＰＥＳペイロードには、ビデオデータ、オーディオ（音声を含む）データおよびメタデータ等の要素（エレメンタリーストリーム）から適当なサイズで切り出された部分データが記録されている。【００１４】
ＰＥＳヘッダには、第１にＰＥＳペイロードに含まれるデータを識別（分類）するための識別子であるストリームＩＤが記録される。同一ストリームＩＤのＰＥＳペイロードを連結することにより、分割されたエレメンタリーストリームから１つの連続したエレメンタリーストリームを得ることができる。【００１５】
ＰＥＳヘッダには、第２にＰＥＳペイロードに含まれるデータのバイト数情報が記録される。ＰＥＳペイロードには、エレメンタリーストリームからバイト数情報で示されるサイズ分だけ切り出された部分データが記録されることになる。【００１６】
ＰＥＳヘッダには、第３にＰＥＳペイロードに含まれるデータがビデオのピクチャやオーディオのフレームの切れ目を含む場合には、次に始まるピクチャやフレームの再生および表示時刻を示す再生表示時刻情報がパックヘッダ中の受信時刻情報からの相対時刻情報として記録される。【００１７】
システムヘッダは、プログラムストリームのシステム的な特徴に関する情報を含んでいる。例えば、あるストリームＩＤのエレメンタリーストリームの生成と再生に必要なバッファサイズを示すバッファサイズ情報（以下、後述する拡張バッファサイズ情報と区別するため、これを基本バッファサイズ情報という）がストリームＩＤとのペアとしてシステムヘッダに記録される。基本バッファサイズ情報は、例えば図２に示すように８ビットのストリームＩＤ(stream_ID)、２ビットのマーカビット’11’、１ビットのバッファバウンドスケール情報(P-STD_buffer_bound_scale)および１３ビットのバッファサイズバウンド情報(P-STD_buffer_size_bound)の合計２４ビットで表現される。システムヘッダには、さらに後述する拡張バッファサイズ情報も記録される。【００１８】
以下、プログラムストリームを生成するために本実施形態に従ってエレメンタリーストリームを多重化するデータ多重化方法について説明する。【００１９】
（第１の実施形態）  
次に、図３を用いて本発明の第１の実施形態に従う、拡張バッファサイズ情報（拡張ストリームＩＤに対するバッファサイズ情報）の記録方法を説明する。プログラムストリーム全体の構成は、図１に示した通りである。【００２０】
ITU-T Rec. H.222.0 (2000)/Amd.2(06/2003)|ISO/IEC 13818-1:2000/Amd.2:2004（その内容は本願に引用して援用される）によれば、拡張ＩＤは0xFDと定義されている。ITU-T Rec. H.222.0 (2000)|ISO/IEC 13818-1:2000 (MPEG-2 Systems) （その内容は本願に引用して援用される）によれば、基本バッファサイズ情報は図３の実線枠内に示されるように１ビットのバッファバウンドスケール情報P-STD_buffer_bound_scaleと１３ビットのバッファサイズバウンド情報P-STD_buffer_size_boundの組み合わせで表現されると定義されており、基本バッファサイズは以下のように算出される。  
（ａ）P-STD_buffer_bound_scaleが０の場合は、128*P-STD_buffer_size_boundバイト  
（ｂ）P-STD_buffer_bound_scaleが１の場合は、1024*P-STD_buffer_size_boundバイト
一般に、バッファサイズが０バイトであることはあり得ない。このことを利用して、第１の実施形態では図３の斜体文字で示すように、基本ストリームＩＤが拡張ＩＤ（0xFD）で、かつ基本バッファサイズ情報（P-STD_buffer_size_bound）が０、すなわちバッファサイズが０バイトであることを表す場合は、２つの破線枠内に示されるように拡張バッファサイズ情報を記録する。【００２１】
図３によると、拡張バッファサイズ情報は８ビットの拡張ストリームＩＤ(stream_id_extension)、２ビットのマーカビット’11’、７ビットのリザーブ情報（reserved）および７ビットの拡張ストリームＩＤ(stream_id_extension)を含む計２４ビット（第１拡張情報）と、２ビットのマーカビット’11’、１ビットのバッファバウンドスケール情報(P-STD_buffer_bound_scale_entension)および１３ビットのバッファサイズバウンド情報(P-STD_buffer_size_bound_entension)の合計２４ビット（第２拡張情報）で表現される。この際、図中の破線枠で囲まれた部分は、実線枠で囲まれた部分と類似の構造を採ることがコンパチビリティ確保のキーポイントとなっている。【００２２】
（新規機器での再生動作）  
次に、図４を用いて第１の実施形態に則って生成されたプログラムストリームを第１の実施形態に則って開発された新規機器で再生する際の動作について説明する。ここでは、プログラムストリームとしてデータ系列FD, C0, 00, FD, FF, 83, FD, C0, 9C（１６進数表記）が入力されたと仮定する。図４の左側には、データ系列FD, C0, 00, FD, FF, 83, FD, C0, 9Cが２進数表記されている。【００２３】
まず、プログラムストリームの最初の３バイトのうち、FDはstream_idとして解釈される。続くC0の先頭２ビットは、’11’として解釈される。C0の３ビット目は、P-STD_buffer_bound_scaleとして解釈される（値は0）。C0の４ビット目以降とこれに続く00は、P-STD_buffer_boundとして解釈される（値は0）。【００２４】
このようにP-STD_buffer_boundが0であり、かつstream_idが0xFDであることから、プログラムストリームの以降の６バイト（FD, FF, 83, FD, C0, 9C）は拡張バッファサイズ情報に用いられていると判断される（図４のif文の条件が真になる）。以下、このことについて説明する。【００２５】
プログラムストリームの次の３バイトのうち、FDは’FD’として解釈される。続くFFの先頭２ビットは’11’として解釈される。FFの３ビット目以降とこれに続く83の１ビット目は、reservedとして解釈される（値は0x7F）。MPEG-2 Systems規格では、reservedは全てのビットが１であると定義されている。83の２ビット目以降はstream_id_extensionとして解釈される（値は0x03）。これにより、次に続く３バイトで表現されるバッファサイズ情報は、拡張ストリームＩＤ：0x03に対する拡張バッファサイズ情報であると識別できる。【００２６】
プログラムストリームの次の３バイトのうち、FDは’FD’として解釈される。C0の先頭２ビットは’11’として解釈される。C0の３ビット目はP-STD_buffer_bound_scale_extensionとして解釈される（値は0）。C0の４ビット目以降と9CはP-STD_buffer_bound_extensionとして解釈される（値は0x9C）。従って、図４に示した例では拡張ストリームＩＤ：0x03に対するバッファサイズは、0x9Cは１０進数表記で156であるため、128 * 156 = 19,968バイトとなる。【００２７】
（バックワードコンパチビリティ）  
次に、図５を用いて第１の実施形態に則って作成されたプログラムストリームが既存の機器で解釈される流れを示す。ここで用いているプログラムストリームであるデータ系列は、図４と同様にFD, C0, 00, FD, FF, 83, FD, C0, 9C（１６進数表記）である。【００２８】
プログラムストリームの最初の３バイトのうち、FDはstream_idとして解釈される。C0の先頭２ビットは’11’として解釈される。C0の３ビット目はP-STD_buffer_bound_scaleとして解釈される(値は0)。C0の４ビット目以降と00はP-STD_buffer_boundとして解釈される(値は0)。【００２９】
ここで、プログラムストリームの次の３バイトのうちFDの１ビット目が1であることから、while文は継続する。次の３バイトのうち、FDはstream_idとして解釈される。FFの先頭２ビットは’11’として解釈される。FFの3ビット目はP-STD_buffer_bound_scaleとして解釈される(値は1)。FFの４ビット目以降と83はP-STD_buffer_boundとして解釈される(値は0x1F83)。【００３０】
ここで、プログラムストリームの次の３バイトのうちFDの１ビット目が１であることから、while文は継続する。続くFDはstream_idとして解釈される。C0の先頭２ビットは’11’として解釈される。C0の３ビット目はP-STD_buffer_bound_scaleとして解釈される(値は0)。C0の４ビット目以降と9CはP-STD_buffer_boundとして解釈される(値は0x009C)。【００３１】
このように第１の実施形態に則って作成されたプログラムストリームは、既存の機器で解釈が可能であるから、バックワードコンパチビリティを有することが明らかである。【００３２】
（フォワードコンパチビリティ）  
次に、図６を用いて従来のMPEG-2 Systems規格に則って作成されたプログラムストリームが第１の実施形態に則って開発された機器で解釈される流れを示す。ここで用いているプログラムストリームであるデータ系列は、図４と同様にFD, C0, 00, FD, FF, 83, FD, C0, 9C （１６進数表記）である。図６と図４および図５との違いは、３バイト目が01であるという点である。これは従来のMPEG-2 Systems規格に則ってバッファサイズ情報を記録する際、バッファサイズ情報が０バイトを表すことは考えられないためである。【００３３】
まず、最初の３バイトのうちFDはstream_idとして解釈される。C0の先頭２ビットは’11’として解釈される。C0の３ビット目はP-STD_buffer_bound_scaleとして解釈される(値は0)。C0の４ビット目以降と01はP-STD_buffer_boundとして解釈される(値は1)。この場合、P-STD_buffer_boundが０ではないため、if文は偽となり、while文の条件判断が行われる。【００３４】
ここで、次の３バイトの最初のデータ(FD)の１ビット目が1であることから、while文は継続する。続くFDはstream_idとして解釈される。FFの先頭２ビットは’11’として解釈される。FFの３ビット目はP-STD_buffer_bound_scaleとして解釈される(値は1)。FFの４ビット目以降と83はP-STD_buffer_boundとして解釈される(値は0x1F83)。この場合、P-STD_buffer_boundが０ではないため、if文は偽となり、while文の条件判断が行われる。【００３５】
ここで、次のデータ(FD)の１ビット目が1であることから、while文は継続する。続くFDはstream_idとして解釈される。C0の先頭２ビットは’11’として解釈される。C0の３ビット目はP-STD_buffer_bound_scaleとして解釈される(値は0)。C0の４ビット目以降と9CはP-STD_buffer_boundとして解釈される(値は0x009C)。【００３６】
このように従来のMPEG-2 Systems規格に則って生成されたプログラムストリームを第１の実施形態に則って開発された機器で解釈することができるので、第１の実施形態に従って生成されるプログラムストリームはフォワードコンパチビリティを有することが明らかである。【００３７】
（変形例１）  
次に、図７を用いて第１の実施形態の変形例について説明する。図７では、拡張ストリームＩＤ用のバッファサイズ情報の記録を行うかどうかの判断を行うif文の条件に、P-STD_buffer_bound_scaleが０であることが追加されている。【００３８】
図４では、P-STD_buffer_boundが０の場合、無条件に拡張ストリームＩＤ用のバッファサイズ情報が記録されるため、P-STD_buffer_boundは拡張ＩＤのバッファサイズが０であることを示す拡張バッファサイズ情報の記録には対応していない。【００３９】
これに対し、図７ではバッファサイズ情報を  
P-STD_buffer_bound_scale = 1  
P-STD_buffer_bound = 0  
とすることで、拡張ＩＤのバッファサイズが０であることを示す拡張バッファサイズ情報を記録することが可能となる。【００４０】
（変形例２）  
図８を用いて第１の実施形態のさらなる変形例について説明する。図７では、拡張バッファサイズ情報の記録を行うかどうかの判断を行う条件に、次に続く８ビットが0xFDであることを追加している上、while文とすることにより、拡張ストリームＩＤと拡張バッファサイズ情報の記録を複数個繰り返すことができるようになっている。図３では拡張ストリームＩＤ毎に上位のwhileループが処理されるために、拡張ストリームＩＤの数だけstream_id，’11’，P-STD_buffer_bound_scale及びP-STD_buffer_size_boundのセットを記録していた。これに対し、図８の変形例では当該セットの記録は１回のみで済むようになる。  
更なるバリエーションとしては、図８の内周のwhile文の条件判断に、図７の変形例で追加したP-STD_buffer_size_scale == 0を追加しても良い。【００４１】
（第２の実施形態）  
次に、図９を用いて本発明の第２の実施形態に従う、拡張バッファサイズ情報（拡張ストリームＩＤに対するバッファサイズ情報）の記録方法を説明する。プログラムストリーム全体の構成は、図１に示した通りである。  
第２の実施形態と第１の実施形態との違いは、従来reservedであった７ビットのフィールドから、拡張バッファサイズ情報を記録するということを示すために１ビットのフラグ情報(extension_buffer_size_signaling_flag)を定義し、while文中で基本ストリームＩＤ（stream_id）が0xFDで、かつextension_buffer_size_signaling_flagが０の場合は、拡張ストリームＩＤのフィールドが存在すると判断している点である。その際、拡張ストリームＩＤのフィールドの前に現れたP-STD_buffer_bound_scaleとP-STD_buffer_boundにより算出されるバッファサイズが、当該拡張ストリームＩＤに対するバッファサイズであるとする。【００４２】
現行のMPEG-2 Systems規格に則って生成されるデータは、extension_buffer_size_signaling_flag相当のビットはreservedであり、１となっている。そのため、新規に開発した機器では、拡張ストリームＩＤフィールドは現れないことになるが、再生時にエラーは発生しない。【００４３】
（変形例１）  
図１０は、第２の実施形態の変形例を示している。図９との違いは、先に破線枠で示されるようにstream_id_extensionを含む第２拡張情報を送り、後から破線枠で示されるようにP-STD_buffer_bound_scaleとP-STD_buffer_boundを含む第１拡張情報送るようにしている点である。【００４４】
（変形例２）  
図１１は、第２の実施形態の他の変形例を示している。図１０と同様に、図９との違いは先に破線枠で示されるようにstream_id_extensionを含む第２拡張情報を送り、後から破線枠で示されるようにP-STD_buffer_bound_scaleとP-STD_buffer_boundを含む第１拡張情報を送るようにしている点である。【００４５】
stream_id_extensionを送り、後からP-STD_buffer_bound_scaleとP-STD_buffer_boundを送る場合、図１０と図１１に示されるように破線枠内のFD，’11’，reservedおよびstream_id_extensionの順序が異なっていても構わない。【００４６】
（データ多重化装置）  
次に、図１２を用いて第１または第２の実施形態で述べたデータ多重化方法を実現するデータ多重化装置について説明する。【００４７】
MPEG規格に則ったビデオエレメンタリーストリーム（ＥＳ）１１０２、MPEG規格に則ったオーディオＥＳ１１０３、メタデータＥＳ１１０４およびSMPTE VC-1のようなMPEG以外の非MPEGビデオＥＳ１１０５がデータ多重化装置１１０１に入力される。データ多重化装置１１０１では、適当な多重化アルゴリズムに基づきビデオＥＳ１１０２、オーディオＥＳ１１０３、メタデータＥＳ１１０４および非MPEGビデオＥＳ１１０５がプログラムストリーム形式に多重化されることによって、プログラムストリーム１１１０が出力される。【００４８】
パック生成制御部１１０９は、データ多重化装置１１０１全体の制御を司っており、まずパックヘッダ生成部１１０６を起動してパックヘッダを生成し、その後ＰＥＳヘッダ生成部１１０７を起動してＰＥＳヘッダを生成する。次に、パック生成制御部１１０９は、パック生成部１１０８を起動してパックヘッダとＰＥＳヘッダをプログラムストリーム１１１０として出力した後、ビデオＥＳ１１０２、オーディオＥＳ１１０３、メタデータＥＳ１１０４、または非ＭＰＥＧビデオＥＳ１１０５から適切なバイト数を切り取って、プログラムストリーム１１１０として出力する。パック生成制御部１１０９は、この動作を繰り返すことにより、プログラムストリームが図１に示した構造になるようにそれぞれの要素を多重化している。【００４９】
（パックヘッダ生成部）  
図１３に示されるように、パックヘッダ生成部１１０６はパックヘッダ本体生成部１２０１、システムヘッダ生成部１２０２、パックヘッダ生成制御部１２０８およびパックヘッダ生成用スイッチ１２０７を有する。システムヘッダ生成部１２０２は、さらにシステムヘッダ本体生成部１２０３、基本バッファサイズ情報生成部１２０４、および拡張バッファサイズ情報生成部１２０５を含む。パックヘッダ生成制御部１２０８は、パック生成制御部１１０９からの起動信号を受けて動作を開始し、パックヘッダの生成が終了すると終了信号と次にパック生成部が処理すべきエレメンタリーストリームの種別をパック生成制御部１１０９に出力する。【００５０】
システムヘッダ本体生成部１２０３は、図３中のsystem_header()の直後からreserved_bitsまでの情報を生成する。基本バッファサイズ情報生成部１２０４は、図３中の実線枠で囲まれた情報を生成する。拡張バッファサイズ情報生成部１２０５は、図３中の破線枠で囲まれた情報を生成する。【００５１】
パックヘッダ生成制御部１２０８は、当該パックにシステムヘッダを含める場合、まず選択信号１２０６によりパックヘッダ生成用スイッチ１２０７がパックヘッダ本体生成部１２０１の出力を選択するようにパックヘッダ生成用スイッチ１２０７を制御する。次に、パックヘッダ生成制御部１２０８は、選択信号１２０６によりパックヘッダ生成用スイッチ１２０７がシステムヘッダ本体生成部１２０３の出力を選択するようにパックヘッダ生成用スイッチ１２０７を制御する。【００５２】
次に、パックヘッダ生成制御部１２０８は、選択信号１２０６によりパックヘッダ生成用スイッチ１２０７が基本バッファサイズ情報生成部１２０４の出力を選択するようにパックヘッダ生成用スイッチ１２０７を制御する。基本ＩＤの値が0xFDの場合、パックヘッダ生成制御部１２０８は、基本バッファサイズ情報(P-STD_buffer_size_bound)が０となるよう基本バッファサイズ情報生成部１２０４を制御し、次に選択信号１２０６によりパックヘッダ生成用スイッチ１２０７が拡張バッファサイズ情報生成部１２０５の出力を選択するようにパックヘッダ生成用スイッチ１２０７を制御する。【００５３】
以降、必要な数の基本ＩＤおよび拡張ＩＤに対応する基本バッファサイズ情報および拡張バッファサイズ情報が生成される。当該パックに多重化すべきすべての情報が生成されると、パックヘッダ生成制御部１２０８は各生成部の動作を停止させ、次のパックの開始を待つ。【００５４】
尚、図７に示す例に従ってシステムヘッダ生成部１２０２が動作する場合は、基本ＩＤの値が0xFDのとき基本バッファサイズ情報(P-STD_buffer_size_scale およびP-STD_buffer_size_bound)が０となるようにパックヘッダ生成制御部１２０８は、基本バッファサイズ情報生成部１２０４を制御する。【００５５】
さらに、図８に示す例に従ってシステムヘッダ生成部１２０２が動作する場合は、複数の拡張ＩＤに対するバッファサイズの生成が図８に示すように連続するようにパックヘッダ生成制御部１２０８がパックヘッダ生成用スイッチ１２０７を制御する。【００５６】
（データ多重化手順）  
次に、図１４を用いて図１３のデータ多重化装置の動作手順について説明する。図１４のフローチャートは、システムヘッダ中に基本ＩＤ(0xE0)用バッファサイズ(1808kB)と、拡張ストリームＩＤが0x55の拡張ＩＤ(0xFD)用バッファサイズ(1808kB)と、基本ＩＤ(0xC0)用バッファサイズ(8192B)の各バッファサイズ情報を記録してパックを生成する場合を例として、図３に示すデータ形式のプログラムストリームを生成する手順を示している。【００５７】
パックの生成が開始されると、まずステップＳ１５０１でパックヘッダ本体が生成される。当該パックにシステムヘッダを記録する場合、ステップＳ１５０２でシステムヘッダ本体が生成される。次に、ステップＳ１５０３で基本ＩＤ用(0xE0)バッファサイズ(1808kB)を示す基本バッファサイズ情報の記録を以下のようにして行う。  
stream_id = 0xE0  
P-STD_buffer_bound_scale = 1  
P-STD_buffer_size_bound = 1808  ( 1808 × 1kB = 1808kB )
最初に記録するバッファサイズ情報は基本ＩＤ用のものなので、ステップＳ１５０４で拡張バッファサイズの記録を行わないことが判断され、ステップＳ１５０６のバッファサイズ情報の記録を継続するかの判断が行われる。その結果、バッファサイズ情報の記録が継続するので、処理はステップＳ１５０３に戻り、拡張ストリームＩＤが0x55の拡張ＩＤ(0xFD)用バッファサイズ(1808kB)の拡張用バッファサイズ情報生成の前半部分が以下のようにして行われる。  
stream_id = 0xFD  
P-STD_buffer_bound_scale = 0  
P-STD_buffer_size_bound = 0  
( stream_id == 0xFD && P-STD_buffer_size_bound = 0 )
次に、ステップＳ１５０４で拡張バッファサイズ情報の記録を行うことが判断され、ステップＳ１５０５で拡張バッファサイズ情報の記録が以下のようにして行われる。  
‘0xFD’ = 0xFD  
‘11‘ = 0x3  
Reserved = 0x7F  
stream_id_extension = 0x55  
‘0xFD’ = 0xFD  
‘11‘ = 0x3  
P-STD_buffer_bound_scale_extension = 1  
P-STD_buffer_size_bound_extension = 1808  ( 1808 × 1kB = 1808kB )
次に、ステップＳ１５０６でバッファサイズ情報の記録が継続するかの判断が行われる。この場合、バッファサイズ情報の記録が継続するので、処理はステップＳ１５０３に戻り、基本ＩＤ用(0xC0)バッファサイズ(8192B)の生成が以下のようにして行われる。  
stream_id = 0xC0
P-STD_buffer_bound_scale = 0
P-STD_buffer_size_bound = 64  ( 64 × 128B = 8192B )
次に、ステップＳ１５０６でバッファサイズ情報の記録が継続するかの判断が行われる。その結果、全てのバッファサイズ情報の記録が終了したと判断されるので、ステップＳ１５０７によりＰＥＳヘッダ生成が行われる。【００５８】
次に、ステップＳ１５０８によりＰＥＳペイロード生成が行われ、一つのパックの生成が終了し、処理は処理の先頭に戻る。【００５９】
（データ分離装置）  
次に、図１５を用いて第１または第２の実施形態で述べたデータ多重化方法により生成されるプログラムストリームから各データを分離するデータ分離装置について説明する。ここでは図３に示す方法により得られるプログラムストリームに対応したデータ分離動作について説明するが、図７、図８、図９、図１０および図１１に示す方法により得られるプログラムストリームに対しても図１５のデータ分離装置は適用が可能である。【００６０】
データ分離装置１３０１にプログラムストリーム１３０２が入力され、プログラムストリーム１３０２に多重化されていたMPEG規格に則ったビデオＥＳ１３０９、MPEG規格に則ったオーディオＥＳ１３１０、メタデータＥＳ１３１０およびMPEG以外の非MPEGビデオＥＳ１３１２が分離されて出力される。データ分離装置１３０１では、パック解釈制御部１３０３が全体を制御している。【００６１】
パック解釈制御部１３０３はプログラムストリーム１３０２の内容を確認し、パックヘッダが入力されていると判断すると、プログラムストリーム１３０２がパックヘッダ解釈部１３０４に入力されるようにスイッチ１３０７を制御し、パックヘッダ解釈部１３０４を起動する。パックヘッダ解釈部１３０４ではパックヘッダの構造に従ってプログラムストリーム１３０２の解釈を行い、解釈終了時に終了信号をパック解釈制御部１３０３に送る。【００６２】
続いて、パック解釈制御部１３０３はプログラムストリーム１３０２の内容を確認し、ＰＥＳヘッダが入力されていると判断すると、プログラムストリーム１３０２がＰＥＳヘッダ解釈部１３０５に入力されるようにスイッチ１３０７を制御し、ＰＥＳヘッダ解釈部１３０５を起動する。ＰＥＳヘッダ解釈部１３０５ではＰＥＳヘッダの構造に従ってＰＥＳヘッダの解釈を行い、解釈終了時に終了信号と、ＰＥＳヘッダに含まれるストリームＩＤ情報、および次に続くＰＥＳペイロードのバイト数情報をパック解釈制御部１３０３に送る。【００６３】
続いて、パック解釈制御部１３０３はプログラムストリーム１３０２がＰＥＳペイロード抽出部１３０６に入力されるようにスイッチ１３０７を制御し、ストリームＩＤ情報に従って適切な出力先となるよう出力選択スイッチ１３０９を制御し、ＰＥＳペイロードのバイト数分処理するようＰＥＳペイロード抽出部１３０６を起動する。ＰＥＳペイロード抽出部１３０６は、ＰＥＳペイロードのバイト数分処理すると、終了信号をパック解釈制御部１３０３に送る。【００６４】
（パックヘッダ解釈部）  
図１６に示されるように、パックヘッダ解釈部１３０４には入力のプログラムストリーム１４０２とパックヘッダ解釈部１３０４の起動信号１４１０が入力され、パックヘッダ解釈の終了後、終了信号１４１１が出力される。【００６５】
パックヘッダ解釈制御部１４０８に起動信号１４１０が入力されると、プログラムストリーム１４０２がパックヘッダ本体解釈部１４０３に入力されるようにパックヘッダ解釈制御部１４０８がスイッチ１４０９を制御し、パックヘッダ本体解釈部１４０３を起動する。パックヘッダ本体解釈部１４０３ではパックヘッダ本体の構造に従ってパックヘッダの解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。【００６６】
続いて、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、システムヘッダが入力されていないと判断すると終了信号１４１１を出力する。パックヘッダ解釈制御部１４０８はシステムヘッダが入力されていると判断すると、プログラムストリーム１４０２がシステムヘッダ本体解釈部１４０４に入力されるようにスイッチ１４０９を制御し、システムヘッダ本体解釈部１４０４を起動する。システムヘッダ本体解釈部１４０４ではシステムヘッダ本体の構造に従ってシステムヘッダの解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。【００６７】
続いて、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、基本バッファサイズ情報が入力されていないと判断すると終了信号１４１１を出力する。パックヘッダ解釈制御部１４０８は基本バッファサイズ情報が入力されていると判断すると、プログラムストリーム１４０２が基本バッファサイズ情報解釈部１４０５に入力されるようにスイッチ１４０９を制御し、基本バッファサイズ情報解釈部１４０５を起動する。基本バッファサイズ情報解釈部１４０５は図３の実線枠で囲まれた基本バッファサイズ情報の構造に従って基本バッファサイズ情報の解釈を行い、解釈終了時に終了信号と、次に拡張ＩＤが続くかどうかの判別情報をパックヘッダ解釈制御部１４０８に送る。図３の例では、stream_idが0xFDであり、かつP-STD_buffer_size_boundが0である場合、次に拡張ＩＤが続くという判別情報を送る。【００６８】
次に拡張ＩＤが続かない場合、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、基本バッファサイズ情報が入力されていないと判断すると終了信号１４１１を出力する。パックヘッダ解釈制御部１４０８は基本バッファサイズ情報が入力されていると判断すると、プログラムストリーム１４０２が基本バッファサイズ情報解釈部１４０５に入力されるようにスイッチ１４０９を制御し、基本バッファサイズ情報解釈部１４０５を起動する。以下、上述した動作を繰り返す。【００６９】
次に拡張ＩＤが続く場合、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２が拡張バッファサイズ情報解釈部１４０６に入力されるようスイッチ１４０９を制御し、拡張バッファサイズ情報解釈部１４０６を起動する。拡張バッファサイズ情報解釈部１４０６は図３の破線枠で囲まれた拡張バッファサイズ情報の構造に従って拡張バッファサイズ情報の解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。ここで得られたP-STD_buffer_bound_scale_extensionおよびP-STD_buffer_size_bound_extensionにより算出されるバッファサイズが、当該拡張ストリームＩＤ(stream_id_extension)に対するバッファサイズとなる。【００７０】
続いて、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、基本バッファサイズ情報が入力されているかいないかの判断を行う。以降の処理は上述の通りである。【００７１】
（データ分離手順）  
次に、図１７を用いて図１６のデータ分離装置の動作手順について説明する。図１７のフローチャートに沿って、図３に示すデータ形式のプログラムストリームのシステムヘッダ中のバッファサイズ情報を記録する領域のデータ列が１６進数表記で、E0 E7 10 FD C0 00 FD FF D5 FD E7 10 C0 C0 40 の場合を例にとりデータ分離動作を説明する。【００７２】
パックの解釈が開始されると、まずステップＳ１６０１でパックヘッダ本体が解釈される。当該パックにシステムヘッダが記録されている場合、ステップＳ１６０２でシステムヘッダ本体が以下のように解釈される。  
stream_id = 0xE0  
P-STD_buffer_bound_scale = 1  
P-STD_buffer_size_bound = 1808 ( 1808 × 1kB = 1808kB )
ここまでで、E0 E7 10の解釈が終了する。【００７３】
このようにstream_idが0xFDではなく、P-STD_buffer_size_boundが0ではないため、「0xE0のstream_idに対するバッファサイズは1808kB」と解釈される。【００７４】
ステップＳ１６０４で次に拡張バッファサイズ情報が記録されていないと判断し、ステップＳ１６０６で次にバッファサイズ情報が継続して記録されているかを判断する。ステップＳ１６０６では、次のデータ(0xFD)の先頭ビットが１であるかを判断する。この場合、0xFDの先頭ビットが１であるためステップＳ１６０３に戻り、次のバッファサイズ情報の解釈を以下のようにして行う。  
stream_id = 0xFD  
P-STD_buffer_bound_scale = 0  
P-STD_buffer_size_bound = 0  
ここまでで、FD C0 00の解釈が終了する。【００７５】
ステップＳ１６０４では、  
stream_id = 0xFD && P-STD_buffer_size_bound = 0  
であるから拡張バッファサイズ情報が記録されていると判断し、ステップＳ１６０５を実行する。【００７６】
ステップＳ１６０５では、  
‘0xFD’ = 0xFD  
‘11‘ = 0x3  
Reserved = 0x7F  
stream_id_extension = 0x55  
‘0xFD’ = 0xFD  
‘11‘ = 0x3  
P-STD_buffer_bound_scale_extension = 1
P-STD_buffer_size_bound_extension = 1808( 1808 × 1kB = 1808kB )
を解釈する。ここまでで、FD FF D5 FD E7 10の解釈が終了する。この結果、「拡張ストリームＩＤが0x55に対するバッファサイズは1808kB」であると解釈される。【００７７】
ステップＳ１６０６では、次のデータ(0xC0)の先頭ビットが1であるかを判断する。この場合、１であるためステップＳ１６０３に戻り、次のバッファサイズ情報の解釈を以下のようにして行う。  
stream_id = 0xC0  
P-STD_buffer_bound_scale = 0  
P-STD_buffer_size_bound = 64 (64B × 128 = 8192B)
を解釈する。ここまでで、C0 C0 40の解釈が終了する。stream_idが0xFDではなく、P-STD_buffer_size_boundが0ではないため、「拡張ストリームＩＤが0x55に対するバッファサイズは8192B」であると解釈される。【００７８】
ステップＳ１６０４で次に拡張バッファサイズ情報が記録されていないと判断し、ステップＳ１６０６で次にバッファサイズ情報が継続して記録されているかを判断する。それ以降はバッファサイズ情報が記録されていないため、ステップＳ１６０７のＰＥＳヘッダ解釈およびステップＳ１６０８のＰＥＳペイロード抽出を行い、次のパックの処理に移る。ＰＥＳペイロード抽出時の出力は、ステップＳ１６０７で得られるストリームＩＤまたは拡張ストリームＩＤに対応したバッファサイズとなる。【００７９】
（第３の実施形態）
次に、図１８を用いて本発明のデータ多重化装置のパックヘッダ生成部のさらに別の実施形態について説明する。図１８は、図１３に示したパックヘッダ生成部のシステムヘッダ生成部１２０２の中で、基本バッファサイズ情報生成部１２０４および拡張バッファサイズ情報生成部１２０５の動作を擬似Cコードで示したものである。  
拡張ＩＤおよび拡張ストリームＩＤの組で表されるエレメンタリーストリームに対する拡張バッファサイズ情報を生成する場合、図１８において、stream_idが基本ストリームＩＤまたは拡張ＩＤではない0xB7(１６進数)を選択し、0xB7を含む４８ビットのデータ列を生成する。４８ビットのデータ列は、２つの２４ビットのデータ列から構成され、その詳細は、図１８のif文が真の場合に示されているように、
（Ａ）第1のフィールドである0xB7(８ビット、１６進数）、第２のフィールドである110000000b(９ビット、２進数）、第３のフィールドであり拡張ストリームＩＤを示す８ビットのstream_id_extension、の合計２４ビット、および、次に続く、
（Ｂ）第1のフィールドである0xB6（８ビット、１６進数）、第２のフィールドである１１ｂ（２ビット、２進数）、第３のフィールドでありstream_id_extensionの拡張ストリームＩＤを持つエレメンタリーストリームの再生に必要なバッファバウンドスケール情報を示す1ビットのP-STD_buffer_bound_scale_extension、第４のフィールドでありstream_id_extensionの拡張ストリームＩＤを持つエレメンタリーストリームの再生に必要なバッファサイズバウンド情報を示す13ビットのP-STD_buffer_size_bound_extension、の合計２４ビットである。尚、（Ａ）に示した最初の８ビットは、図１８のif文の上にあるstream_idに相当する。【００８０】
一方、基本ストリームＩＤで表されるエレメンタリーストリームに対する基本バッファサイズ情報を生成する場合、stream_idとして基本ストリームIDの値を生成し、図１８のif文が偽の場合(else)に示されているように、従来と同様のstream_id(８ビット), 11b(２ビット、２進数), P-STD_buffer_bound_scale(1ビット)、P-STD_buffer_size_bound(１３ビット)の２４ビット構造で基本バッファサイズ情報を生成する。【００８１】
全ての拡張バッファサイズが同じサイズである場合、図１８において、stream_id=0xFD(１６進数)とし、図１８のif文が偽の場合(else)に示された、P-STD_buffer_bound_scaleとP-STD_buffer_size_boundにて示される基本バッファサイズ情報を生成する。分離側ではstream_id=0xFDで表された基本バッファサイズ情報を取得した場合、その情報を全ての拡張バッファサイズ情報として扱うこととする。これにより、全ての拡張バッファのサイズが同じ値である場合、1組の２４ビット構造(すなわち２４ビット)だけで拡張バッファサイズ情報を表すことができるようになる。【００８２】
尚、拡張バッファサイズ情報は、  
if (P-STD_buffer_bound_scale_extension == ‘0’ ) {  
(stream_id_extension用P-STDバッファサイズ)  
= 128 * P-STD_buffer_size_bound_extension (バイト)  
}  
else {  
(stream_id_extension用P-STDバッファサイズ)  
= 1024 * P-STD_buffer_size_bound_extension (バイト)  
}
として算出される。すなわち、拡張バッファサイズ情報は、  
（ａ）P-STD_buffer_bound_scale_extensionの値が０の場合には、128×P-STD_buffer_size_bound_extensionバイト  
（ｂ）P-STD_buffer_bound_scale_extensionの値が０でない場合には、1024×P-STD_buffer_size_bound_extensionバイト  
と算出される。【００８３】
また、基本バッファサイズ情報は、  
if (P-STD_buffer_bound_scale == ‘0’ ) {  
(stream_id用P-STDバッファサイズ)  
= 128 * P-STD_buffer_size_bound (バイト)  
}  
else {  
(stream_id用P-STDバッファサイズ)  
= 1024 * P-STD_buffer_size_bound (バイト)  
}
として算出される。すなわち、基本バッファサイズ情報は、  
（ａ）P-STD_buffer_bound_scaleの値が０の場合には、128×P-STD_buffer_size_boundバイト  
（ｂ）P-STD_buffer_bound_scaleの値が０でない場合には、1024×P-STD_buffer_size_boundバイト  
と算出される。【００８４】
（データ分離装置）  
次に、図１５を用いて第３の実施形態で述べたデータ多重化方法により生成されるプログラムストリームから各データを分離するデータ分離装置について説明する。ここでは図１８に示す方法により得られるプログラムストリームに対応したデータ分離動作について説明する。【００８５】
データ分離装置１３０１にプログラムストリーム１３０２が入力され、プログラムストリーム１３０２に多重化されていたMPEG規格に則ったビデオＥＳ１３０９、MPEG規格に則ったオーディオＥＳ１３１０、メタデータＥＳ１３１０およびMPEG以外の非MPEGビデオＥＳ１３１２が分離されて出力される。データ分離装置１３０１では、パック解釈制御部１３０３がデータ分離置の全体を制御している。【００８６】
パック解釈制御部１３０３はプログラムストリーム１３０２の内容を確認し、パックヘッダが入力されていると判断すると、プログラムストリーム１３０２がパックヘッダ解釈部１３０４に入力されるようにスイッチ１３０７を制御し、パックヘッダ解釈部１３０４を起動する。パックヘッダ解釈部１３０４ではパックヘッダの構造に従ってプログラムストリーム１３０２の解釈を行い、解釈終了時に終了信号をパック解釈制御部１３０３に送る。【００８７】
続いて、パック解釈制御部１３０３はプログラムストリーム１３０２の内容を確認し、ＰＥＳヘッダが入力されていると判断すると、プログラムストリーム１３０２がＰＥＳヘッダ解釈部１３０５に入力されるようにスイッチ１３０７を制御し、ＰＥＳヘッダ解釈部１３０５を起動する。ＰＥＳヘッダ解釈部１３０５ではＰＥＳヘッダの構造に従ってＰＥＳヘッダの解釈を行い、解釈終了時に終了信号と、ＰＥＳヘッダに含まれるストリームＩＤ情報、および次に続くＰＥＳペイロードのバイト数情報をパック解釈制御部１３０３に送る。【００８８】
続いて、パック解釈制御部１３０３はプログラムストリーム１３０２がＰＥＳペイロード抽出部１３０６に入力されるようにスイッチ１３０７を制御し、ストリームＩＤ情報に従って適切な出力先となるよう出力選択スイッチ１３０９を制御し、ＰＥＳペイロードのバイト数分を処理するようＰＥＳペイロード抽出部１３０６を起動する。ＰＥＳペイロード抽出部１３０６は、ＰＥＳペイロードのバイト数分を処理すると、終了信号をパック解釈制御部１３０３に送る。【００８９】
（パックヘッダ解釈部）  
図１６に示されるように、パックヘッダ解釈部１３０４には入力のプログラムストリーム１４０２とパックヘッダ解釈部１３０４の起動信号１４１０が入力され、パックヘッダ解釈の終了後、終了信号１４１１が出力される。【００９０】
パックヘッダ解釈制御部１４０８に起動信号１４１０が入力されると、プログラムストリーム１４０２がパックヘッダ本体解釈部１４０３に入力されるようにパックヘッダ解釈制御部１４０８がスイッチ１４０９を制御し、パックヘッダ本体解釈部１４０３を起動する。パックヘッダ本体解釈部１４０３ではパックヘッダ本体の構造に従ってパックヘッダの解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。【００９１】
続いて、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、システムヘッダが入力されていないと判断すると終了信号１４１１を出力する。パックヘッダ解釈制御部１４０８はシステムヘッダが入力されていると判断すると、プログラムストリーム１４０２がシステムヘッダ本体解釈部１４０４に入力されるようにスイッチ１４０９を制御し、システムヘッダ本体解釈部１４０４を起動する。システムヘッダ本体解釈部１４０４ではシステムヘッダ本体の構造に従ってシステムヘッダの解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。【００９２】
続いて、パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、基本バッファサイズ情報または拡張バッファサイズ情報が入力されていないと判断すると終了信号１４１１を出力する。パックヘッダ解釈制御部１４０８はプログラムストリーム１４０２の内容を確認し、基本バッファサイズ情報または拡張バッファサイズ情報が入力されていると判断すると、基本バッファサイズ情報が入力されているのか、拡張バッファサイズ情報が入力されているのかを判断する。【００９３】
基本バッファサイズ情報が入力されている場合は、パックヘッダ解釈制御部１４０８は基本バッファサイズ情報解釈部１４０５にプログラムストリーム１４０２が入力されるようにスイッチ１４０９を制御し、基本バッファサイズ情報解釈部１４０５を起動する。基本バッファサイズ情報解釈部１４０５は図１８のstream_id(８ビット)とelse文の内容(合計１６ビット)の構造に従って基本バッファサイズ情報の解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部1408に送る。【００９４】
拡張バッファサイズ情報が入力されている場合は、パックヘッダ解釈制御部１４０８は拡張バッファサイズ情報解釈部１４０６にプログラムストリーム１４０２が入力されるようにスイッチ１４０９を制御し、拡張バッファサイズ情報解釈部１４０６を起動する。拡張バッファサイズ情報解釈部１４０６は図１８のstream_id(８ビット)とif文の内容(合計４０ビット)の構造に従って拡張バッファサイズ情報の解釈を行い、解釈終了時に終了信号をパックヘッダ解釈制御部１４０８に送る。図１８に示す構造の例では、stream_id_extensionで示された拡張ストリームＩＤに対するバッファサイズは、P-STD_buffer_bound_scale_extensionとP-STD_buffer_size_bound_extensionにより算出されたサイズとなる。【００９５】
パックヘッダ解釈制御部１４０８は、続いて、別の基本バッファサイズ情報または拡張バッファサイズ情報が入力されているかを判断し、基本バッファサイズ情報または拡張バッファサイズ情報の入力が続いている場合は、基本バッファサイズ情報または拡張バッファサイズ情報の解釈を継続する。別の基本バッファサイズ情報または拡張バッファサイズ情報が入力されていない場合、終了信号１４１１を出力してバックヘッダ解釈部１３０４は動作を停止する。【００９６】
次に、図１５のデータ分離装置により図１８に従って生成されたデータの分離方法を図１９のフローチャートに沿って説明する。図１８に示すデータ形式のプログラムストリームのシステムヘッダ中のバッファサイズ情報を記録する領域のデータ列が１６進数表記で、E0 E7 10 B7 C0 55 B6 CB A5 00の場合を例にとりデータ分離動作を説明する。【００９７】
パックの解釈が開始されると、まずステップＳ１９０１でパックヘッダ本体が解釈される。当該パックによるシステムヘッダが記録されていない場合、ステップＳ１９０２は即座に終了し、ＰＥＳ解釈を行うため、ＰＥＳヘッダ解釈ステップＳ１９０７を実行する。システムヘッダが記録されている場合、ステップＳ１９０２でシステムヘッダ本体を解釈し、その後、ステップＳ１９０６に移り、バッファサイズ情報の解釈と確認を行う。【００９８】
上述したように、この例では、システムヘッダ中のバッファサイズ情報に関するデータ列がE0 E7 10 B7 C0 55 B6 CB A5 00となっており、最初の１ビットが‘１’であるため、ステップＳ１９０６では、バッファサイズ情報が存在するとことが判断され、処理がステップＳ１９０４に移り、バッファサイズの種類が確認される。ステップＳ１９０４では、最初の８ビットがE0のため、基本バッファサイズ情報が記録されているとことが判断され、ステップS1903の基本バッファサイズ情報の解釈が実行される。ステップＳ１９０３では、Ｅ０の基本ストリームＩＤに対する基本バッファサイズ情報が解釈される。続く１６ビットのデータ列はE7 10であるため、図１８より、
stream_id = 0xE0
P-STD_buffer_bount_scale = 1
P-STD_buffer_size_bound = 1808(10進数)
すなわち、基本バッファサイズは１８０８ｋＢであるという解釈が行われる。続いて、処理はステップＳ１９０６に戻る。この時点でシステムヘッダ中のバッファサイズ情報に関するデータ列がB7 C0 55 B6 CB A5 00となっており、最初の1ビットが‘１’であるため、ステップＳ１９０６では、バッファサイズ情報が存在することが判断され、処理はステップＳ１９０４に移り、バッファサイズの種類が確認される。ステップＳ１９０４では、最初の８ビットがＢ７のため、拡張バッファサイズ情報が記録されていることが判断され、ステップＳ１９０５の拡張バッファサイズ情報の解釈が実行される。ステップＳ１９０５では、Ｂ７に続く１６ビット(C0 55)が読み込まれ、拡張ストリームＩＤ(stream_id_extension)が0x55であるという解釈が行われる。次に８ビットの0xB6が読み込まれ、続く１６ビットはCB A5であるため、図１８より、
stream_id_extension = 0x55
P-STD_buffer_bount_scale_extension = 0
P-STD_buffer_size_bound_extension = 2981(10進数)
すなわち、拡張バッファサイズは381,568Byte(=2981×128)であるという解釈が行われる。続いて、処理はステップS1906に戻る。この時点でシステムヘッダ中のバッファサイズ情報に関するデータ列が００となっており、最初の１ビットが‘０’であるため、ステップＳ１９０６では、バッファサイズ情報が存在しないことが判断され、ステップＳ１９０７のＰＥＳヘッダ解釈およびステップＳ１９０８のＰＥＳペイロードが抽出される。【００９９】
次に、図１８に示すデータ形式のプログラムストリームのシステムヘッダ中のバッファサイズ情報を記録する領域のデータ列が１６進数表記で、E0 E7 10 FD C0 55 B6 CB A5 00の場合を例にとり、他の実施形態に関するデータ分離動作を説明する。【０１００】
最初の３バイトはE0 E7 10なので、上述した実施例で説明したように、
stream_id = 0xE0
P-STD_buffer_bount_scale = 1
P-STD_buffer_size_bound = 1808(１０進数)
と解釈される。【０１０１】
続くFD C0 55 B6 CB A5は、
stream_id = 0xFD
P-STD_buffer_bount_scale = 0
P-STD_buffer_size_bound = 2981(１０進数)
と解釈される。ここで、stream_idが0xFDであるため、P-STD_buffer_bount_scaleとP-STD_buffer_size_boundの組で表現される基本バッファサイズ情報は、拡張ストリームＩＤを用いてPES化される全てのエレメンタリーストリームの拡張バッファサイズとして解釈され、そのサイズは381,568Byte(=2981×128)と解釈される。【０１０２】
尚、本実施形態では特定のstream_id(0xB7)や特定の値(0xB6)を用いているが、これらの値はMPEG-2システム規格で有効な値として規定されている0xB8〜0xFF以外の値であれば、原理的にはどの値を用いても問題はない。また、ifクローズ中の’00 0000 0’についても、この値が望ましい値ではあるが、本発明の主旨としては、必ずしも、この値であるという必然性はない。【０１０３】
上述した本発明によると、拡張ＩＤと対で示される基本バッファサイズ情報が０バイトをとる場合、現状の規格と同じ構造を保ちつつ拡張ストリームＩＤと拡張バッファサイズ情報のペアを記録する。また、将来の拡張に確保していた領域に、拡張ストリームＩＤ用の拡張バッファサイズ情報を記録するか否かを示すフラグ情報を設け、現状の規格と同じ構造を保ちつつ拡張ストリームＩＤと拡張バッファサイズ情報のペアを記録する。【０１０４】
呪術した本発明によれば、拡張ストリームＩＤおよび拡張バッファサイズ情報のペアは、既存の機器では現行のMPEG-2 Systems規格に沿って再生エラーを発生することなく解釈されることによりプログラムストリームが正しく再生され、バックワードコンパチビリティが確保される。一方、新しい機器に現行のMPEG-2 Systems規格に則って生成されたプログラムストリームを入力した場合でも、再生エラーが発生することなく解釈されることにより正しく再生され、フォワードコンパチビリティが確保される。【０１０５】
以上説明した各実施形態に基づくデータ多重化の処理およびデータ分離の処理は、ハードウェアでも実現可能であるが、パーソナルコンピュータのようなコンピュータを用いてソフトウェアにより実行することも可能である。従って、本発明によれば上述したデータ多重化の処理を行うプログラム、データ分離の処理を行うプログラム、あるいは当該プログラムを格納したコンピュータ読み取り可能な記憶媒体を提供することができる。【０１０６】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【産業上の利用可能性】
【０１０７】
本発明にかかるデータ多重化／分離方法および装置は、通信メディア、蓄積メディアおよび放送メディアなどにおけるビデオデータ、オーディオデータおよびメタデータの符号化データの多重化及び分離化に使用される。
【図１】
2008102732.tif 000003
【図２】
2008102732.tif 000004
【図３】
2008102732.tif 000005
【図４】
2008102732.tif 000006
【図５】
2008102732.tif 000007
【図６】
2008102732.tif 000008
【図７】
2008102732.tif 000009
【図８】
2008102732.tif 000010
【図９】
2008102732.tif 000011
【図１０】
2008102732.tif 000012
【図１１】
2008102732.tif 000013
【図１２】
2008102732.tif 000014
【図１３】
2008102732.tif 000015
【図１４】
2008102732.tif 000016
【図１５】
2008102732.tif 000017
【図１６】
2008102732.tif 000018
【図１７】
2008102732.tif 000019
【図１８】
2008102732.tif 000020
【図１９】
2008102732.tif 000021
【国際調査報告】
2008102732.tif 000022
2008102732.tif 000023