以下に、本発明の実施の形態について、図面を参照して説明する。
図1は、記録媒体(後述する図44の記録媒体10)上のアプリケーションフォーマットの簡単化された構造を示している。このフォーマットは、AVストリームの管理のためにPlayListとClipの2個のレイヤをもつ。そして、Volume Informationは、ディスク内のすべてのClipとPlayListの管理をする。
1個のAVストリームと、それの付属情報のペアを1個のオブジェクトと考え、それをClipと呼ぶ。AVストリームファイルはClip AVストリームファイルと呼ばれ、その付属情報は、Clip Information fileと呼ばれる。
1個のClip AVストリームファイルは、MPEG2トランスポートストリームをDVR(Digital Video Recording)アプリケーションフォーマットによって規定される構造に配置したデータをストアする。
一般に、コンピュータ等で用いるデータファイルは、バイト列として扱われるが、Clip AVストリームファイルのコンテンツは、時間軸上に展開され、PlayListは、Clipの中のアクセスポイントを主にタイムスタンプで指定する。PlayList によって、Clipの中のアクセスポイントのタイムスタンプが与えられた時、Clip Information fileは、Clip AVストリームファイルの中でストリームのデコードを開始すべきアドレス情報を見つけるために役立つ。
PlayListは、Clipの中からユーザが見たい再生区間を選択し、それを簡単に編集することができることを目的にして導入された。1つのPlayListは、Clipの中の再生区間の集まりである。あるClipの中の1つの再生区間は、PlayItemと呼ばれ、それは、時間軸上のIN点とOUT点のペアで表される。それゆえ、PlayListは、PlayItemの集まりである。
PlayListには、2つのタイプがある。1つは、Real PlayListであり、もう1つは、Virtual PlayListである。
Real PlayListは、それが参照しているClipのストリーム部分を共有しているとみなされる。すなわち、Real PlayListは、それが参照しているClipのストリーム部分に相当するデータ容量をディスクの中で占める。AVストリームが新しいClipとして記録される場合、そのClip全体の再生可能範囲を参照するReal PlayListが自動的に作られる。Real PlayListの再生範囲の一部分が消去された場合、それが参照しているClipのストリーム部分のデータもまた消去される。
Virtual PlayListは、Clipのデータを共有していないとみなされる。Virtual PlayListが変更または消去されたとしても、Clipは何も変化しない。
なお、以下の説明においては、Real PlayListとVirtual PlayListを総称して単に、PlayListと呼んでいる。
DVRディスク上に必要なディレクトリは、次の通りである。
"DVR"ディレクトリを含むrootディレクトリ
"PLAYLIST"ディレクトリ,"CLIPINF"ディレクトリ,"STREAM"ディレクトリ
および"DATA"ディレクトリを含む"DVR"ディレクトリ
rootディレクトリの下に、これら以外のディレクトリを作っても良いが、それらは、このDVRアプリケーションフォーマットでは、無視される。
図2に、DVRディスク上のディレクトリ構造の例を示す。同図に示されるように、rootディレクトリは、1個のディレクトリを含む。
"DVR" -- DVRアプリケーションフォーマットによって規定されるすべてのファイルとディレクトリは、このディレクトリの下にストアされなければならない。
"DVR"ディレクトリは、次に示すファイルをストアする。"info.dvr"ファイルは、 DVRディレクトリの下に作られ、アプリケーションレイヤの全体的な情報をストアする。DVRディレクトリの下には、ただ一つのinfo.dvrがなければならない。ファイル名は、info.dvrに固定されるとする。"menu.tidx"と"menu.tdat"、そして"mark.tidx"と"mark.tdat"は、サムネールについての情報をストアするためのファイルである。
"DVR"ディレクトリは、以下に説明するディレクトリを含む。
"PLAYLIST" -- Real PlayListとVirtual PlayListのデータベースファイルは、このディレクトリの下に置かなければならない。このディレクトリは、PlayListが1個もなくても存在しなければならない。
"CLIPINF" -- Clipのデータベースは、このディレクトリの下に置かなければならない。このディレクトリは、Clipが1個もなくても存在しなければならない。
"STREAM" -- AVストリームファイルは、このディレクトリの下に置かなければならない。このディレクトリは、AVストリームファイルが1個もなくても存在しなければならない。
"PLAYLIST"ディレクトリは、2種類のPlayListファイルをストアするものであり、それらは、Real PlayListとVirtual PlayListである。
"xxxxx.rpls" -- このファイルは、1個のReal PlayListに関連する情報をストアする。それぞれのReal PlayList毎に、1個のファイルが作られる。ファイル名は、"xxxxx.rpls"である。ここで、"xxxxx"は、5個の0から9まで数字である。ファイル拡張子は、"rpls"でなければならない。
"yyyyy.vpls" -- このファイルは、1個のVirtual PlayListに関連する情報をストアする。それぞれのVirtual PlayList毎に、1個のファイルが作られる。ファイル名は、"yyyyy.vpls"である。ここで、"yyyyy"は、5個の0から9まで数字である。ファイル拡張子は、"vpls"でなければならない。
"CLIPINF"ディレクトリは、それぞれのAVストリームファイルに対応して、1個のファイルをストアする。
"zzzzz.clpi" -- このファイルは、1個のAVストリームファイル(Clip AVストリームファイル または Bridge-Clip AVストリームファイル)に対応するClip Information fileである。ファイル名は、"zzzzz.clpi"であり、ここで、"zzzzz"は、5個の0から9までの数字である。ファイル拡張子は、"clpi"でなければならない。
"STREAM"ディレクトリは、AVストリームのファイルをストアする。
"zzzzz.m2ts" -- このファイルは、DVRシステムにより扱われるAVストリームファイルである。これは、Clip AVストリームファイルまたはBridge-Clip AVストリームファイルである。ファイル名は、"zzzzz.m2ts"であり、ここで"zzzzz"は、5個の0から9までの数字である。ファイル拡張子は、"m2ts"でなければならない。
1個のAVストリームファイルとそれに対応するClip information fileは、同じ5個の数字"zzzzz"を使用しなければならない。
その他のディレクトリとファイル名は、本発明の実施の形態を説明するために必要ないので、説明を省略する。
次に、AVストリームファイルの構造を説明する。AVストリームファイルは図3示すDVR MPEG2トランスポートストリームの構造を持たなければならない。DVR MPEG2トランスポートストリームは次に示す特徴を持つ。
DVR MPEG2トランスポートストリームは、整数個のAligned unitから構成される。
Aligned unitの大きさは、6144 バイト (2048×3 バイト)である。
Aligned unitは、ソースパケットの第1バイト目から始まる。
ソースパケットは、192バイト長である。1個のソースパケットは、TP_extra_headerとトランスポートパケットから成る。TP_extra_headerは、4バイト長であり、またトランスポートパケットは、188バイト長である。
1個のAligned unitは、32個のソースパケットから成る。
DVR MPEG2トランスポートストリームの中の最後のAligned unitも、また32個の
ソースパケットから成る。
最後のAligned unitが、入力トランスポートストリームのトランスポートパケットで完全に満たされなかった場合、残りのバイト領域をヌルパケット(PID=0x1FFFのトランスポートパケット)を持ったソースパケットで満たさねばならない。
Source packet のシンタクスを図4に示す。
TP_extra_header()は、4バイト長のヘッダである。また、transport_packet() は、 ISO/IEC 13818-1で規定される188バイト長のMPEG-2トランスポートパケットである。
TP_extra_headerのシンタクスを図5に示す。
copy_permission_indicatorは、 対応するトランスポートパケットのペイロードのコピー制限を表す整数である。
arrival_time_stampは、AVストリームの中で、対応するトランスポートパケットがデコーダ(後述する図44のAVデコーダ16が対応する)に到着する時刻を示すタイムスタンプである。これは、後述する式(1)の中でarrival_time_stampによって指定される値を持つ整数値である。
図6は、DVR MPEG-2トランスポートストリームのレコーダモデル(後述する図44の動画像記録再生装置1が対応する)を示す。これは、レコーディングプロセスを規定するための概念上のモデルである。DVR MPEG-2トランスポートストリームは、このモデルに従っていなければならない。
MPEG-2トランスポートストリームの入力タイミングについて説明する。
入力MPEG2トランスポートストリームは、フルトランスポートストリームまたはパーシャルトランスポートストリームである。
入力MPEG2トランスポートストリームは、ISO/IEC13818-1またはISO/IEC13818-9に従っていなければならない。
MPEG2トランスポートストリームのi番目のバイトは、T-STD(ISO/IEC 13818-1で規定されるTransport stream system target decoder)201(図44のAVデコーダ16が対応する)とソースパケッタイザ(source packetizer)204(図44のソースパケッタイザ29が対応する)へ、時刻t(i)に同時に入力される。
27MHz PLL202(図44の動画像記録再生装置1では、制御部17に内蔵されている)について説明する。
27MHzクロックの周波数は、MPEG-2トランスポートストリームのPCR (Program Clock Reference)の値にロックしなければならない。
arrival time clockについて説明する。
アライバルタイムクロックカウンタ(Arrival time clock counter)203(図44の動画像記録再生装置1では、制御部17に内蔵されている)は、27MHz PLL202が出力する27MHzの周波数のパルスをカウントするバイナリーカウンターである。
Arrival_time_clock(i)は、時刻t(i)におけるArrival time clock counter203のカウント値である。
ソースパケッタイザ204について説明する。
ソースパケッタイザ204は、すべてのトランスポートパケットにTP_extra_headerを付加し、ソースパケットを作る。
Arrival_time_stampは、トランスポートパケットの第1バイト目がT-STD201とソースパケッタイザ204の両方へ到着する時刻を表す。Arrival_time_stamp(k)は、等式(1)で示されるように、Arrival_time_clock(k)のサンプル値であり、ここで、kはトランスポートパケットの第1バイト目を示す。
arrival_time_stamp(k) = arrival_time_clock(k)% 230 (1)
ライトバッファ(Write Buffer)205(図44の動画像記録再生装置1では、書き込み部32に内蔵されている)について説明する。
Rmaxは、ソースパケッタイザ204からライトバッファ205へのソースパケットストリームの入力ビットレートである。入力トランスポートストリームの最大ビットレートをTS_recording_rateとすると、Rmaxは次のように計算される。
Rmax = TS_recording_rate × 192/188
Rudは、ライトバッファ205からDVRドライブ(DVR drive)206(図44の動画像記録再生装置1では、書き込み部32に内蔵されている)への出力ビットレートである。
ライトバッファ205が空でない時のバッファからのソースパケットストリームの出力ビットレートはRudである。バッファが空である時、バッファからの出力ビットレートはゼロである。
DVRドライブ206は、T-STD201への各パケットの到着時刻に対応するATSが付加された、ライトバッファ205からの各パケットを、ディスク(図44の記録媒体10に対応する)に記録する。
図7は、DVR MPEG-2トランスポートストリームのプレーヤモデル(図44の動画像記録再生装置1が対応する)を示す。これは、再生プロセスを規定するための概念上のモデルである。DVR MPEG-2トランスポートストリームは、このモデルに従っていなければならない。
リードバッファ(Read buffer)222(図44の動画像記録再生装置1では、読み出し部11に内蔵されている)について説明する。
Rudは、DVRドライブ(DVR drive)221(図44の動画像記録再生装置1では、読み出し部11に内蔵されている)からリードバッファ222への入力ビットレートである。
リードバッファ222がフルでない時のバッファへのソースパケットストリームの入力ビットレートはRudである。バッファがフルである時、バッファへの入力は止められる。
Rmaxは、リードバッファ222からソースデパケッタイザ(source depacketizer)223(図43のソースデパケッタイザ14が対応する)へのソースパケットストリームの出力ビットレートである。
アライバルタイムクロックカウンタ(arrival time clock counter)225(図44の動画像記録再生装置1では、制御部17に内蔵されている)について説明する。
アライバルタイムクロックカウンタ225は、27MHz クリスタル発振器(27MHzX-tal)224(図44の動画像記録再生装置1では、制御部17に内蔵されている)が発生する27MHzの周波数のパルスをカウントするバイナリーカウンターである。
現在のソースパケットがAVストリームファイルの最初のソースパケットであるか、または後述するSequenceInfo()の中で SPN_ATC_start が指すところのソースパケットである場合、そのパケットのarrival time stampの値でアライバルタイムクロックカウンタ225のカウント値をリセットする。
Arrival_time_clock(i)は、時刻t(i)におけるアライバルタイムクロックカウンタ225のカウント値である。
MPEG-2トランスポートストリームの出力タイミングについて説明する。
現在のソースパケットのarrival_time_stampがarrival_time_clock(i)のLSB 30ビットの値と等しい時、そのソースパケットのトランスポートパケットは、バッファから引き抜かれる。
次に、AVストリームファイルの再生情報を管理するデータベースフォーマットについて説明する。
図8は、Clip Information fileのシンタクスを示す。Clip Information fileは、SequenceInfo(), ProgramInfo(), CPI(), ClipMark()を持つ。
SequenceInfo_start_addressは、zzzzz.clpiファイルの先頭のバイトからの相対バイト数を単位として、SequenceInfo()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
ProgramInfo_Start_addressは、zzzzz.clpiファイルの先頭のバイトからの相対バイト数を単位として、ProgramInfo()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
CPI_Start_addressは、zzzzz.clpiファイルの先頭のバイトからの相対バイト数を単位として、CPI()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
ClipMark_Start_addressは、zzzzz.clpiファイルの先頭のバイトからの相対バイト数を単位として、ClipMark()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
その他のシンタクスフィールドは、本発明の実施の形態を説明するために必要ないので、説明を省略する。
SequenceInfo()は、Clip AV streamの中のATC-sequenceとSTC-sequenceの情報を定義する。
ATC-sequenceについて説明する。AVストリームファイルを構成する各ソースパケットのarrival time stamp (ATS) に基づいて作られる時間軸を、アライバルタイムベースと呼び、そのクロックを、ATC (Arrival Time Clock)と呼ぶ。そして、ATCの不連続点(アライバルタイムベースの不連続点)を含まないソースパケット列を、ATC-sequenceと呼ぶ。
図9は、ATC-sequenceについて説明する図である。入力トランスポートストリームをClip AVストリームファイルとして新しく記録する時、そのClipはATCの不連続点を含んではならず、ただ1つのATC-sequenceを持つ。ATCの不連続点は、編集等によってClip AVストリームファイルのストリームデータを部分的に消去した場合にだけ作られることを想定している。これについての詳細は後述する。
AVストリームファイルの中で、新しいATCが開始するアドレス、すなわち、ATC-sequenceのスタートアドレスを、SequenceInfo()にストアする。このアドレスは、SPN_ATC_startにより示される。
AVストリームファイルの中にある最後のATC-sequence以外のATC-sequenceは、そのSPN_ATC_startで指されるソースパケットから開始し、その次のSPN_ATC_startで指されるソースパケットの直前のソースパケットで終了する。最後のATC-sequenceは、そのSPN_ATC_startで指されるソースパケットから開始し、AVストリームファイルの最後のソースパケットで終了する。
図10は、ATCの不連続点とATC-sequenceの関係を説明する図である。この例の場合、Clip AVストリームファイルは、2個のATC不連続点を持ち、3個のATC-sequenceを持つ。
STC-sequenceについて説明する。STC(System Time Clock)の定義は、MPEG-2で規定されている定義に従う。すなわち、これは、トランスポートストリームの中のPCR(Program Clock Reference)に基づいて作られる時間軸であるシステムタイムベースのクロックである。STCの値は90kHz精度、33ビット長のバイナリーカウンターのカウント値で表される。
図11は、連続なSTC区間について説明する図である。ここで横軸は、Arrival Time Clock(またはアライバルタイムベース)であり、縦軸は STC (またはシステムタイムベース)である。Case-1の場合、STCは単調増加しており、その区間のSTCは連続である。Case-2の場合、33ビットのSTCが途中でラップアラウンドしている。STCのラップアラウンド点はSTCの不連続ではない。ラップアラウンドしてもSTCは連続である。
STCの不連続は、放送局が伝送系を切り替えた場合、記録側が記録するチャンネルを切り替えた場合、ユーザが編集動作を行った場合などに発生する。
STCの不連続点(システムタイムベースの不連続点)を含まないソースパケット列を、STC-sequenceと呼ぶ。なお、同じSTC_sequenceの中で同じSTCの値は、決して現れない。そのために、Clipの最大時間長を、33ビットのSTCのラップアラウンド周期(約26時間)以下に制限している。
AVストリームファイルの中で、新しいSTCが開始するアドレス、すなわち、STC-sequenceのスタートアドレスが、SequenceInfo()にストアされる。このアドレスは、SPN_STC_startにより示される。
STC-sequenceは、ATC-sequenceの境界をまたぐことはない。
AVストリームファイルの中にある最後のSTC-sequence以外のSTC-sequenceは、そのSPN_STC_startで指されるソースパケットから開始し、その次のSPN_STC_startで指されるソースパケットの直前のソースパケットで終了する。最後のSTC-sequenceは、そのSPN_STC_startで指されるソースパケットから開始し、AVストリームファイルの最後のソースパケットで終了する。
図12は、STCの不連続点とSTC-sequenceの関係、およびSTC-sequenceとATC-sequenceの関係を説明する図である。この例の場合、Clip AVストリームファイルは、3個のSTCを持ち、3個のSTC-sequenceを持つ。1つのSTC-sequenceが、ATC-sequenceの境界をまたぐことはない。
AVストリームがSTCの不連続点を持つ場合、そのAVストリームファイルの中で同じ値のPTSが現れるかもしれない。そのため、AVストリーム上のある時刻をPTSベースで指す場合、アクセスポイントのPTSだけではそのポイントを特定するためには不十分である。PTSに加えて、そのPTSを含むところのSTC-sequenceのインデックスが必要である。そのインデックスをSTC-idと呼ぶ。
図13は、SequenceInfo()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからSequenceInfo()の最後のバイトまでのバイト数を示す。
num_of_ATC_sequencesは、AVストリームファイルの中にあるATC-sequenceの数を示す。
SPN_ATC_start[atc_id]は、AVストリームファイル上でatc_idによって指されるATC-sequenceが開始するアドレスを示す。SPN_ATC_start[atc_id]は、ソースパケット番号を単位とする大きさであり、AVストリームファイルの最初のソースパケットからゼロを初期値としてカウントされる。
SequenceInfo()の中の最初のSPN_ATC_start[0]は、ゼロである。また、SequenceInfo()の中でエントリーされるSPN_ATC_start[atc_id]の値は、昇順に並んでいる。すなわち、SequenceInfo()の中でエントリーされるSPN_ATC_start[atc_id]は、次の条件を満たす。
SPN_ATC_start[0] = 0
0 < atc_id < num_of_ATC_sequences なる atc_id について、
SPN_ATC_start[atc_id -1] < SPN_ATC_start[atc_id]
num_of_STC_sequences[atc_id]は、atc_idによって指されるATC-sequence上にあるSTC-sequenceの数を示す。
offset_STC_id[atc_id]は、atc_idによって指されるATC-sequence上にある最初のSTC-sequenceに対するsct_id のオフセット値を示す。AVストリームファイルを新たに記録する時、offset_STC_id[atc_id]は、ゼロである。
atc_idによって指されるATC-sequence上にあるSTC-sequenceに対応するstc_idの値は、シンタクス中のstc_idのfor-loopによって記述される順番によって定義され、その値はoffset_STC_id[atc_id]から開始する。
SequenceInfo()の中で定義される連続する2個のATC-sequenceについて、前側のATC-sequenceの最後の stc_id と それに続くATC-sequenceの最初の stc_id は、同じ値でも良い。もし、これら2個の stc_id が同じ値の場合、それらの値で参照される2個の STC-sequenceの中で同じSTCの値が現れることはない。
SequenceInfo()の中でエントリーされるstc_idの値は、昇順に並ばなければならない。offset_STC_id[atc_id]は、この制限を満たすように値がセットされる。
PCR_PID[atc_id][stc_id]は、atc_idによって指されるATC-sequence上にあるところのstc_idによって指されるSTC-sequence に有効なPCRを持つトランスポートパケットのPIDの値である。
SPN_STC_start[atc_id][stc_id]は、atc_idによって指されるATC-sequence上にあるところのstc_idによって指されるSTC-sequence が、AVストリームファイル上で開始するアドレスを示す。SPN_STC_start[atc_id][stc_id]は、ソースパケット番号を単位とする大きさであり、AVストリームファイルの最初のソースパケットからゼロを初期値としてカウントされる。
SequenceInfo()の中でエントリーされるSPN_STC_start[atc_id][stc_id]の値は、昇順に並んでいる。atc_idによって指されるATC-sequence上にある最初のSPN_STC_start[atc_id][stc_id] は、SPN_ATC_start[atc_id]以上の値である。すなわち、次の条件を満たす。
SPN_ATC_start[atc_id] <= SPN_STC_start[atc_id][0]
presentation_start_time[atc_id][stc_id]は、atc_idによって指されるATC-sequence上にある stc_id によって指されるSTC-sequence上にあるAVストリームデータのプレゼンテーション・スタート・タイムを示す。これは、そのSTC-sequenceのSTCから導かれる45 kHzを単位とするプレゼンテーション・タイムの値である。
presentation_end_time[atc_id][stc_id]は、atc_idによって指されるATC-sequence上にある stc_id によって指されるSTC-sequence上にあるAVストリームデータのプレゼンテーション・エンド・タイムを示す。これは、そのSTC-sequenceのSTCから導かれる45 kHzを単位とするプレゼンテーション・タイムの値である。
次に、ProgramInfo()について説明する。プログラムは、エレメンタリーストリームの集まりであり、これらのストリームの同期再生のために、ただ1つのシステムタイムベースを共有するものである。
再生装置(後述する図44の動画像記録再生装置1)にとって、AVストリームのデコードに先だち、そのAVストリームの内容がわかることは有用である。この内容とは、例えば、ビデオやオーディオのエレメンタリーストリームを伝送するトランスポートパケットのPIDの値や、ビデオやオーディオのコンポーネント種類(例えば、HDTVのビデオとMPEG-2 AACのオーディオストリームなど)などの情報である。
この情報はAVストリームを参照するところのPlayListの内容をユーザに説明するところのメニュー画面を作成するのに有用であるし、また、AVストリームのデコードに先だって、再生装置のAVデコーダ16(後述する図44)およびデマルチプレクサ15(後述する図44)の初期状態をセットするために役立つ。この理由のために、Clip Information fileは、プログラムの内容を説明するためのProgramInfoを持つ。
MPEG2トランスポートストリームをストアしているAVストリームファイルは、ファイルの中でプログラム内容が変化するかもしれない。例えば、ビデオエレメンタリーストリームを伝送するところのトランスポートパケットのPIDが変化したり、ビデオストリームのコンポーネント種類がSDTVからHDTVに変化するなどである。ProgramInfoは、AVストリームファイルの中でのプログラム内容の変化点の情報をストアする。
AVストリームファイルの中で本フォーマットが規定するプログラム内容が一定であるソースパケット列を、program-sequenceと呼ぶ。
AVストリームファイルの中で、新しいprogram-sequenceが開始するアドレスをProgramInfo()にストアする。このアドレスは、SPN_program_sequence_startにより示される。
AVストリームファイルの中にある最後のprogram-sequence以外のprogram-sequenceは、そのSPN_program_sequence_startで指されるソースパケットから開始し、その次のSPN_program_sequence_startで指されるソースパケットの直前のソースパケットで終了する。最後のprogram_sequenceは、そのSPN_program_sequence_startで指されるソースパケットから開始し、AVストリームファイルの最後のソースパケットで終了する。
図14は、program-sequenceを説明する図である。この例の場合、Clip AVストリームファイルは3個のprogram-sequenceを持つ。
program-sequenceは、ATC-sequenceの境界およびSTC-sequenceの境界をまたいでも良い。
図15は、ProgramInfo()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからProgramInfo()の最後のバイトまでのバイト数を示す。
num_of_program_sequencesは、AVストリームファイルの中にあるprogram-sequenceの数を示す。
SPN_program_sequence_startは、AVストリームファイル上でprogram-sequenceが開始するアドレスを示す。SPN_program_sequence_startは、ソースパケット番号を単位とする大きさであり、AVストリームファイルの最初のソースパケットから、ゼロを初期値としてカウントされる。ProgramInfo()の中でエントリーされるSPN_program_sequence_startの値は、昇順に並んでいる。
SPN_program_sequence_startは、そのprogram_sequenceに対する最初のPMTを持つソースパケットを指していることを前提とする。SPN_program_sequence_startは、データを記録する記録機(図44の動画像記録再生装置1が対応する)がトランスポートストリーム中のPSI/SIを解析することによって作られる。記録機(例えば、図44のビデオ解析部24または多重化ストリーム解析部26)がPSI/SIを解析し、その変化を検出するまでの遅延時間が必要なために、SPN_program_sequence_startは、実際のPSI/SIの変化点から所定の時間以内にあるソースパケットを指しても良い。
program_map_PIDは、そのprogram-sequenceに適用できるPMT(program map table)を持つトランスポートパケットのPIDの値である。
num_of_streams_in_psは、そのprogram-sequenceの中で定義されるエレメンタリーストリームの数を示す。
num_of_groupsは、そのprogram-sequenceの中で定義されるエレメンタリーストリームのグループの数を示す。num_of_groupsは、1以上の値である。トランスポートストリームのPSI/SIがエレメンタリーストリームのグループ情報を持つ場合、num_of_groupsは、1以上の値をとることを想定している。それぞれのグループは、マルチ・ビュー・プログラム中の1つのビューを構成する。
stream_PIDは、そのprogram-sequenceのprogram_map_PIDが参照するところのPMTの中で定義されているエレメンタリーストリームに対するPIDの値を示す。
StreamCodingInfo() は、前記stream_PIDで指されるエレメンタリーストリームの情報を示す。詳細は後述する。
num_of_streams_in_groupは、エレメンタリーストリームのグループが持つエレメンタリーストリームの数を示す。
stream_indexは、前記エレメンタリーストリームのグループが持つエレメンタリーストリームに対応するところの、シンタクス中のfor-loopで定義されるstream_indexの値を示す。
図16は、StreamCodingInfo()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからStreamCodingInfo()の最後のバイトまでのバイト数を示す。
stream_coding_typeは、このStreamCodingInfo()に対応するstream_PIDで指されるエレメンタリーストリームの符号化タイプを示す。値の意味を図17に示す。
video_formatは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームのビデオフォーマットを示す。値の意味を図18に示す。
frame_rateは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームのフレームレートを示す。値の意味を図19に示す。
display_aspect_ratioは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームのディスプレイ・アスペクト・レシオを示す。値の意味を図20に示す。
cc_flagは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームの中でクローズド・キャプション(closed caption data)信号が符号化されているかを示すフラグである。
original_video_format_flagは、このStreamCodingInfo()の中にoriginal_video_formatとoriginal_display_aspect_ratioが存在するかを示すフラグである。
original_video_formatは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームが符号化される前のオリジナルのビデオフォーマットである。値の意味は、前記のvideo_formatと同じである。
original_display_aspect_ratioは、このStreamCodingInfo()に対応するstream_PIDで指されるビデオストリームが符号化される前のオリジナルのディスプレイ・アスペクト・レシオである。値の意味は、前記のdisplay_aspect_ratioと同じである。
ビデオストリームと共にマルチメディアデータストリーム(BMLストリーム, 字幕など)が多重化されているトランスポートストリームをトランス・コーディングする場合において、ビデオストリームは再エンコードされることによって、そのビデオフォーマットが変化する(例えば、1080iから480iへ変化する)が、マルチメディアデータストリームはオリジナルのストリームを保つ場合を考える。
この時、新しいビデオストリームとマルチメディアデータストリームの間に情報のミスマッチが生じる場合がある。例えば、マルチメディアデータストリームの表示に関するパラメータは、オリジナルのビデオストリームのビデオフォーマットを想定して決められているにもかかわらず、ビデオストリームの再エンコードによって、そのビデオフォーマットが変化した場合である。
このような場合、original_video_formatとoriginal_display_aspect_ratioに、オリジナルのビデオストリームに関する情報を保存する。再生機は、前記の新しいビデオストリームとマルチメディアデータストリームから次のようにして、表示画像をつくる。
ビデオストリームは、original_video_formatとoriginal_display_aspect_ratioで示されるビデオフォーマットにアップ・サンプリングされる。そのアップ・サンプリングされた画像とマルチメディアデータストリームが合成されて、正しい表示画像をつくる。
audio_presentation_typeは、このStreamCodingInfo()に対応するstream_PIDで指されるオーディオストリームのプレゼンテーション・タイプを示す。値の意味を図21に示す。
sampling_frequencyは、このStreamCodingInfo()に対応するstream_PIDで指されるオーディオストリームのサンプリング周波数を示す。値の意味を図22に示す。
次に、CPI()について説明する。CPI (Characteristic Point Information)は、AVストリームの中の再生時間情報とそのファイルの中のアドレスとを関連づけるためにある。
CPIには2個のタイプがあり、それらはEP_mapとTU_mapである。CPI()の中のCPI_typeがEP_map typeの場合、そのCPI()はEP_mapを含む。また、CPI()の中のCPI_typeがTU_map typeの場合、そのCPI()はTU_mapを含む。1個のAVストリームファイルは、1個のEP_mapまたは1個のTU_mapを持つ。
EP_mapは、エントリーポイント(EP)データのリストであり、それはエレメンタリーストリームおよびトランスポートストリームから抽出されたものである。これは、AVストリームの中でデコードを開始すべきエントリーポイントの場所を見つけるためのアドレス情報を持つ。1つのEPデータは、プレゼンテーションタイムスタンプ(PTS)と、そのPTSに対応するアクセスユニットのAVストリームの中のデータアドレスの対で構成される。
EP_mapは、主に2つの目的のために使用される。第1に、PlayListの中でプレゼンテーションタイムスタンプによって参照されるアクセスユニットのAVストリームの中のデータアドレスを見つけるために使用される。第2に、ファーストフォワード再生やファーストリバース再生のために使用される。記録装置が、入力AVストリームを記録する場合、そのストリームのシンタクスを解析することができるとき、EP_mapが作成され、ディスクに記録される。
TU_mapは、デジタルインタフェースを通して入力されるトランスポートパケットの到着時刻に基づいたタイムユニット(TU)データのリストを持つ。これは、到着時刻ベースの時間とAVストリームの中のデータアドレスとの関係を与える。
録装置が、入力AVストリームを記録する場合、そのストリームのシンタクスを解析することができないとき、TU_mapが作成され、ディスクに記録される。
図23はCPI()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからCPI()の最後のバイトまでのバイト数を示す。
CPI_typeは、1ビットのフラグであり、ClipのCPIのタイプを表す。
EP_mapは、AVストリームファイルの中にある1つのビデオストリームに対して、次に示すデータを持つ。
(1) stream_PID : そのビデオストリームを伝送するトランスポートパケットのPIDを示す。
(2) num_EP_entries : そのビデオストリームに対するエントリーポイントの数。EP_mapは、num_EP_entriesの数のPTS_EP_startとSPN_EP_startのペアのデータを持つ。
(3) PTS_EP_start : そのビデオストリームの中で、シーケンスヘッダから始まるアクセスユニットのPTSを示す。
(4) SPN_EP_start : 前記PTS_EP_startにより参照されるアクセスユニットの第1バイト目を含むソースポケットのAVストリームファイルの中でのアドレスを示す。SPN_EP_startはソースパケット番号を単位とする大きさであり、AVストリームファイルの最初のソースパケットから、ゼロを初期値としてカウントされる。
AVストリームファイルの中に複数のビデオストリームが存在する場合、EP_mapは各ビデオストリームに対して、前記のデータを持つことができる。
図24は、EP_mapの例を示す。ここでは、Clip AV streamの中に、stream_PID=xのビデオストリームがあり、k個のエントリーポイントがある(num_EP_entries=k)。SPN_EP_startで指されるソースパケットの例を図に示す。そのソースパケットの中のトランスポートパケットのTP_headerに続くペイロードは、PESパケットヘッダから開始する。それに続いて、シーケンスヘッダ(SQH)があり、それに続いてGOPヘッダ(GOPH)があり、それに続いてI-ピクチャヘッダ(I-PICH)がある。このシーケンスヘッダから始まるアクセスユニットのPTSは、PESパケットヘッダの中に符号化されている。
次に、TU_mapについて説明する。
図25は、AVストリームを新しくClipとして記録する時にできるTU_mapについて説明する図である。1つのATC-sequenceの中にあるソースパケットのアライバルタイムに基づいて作られる時間軸を所定の時間単位で分割する。この時間単位をtime-unitと呼ぶ。
各々のtime_unitの中に入るところの最初の完全な形のソースパケットのAVストリームファイル上でのアドレスをTU_mapにストアする。これらのアドレスをSPN_time_unit_startと呼ぶ。ATC-sequenceの上の時刻は、TU_start_timeに基づいて定義される。これについてはSPN_time_unit_startのセマンティクスで後述する。
図26は、TU_mapのシンタクスを説明する図である。
time_unit_sizeは、1つのtime_unitの大きさを与えるものであり、それは27MHz精度のアライバルタイムクロックから導き出される45kHzクロックを単位とする大きさである。
シンタクス中の atc_id のfor-loopで使われている num_of_ATC_sequencesの値は、SequenceInfo()の中で定義されている。
offset_arrival_time[atc_id] は、atc_idで指されるATC-sequenceの中の最初の完全なtime-unitに対するオフセットの時間である。これは、27MHz精度のアライバルタイムクロックから導き出される45kHzクロックを単位とする大きさである。
AVストリームを新しくClipとして記録した時、そのAVストリームファイルはただ1つのATC-sequenceを持ち、offset_arrival_time[atc_id]はゼロである。
複数のoffset_arrival_time[atc_id]がTU_mapにエントリーされる場合は、次の条件式が満たされる。
offset_arrival_time[0] = 0
0 < atc_id < num_of_ATC_sequences なる atc_idについて、
offset_arrival_time[atc_id]
>offset_arrival_time[atc_id-1]+time_unit
*num_of_time_unit_entries[atc_id-1]
num_of_time_unit_entries[atc_id] は、atc_idで指されるATC-sequenceの中に含まれるtime_unitのエントリー数を示す。
SPN_time_unit_start[atc_id][i] は、atc_idで指されるATC-sequence中のi番目のtime_unitの開始するアドレスである。これはソースパケット番号を単位とし、AVストリームファイルの最初のソースパケットからゼロを初期値としてカウントされる。
現在のtime_unitに入るソースパケットが何もない場合、現在のtime_unitに対するSPN_time_unit_startの値は、その1つ前のSPN_time_unit_startの値と等しい。
TU_mapの中のSPN_time_unit_startの値のエントリーは、昇順にならんでいなければならない。
atc_idで指されるATC-sequence中のi番目のtime_unitの開始時刻は、次式で定義されるTU_start_time[atc_id][i]である。
TU_start_time[atc_id][i]=offset_arrival_time[atc_id]+i*time_unit_size
次に、ClipMark()について説明する。
ClipMark()は、Clip AVストリームの中のマーク(Mark)の情報を定義する。
マークは、Clipの中のハイライトや特徴的な時間を指定するために設けられている。Clipに付加されるマークは、AVストリームの内容に起因する特徴的なシーンを指定する、例えば、CM開始点やCM終了点、またシーンチェンジ点などである。Clipにセットされるマークは、AVストリームが新しいClipとして記録される時に記録器がセットする。なお、後でPlayListファイルの中で説明するが、PlayListにセットされるマークをストアするために、PlayListファイルはPlayListMarkを持つ。PlayListにセットされるマークは、主にユーザによってセットされる、例えば、ブックマークやリジューム点などである。
ClipまたはPlayListにマークをセットすることは、マークの時刻を示すタイムスタンプをClipMark / PlayListMarkに追加することにより行われる。また、マークを削除することは、ClipMark / PlayListMarkの中から、そのマークのタイムスタンプを削除する事で行われる。従って、マークのセットや削除により、AVストリームは何の変更もされない。
図27は、ClipにセットされるマークとPlayListにセットされるマークの関係を示す図である。PlayListを再生する時、そのPlayListが参照するClipのClipMarkにストアされているマークを参照する事ができる。したがって、1つのClipをReal PlayListや複数のVirtual PlayListによって参照している場合、それらのPlayListは、その1つのClipのClipMarkを共有することができるので、マークのデータを効率良く管理することができる。
図28は、ClipMarkのシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからClipMark()の最後のバイトまでのバイト数を示す。
maker_IDは、そのmark_typeを定義しているメーカーのメーカーIDを示す。
number_of_Clip_marksは、ClipMarkの中にストアされているマークのエントリー数を示す。
mark_invalid_flagは、1ビットのフラグであり、これの値がゼロにセットされている時、このマークは有効な情報を持っていることを示し、また、これの値が1にセットされている時、このマークは無効であることを示す。
ユーザがユーザインターフェース上で1つのマークのエントリーを消去するオペレーションをした時、記録機はClipMarkからそのマークのエントリーを消去する代わりに、そのmark_invalid_flagの値を1に変更しても良い。
mark_typeは、マークのタイプを示す。
ref_to_STC_idは、mark_time_stampとrepresentative_picture_time_stampの両方が置かれているところのSTC-sequenceを指定するところのstc-idを示す。stc-idの値は、SequenceInfo()の中で定義される。
mark_time_stampは、Clip AVストリームの中でマークが指定されたポイントをプレゼンテーションタイムスタンプをベースとして表す。
entry_ES_PIDが、0xFFFFにセットされている場合、そのマークはClipの中のすべてのエレメンタリーストリームに共通の時間軸上へのポインターである。
entry_ES_PIDが、0xFFFFでない値にセットされている場合、entry_ES_PIDは、そのマークによって指されるところのエレメンタリーストリームを含んでいるところのトランスポートパケットのPIDの値を示す。
ref_to_thumbnail_indexは、マークに付加されるサムネール画像の情報を示す。ref_to_thumbnail_indexフィールドが、0xFFFFでない値の場合、そのマークにはサムネール画像が付加されており、そのサムネール画像は、mark.tdatファイルの中にストアされている。その画像は、mark.tidxファイルの中でthumbnail_indexの値を用いて参照される(後述)。ref_to_thumbnail_indexフィールドが、0xFFFF である場合、そのマークにはサムネール画像が付加されていない事を示す。
representative_picture_time_stampは、mark_time_stampによって示されるマークを代表する画像のポイントを示すタイムスタンプをストアする。
図29は、PlayList fileのシンタクスを示す。PlayList fileは、UIAppInfoPlayList(),PlayList(),PlayListMark()を持つ。
PlayList_start_addressは、PlayListファイルの先頭のバイトからの相対バイト数を単位として、PlayList()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
PlayListMark_start_addressは、PlayListファイルの先頭のバイトからの相対バイト数を単位として、PlayListMark()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
その他のシンタクスフィールドは、本発明の実施の形態を説明するために必要ないので、説明を省略する。
UIAppInfoPlayList()は、PlayListについてのユーザインターフェースアプリケーションのパラメータをストアする。
図30に、UIAppInfoPlayList()のシンタクスを示す。
ref_to_thumbnail_indexは、マークに付加されるサムネール画像の情報を示す。ref_to_thumbnail_indexフィールドが、0xFFFFでない値の場合、そのマークにはサムネール画像が付加されており、そのサムネール画像は、menu.tdatファイルの中にストアされている。その画像は、menu.tidxファイルの中でthumbnail_indexの値を用いて参照される(後述)。ref_to_thumbnail_indexフィールドが、0xFFFF である場合、そのマークにはサムネール画像が付加されていない事を示す。
その他のシンタクスフィールドは、PlayListについてのユーザインターフェースアプリケーションのパラメータを示すものであるが、本発明の実施の形態を説明するために必要ないので、詳細な説明を省略する。
図31は、PlayList()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからPlayList()の最後のバイトまでのバイト数を示す。
CPI_type: 1ビットのフラグであり、PlayItem()が使用するClipのCPI_typeの値を示す。CPI_typeは、Clip Information fileのCPI_typeで定義される。
number_of_PlayItemsは、PlayList()の中にあるPlayItem()の数を示す。
シンタクス中のPlayItem_idのfor-loopの中で、PlayItem()の現れる順番によって、そのPlayItem()に対するPlayItem_idの値が決る。PlayItem_idは、0から開始する。
その他のシンタクスフィールドは、本発明の実施の形態を説明するために必要ないので、説明を省略する。
次に、PlayItemについて説明する。1個のPlayItemは、基本的に次のデータを含む。
(1)PlayItem が指すClipのファイル名を指定するためのClip_information_file_name。
(2)そのClipの再生区間を特定するためのIN_timeとOUT_timeのペア。
(3)PlayListの中で連続する2個のPlayItemについて、前側のPlayItemと現在のPlayItemとの接続の状態を示すところのconnection_condition。
図32は、CPI_typeがEP_mapのPlayList(これをEP_map typeのPlayListと呼ぶ)を説明する図である。EP_map typeのPlayListの場合、PlayItemのIN_timeとOUT_timeは、PTSベースの時間を示す。そのIN_timeとOUT_timeは、同じSTC-sequence上の時刻を指す。そのSTC-sequenceを示すために、ref_to_STC_idを用いる。そのIN_timeとOUT_timeは、そのSTC-sequenceに対して定義される presentation_start_time と presentation_end_time(これらの情報はSequenceInfoの中にある)で示される再生区間の中の時間を指す。
図33は、CPI_typeがTU_mapのPlayList(これをTU_map typeのPlayListと呼ぶ)を説明する図である。TU_map typeのPlayList の場合、PlayItemのIN_timeとOUT_timeは、アライバルタイムベースの時間を指す。そのIN_timeとOUT_timeは、同じATC-sequence上の時刻を指す。
図34は、EP_map typeのPlayList の時間情報とAVストリームファイルの中のアドレス情報との関係を説明する図である。PlayList の時間情報は、AVストリームファイルの中のピクチャやオーディオフレームのPTS情報である。そして、Clip Information fileのEP_mapとSequenceInfoが、AVストリームの中の時間情報とそのファイルの中のアドレスとを関連づける。
図35は、TU_map typeのPlayList の時間情報とAVストリームファイルの中のアドレス情報との関係を説明する図である。PlayList の時間情報は、AVストリームファイルの中のアライバル・タイム情報である。そして、Clip Information fileのTU_mapが、AVストリームの中の時間情報とそのファイルの中のアドレスとを関連づける。
図36は、PlayItem()のシンタクスを示す。
lengthは、このlengthフィールドの直後のバイトからPlayItem()の最後のバイトまでのバイト数を示す。
Clip_Information_file_nameは、PlayItemが参照するClip Information fileのファイル名を示す。
connection_conditionは、先行するPlayItemと現在のPlayItemとがシームレスに接続されているかどうかの情報を示す。
ref_to_STC_idは、PlayItemが参照するClipのSTC-sequenceのstc-idを示す。stc-idの値は、SequenceInfoの中で定義されている。
IN_timeは、PlayItemの再生開始時刻をストアする。
OUT_timeは、PlayItemの再生終了時刻をストアする。
Bridge_Clip_Information_file_nameは、先行するPlayItemと現在のPlayItemとがシームレスに接続されている場合の再生の補助情報である。
図37は、PlayListMark()のシンタクスを示す。PlayListMarkは前述したように、主にユーザによってセットされるマークをストアする。
lengthは、このlengthフィールドの直後のバイトからPlayListMark()の最後のバイトまでのバイト数を示す。
number_of_PlayList_marksは、PlayListMarkの中にストアされているマークのエントリー数を示す。
mark_invalid_flagは、1ビットのフラグであり、これの値がゼロにセットされている時、このマークは有効な情報を持っていることを示し、また、これの値が1にセットされている時、このマークは無効であることを示す。
ユーザがユーザインターフェース上で1つのマークのエントリーを消去するオペレーションをした時、記録機はPlayListMarkからそのマークのエントリーを消去する代わりに、そのmark_invalid_flagの値を1に変更しても良い。
mark_typeは、マークのタイプを示す。
mark_name_lengthは、Mark_nameフィールドの中に示されるマーク名のバイト長を示す。このフィールドの値は32以下である。
ref_to_PlayItem_idは、マークが置かれているところのPlayItemを指定するところのPlayItem_idの値を示す。あるPlayItemに対応するPlayItem_idの値は、PlayList()において定義される。
mark_time_stampは、そのマークが指定されたポイントを示すタイムスタンプをストアする。mark_time_stampは、ref_to_PlayItem_idで示されるPlayItemの中で定義されているところのIN_timeとOUT_timeで特定される再生範囲の中の時間を指す。
PlayListのCPI_typeがEP_map typeの場合、mark_time_stampは、プレゼンテーションタイムスタンプをベースとして表され、また、CPI_typeがTU_map typeの場合、mark_time_stampはアライバルタイムスタンプをベースとして表される。
entry_ES_PIDが、0xFFFFにセットされている場合、そのマークはPlayListによって使用されるすべてのエレメンタリーストリームに共通の時間軸上へのポインターである。entry_ES_PIDが、0xFFFFでない値にセットされている場合、entry_ES_PIDは、そのマークによって指されるところのエレメンタリーストリームを含んでいるところのトランスポートパケットのPIDの値を示す。
ref_to_thumbnail_indexは、マークに付加されるサムネール画像の情報を示す。ref_to_thumbnail_indexフィールドが、0xFFFFでない値の場合、そのマークにはサムネール画像が付加されており、そのサムネール画像は、mark.tdatファイルの中にストアされている。その画像は、mark.tidxファイルの中でthumbnail_indexの値を用いて参照される(後述)。ref_to_thumbnail_indexフィールドが、0xFFFF である場合、そのマークにはサムネール画像が付加されていない事を示す。
mark_nameは、マークの名前を示す。このフィールドの中の左からmark_name_lengthで示されるバイト数が、有効なキャラクター文字であり、前記名前を示す。このキャラクター文字は、UIAppInfoPlayListの中でcharacter_setによって示される方法で符号化されている。mark_nameフィールドの中で、それら有効なキャラクター文字に続くバイトの値は、どんな値が入っていても良い。
次に、"info.dvr"ディレクトリについて説明する。図38は、"info.dvr"ファイルのシンタクスを示す図である。"info.dvr"ディレクトリは、UIAppInfoVolume(),TableOfPlayLists()を持つ。
TableOfPlayLists_Start_addressは、info.dvrファイルの先頭のバイトからの相対バイト数を単位として、TableOfPlayLists()の先頭アドレスを示す。相対バイト数はゼロからカウントされる。
図39に、UIAppInfoPlayList()のシンタクスを示す。
ref_to_thumbnail_indexは、マークに付加されるサムネール画像の情報を示す。ref_to_thumbnail_indexフィールドが、0xFFFFでない値の場合、そのマークにはサムネール画像が付加されており、そのサムネール画像は、menu.tdatファイルの中にストアされている。その画像は、menu.tidxファイルの中でthumbnail_indexの値を用いて参照される(後述)。ref_to_thumbnail_indexフィールドが、0xFFFF である場合、そのマークにはサムネール画像が付加されていない事を示す。
その他のシンタクスフィールドは、Volumeについてのユーザインターフェースアプリケーションのパラメータを示すものであるが、本発明の実施の形態を説明するために必要ないので、詳細な説明を省略する。
図40は、TableOfPlayLists()のシンタクスを示す。TableOfPlayLists()は、PlayList(Real PlayListとVirtual PlayList)のファイル名をストアする。ボリューム(ディスク)に記録されているすべてのPlayListファイルは、TableOfPlayList()の中に含まれる。TableOfPlayLists()は、ボリュームの中のPlayListのデフォルトの再生順序を示す。
lengthは、このlengthフィールドの直後からTableOfPlayLists()の最後までのTableOfPlayLists()のバイト数を示す。
number_of_PlayListsは、ボリュームに記録されているPlayListの数を示す。
PlayList_file_nameの10バイトの数字は、PlayListのファイル名を示す。
次に、サムネールについての情報をストアするファイルの内容を説明する。
"menu.tidx"と"menu.tdat"は、メニューサムネール,すなわちVolumeを代表する1つのピクチャおよびPlayList毎にそれを代表する1つのピクチャの情報をストアする。すべてのメニューサムネールのヘッダ情報は、1つのmenu.tidxに集めて管理される。すべてのメニューサムネールのピクチャデータは、1つのmenu.tdatに集めて管理される。
"mark.tidx"と"mark.tdat"は、マークサムネール,すなわちマーク点で指されるピクチャについての情報をストアする。Volume中のすべてのClipおよびPlayListに付加されているすべてのマークサムネールのヘッダ情報は、1つのmark.tidxに集めて管理される。すべてのマークサムネールのピクチャデータは、1つのmark.tdatに集めて管理される。
サムネールのピクチャデータは、例えば、画像をJPEGで符号化したデータである。
これら4個のファイルのシンタクスとセマンティクスを説明する。
"menu.tidx"と"mark.tidx"は、同じシンタクス構造を持つ。図41は、"menu.tidx"と"mark.tidx"のシンタクス構造を示す。
version_numberは、このサムネールヘッダ情報ファイルのバージョンナンバーを示す4個の数字である。
lengthは、このlengthフィールドの直後のバイトからmenu.tidx/mark.tidxの最後のバイトまでのバイト数である。
number_of_thumbnailsは、menu.tidxの場合にはmenu.tdatにストアされているサムネールピクチャの数であり、mark.tidxの場合にはmark.tdatにストアされているサムネールピクチャの数である。
tn_block_sizeは、menu.tidxの場合にはmenu.tdatの中の1つのtn_blockのサイズを示し、mark.tidxの場合にはmark.tdatの中の1つのtn_blockのサイズを示す。このサイズは、1024バイトを単位とする大きさである。例えば、tn_block_size=1は、1つのtn_blockのサイズが1024バイトであることを示す。1つのサムネールピクチャは、1つのtn_blockの中にストアされなければならない。
number_of_tn_blocksは、menu.tidxの場合にはmenu.tdatの中にあるtn_blockの数を示し、mark.tidxの場合にはmark.tdatの中にあるtn_blockの数を示す。
thumbnail_indexは、このthumbnail_indexフィールドに続くサムネール情報のインデクス番号を表す。thumbnail_indexして、0xFFFF という値を使用してはならない。
menu.tidxの場合、thumbnail_indexはUIAppInfoVolume(), UIAppInfoPlayList() の中のref_to_thumbnail_indexによって参照される。mark.tidxの場合、thumbnail_indexはPlayListMark()およびClipMark()の中のref_to_thumbnail_indexによって参照される。
ref_to_tn_block_idは、menu.tidxの場合にはmenu.tdat中の1つのtn_blockを示し、そのtn_blockは、thumbnail_indexで指されるピクチャデータをストアしている。ref_to_tn_block_idの値は、menu.tdatのシンタクス中のtn_block_idの値を参照する。
mark.tidxの場合にはmark.tdat中の1つのtn_blockを示し、そのtn_blockは、thumbnail_indexで指されるピクチャデータをストアしている。ref_to_tn_block_idの値は、menu.tdatのシンタクス中のtn_block_idの値を参照する。
picture_byte_sizeは、thumbnail_indexで指される1つの符号化サムネールピクチャのデータ長をバイト単位で示す。picture_byte_sizeは、1024*tn_block_sizeの値以下でなければならない。すなわち、記録機は1つの符号化サムネールピクチャのデータ長を1024*tn_block_sizeの値以下になるように、符号化しなければならない。
horizontal_picture_sizeは、thumbnail_indexで指される符号化サムネールピクチャの水平方向の画素数を示す。
vertical_picture_sizeは、thumbnail_indexで指される符号化サムネールピクチャの垂直方向の画素数を示す。
display_aspect_ratioは、thumbnail_indexで指される符号化サムネールピクチャのディスプレイ・アスペクト・レシオを示す。
図42は、"menu.tdat"と"mark.tdat"のシンタクス構造を示す。"menu.tdat"と"mark.tdat"は、同じシンタクス構造を持つ。
tn_blockは、1つの符号化サムネールピクチャがストアされる領域である。一つのサムネールピクチャのバイト長は、1つのtn_blockの大きさ以下である。1つのピクチャデータの第一バイト目は、tn_blockの第一バイト目と一致していなければならない。
menu.tdatの場合、1つのtn_blockのサイズはmenu.tdatの中のtn_block_sizeで示される。mark.tdatの場合、1つのtn_blockのサイズはmark.tdatの中のtn_block_sizeで示される。
各tn_blockは、それがシンタクス中のfor-loopの中で現れるときのtn_block_idの値で区別される。menu.tidx中のtn_block_idは、menu.tidx中のref_to_tn_block_idによって参照される。mark.tidx中のtn_block_idは、mark.tidx中のref_to_tn_block_idによって参照される。
サムネールは頻繁に追加、削除されるので、追加操作と部分削除の操作は容易に高速に実行できなければならない。この理由のため、menu.tdat とmark.tdatはブロック構造を有する。一つのピクチャデータは1つのtn_blockに格納される。
menu.tdatおよびmark.tdatのtn_block列の中に、使用されていないtn_blockが存在してもよい。例えば、あるサムネールの削除をする場合、サムネールのヘッダ情報ファイルの中にエントリーされているthumbnail_indexを消去し、サムネールのピクチャデータファイルを何も変更しなかったとき、tn_block列の中に、使用されていないtn_blockができる。
図43は、サムネールピクチャデータがどのようにtn_blockに格納されるかを模式的に表した図である。図のように、一つのサムネールピクチャのバイト長は、1つのtn_blockの大きさ以下である。tn_block列の中に、使用されていないtn_blockが存在してもよい。
次に、PlayListの編集動作のコンセプトについて説明する。以下の処理は、ユーザからの操作に基づいて、例えば、後述する図44の制御部17により実行される。
図45は、AVストリームが新しいClipとして記録される時のClipとPlayListの関係のコンセプトを説明する図である。AVストリームが新しいClipとして記録される場合、そのClip全体の再生可能範囲を参照するReal PlayListが作られる。
図46は、Virtual PlayListの作成のコンセプトについて説明する図である。
ユーザがReal PlayListの再生範囲の中から、IN-timeとOUT-timeを指定することによって、見たい再生区間のPlayItemを作り、Virtual PlayListをつくる。
図47は、Real PlayListの再生区間の一部分を消去したときのClipとPlayListの関係のコンセプトを説明する図である。必要なClip AVストリームの再生部分だけを参照するように、Real PlayListのPlayItemを変更する。そして、Clip AVストリームの不必要なストリーム部分を消去する。図47に示すように、Clip AVストリームの中央部のデータを消去しても、Clip AVストリームファイルは分割されないで、1つのファイルである。1つのClip AVストリームのデータを部分的に消去しても、残ったデータ部分は1つのClip AVストリームにまとめられる。
Real PlayListが変更されて、それが参照するClipのストリーム部分が消去された時、それと同じClipを使用しているVirtual PlayListが参照するClipがなくなって、問題が起きるかもしれない。そのようなことがないように、ユーザインターフェースは、次に示す対策をとるべきである。
その"消去"の操作に対して、ユーザに「そのReal PlayListが参照しているClipのストリーム部分を参照しているVirtual PlayListが存在し、もし、そのReal PlayListが消去されると、そのVirtual PlayListもまた消去されることになるが、それで良いか?」と確認,警告する。または、前記Virtual PlayListを消去する代わりに、Real PlayListに対して次に示す"ミニマイズ(Minimize)"の操作をする。
図48は、ミニマイズの編集をしたときのClipとReal PlayList, Virtual PlayListの関係のコンセプトを説明する図である。ミニマイズ編集は、Real PlayListのPlayItemを、Virtual PlayListに必要なClipのストリーム部分だけを参照するように変更する。そして、Virtual PlayList にとって不必要なClipのストリーム部分を消去する。
図48に示すように、Clip AVストリームの中央部のデータを消去しても、Clip AVストリームファイルは分割されないで、1つのファイルである。1つのClip AVストリームのデータを部分的に消去しても、残ったデータ部分は1つのClip AVストリームにまとめられる。
次に、前記のコンセプトに基づいて、Clip AVストリームのデータを部分的に消去する場合のClip Information fileの変化について説明する。
前述したように、AVストリームをClipファイルとして新たに記録する時、そのClipはATCの不連続点を含まず、ただ1つのATC-sequenceを持つ。そして、ATCの不連続点は、編集等によってClip AVストリームファイルのストリームデータを部分的に消去した場合にだけ、作られることを想定している。すなわち、図47や図48に示すように、1つのClip AVストリームのデータを部分的に消去して、残ったデータ部分が1つのClip AVストリームにまとめられた時、そのClipはATCの不連続点を持ち、複数のATC-sequenceを持つ。例えば、図49において、編集前のClipはATCの不連続点を含まず、ただ1つのATC-sequenceを持つとする。
そして図に示すように、Clip AVストリームの中央部のデータを消去した場合、編集後のClipは、2個のATC-sequenceを持つ。
図50は、1つのClip AVストリームのデータを部分的に消去した時のATC-sequence, STC-sequence および program-sequenceの関係を説明する図である。編集前のClipは、ただ1つのATC-sequenceと1つのSTC-sequenceと1つのprogram-sequenceを持つとする。すなわち、このClipの中では、program-sequenceの内容が変化しないとする。この時、図に影で示す部分のAVストリームデータを消去したとする。編集の結果、Clipは3個のATC-sequenceと3個のSTC-sequenceを持つ、一方、program-sequenceは1個のままである。このprogram-sequenceは、ATC-sequenceの境界とSTC-sequenceの境界をまたいでいる。
次に、前記のようにClip AVストリームのデータが部分的に消去される時の、ClipとPlayListの関係について説明する。
図51は、CPIがEP_mapであるClip AVストリームの一部分を消去した時のClipとPlayListの関係を説明する図である。編集前のClipは1個のATC-sequenceと3個のSTC-sequenceを持つとする。このATC-sequenceについてのoffset_STC_id[0]はゼロである。そして、Clipの中のstc=1であるSTC-sequenceは、PlayItem2とPlayItem3に使われているとする。今、図に示すようにstc=1であるSTC-sequenceのAVストリームデータについて、PlayItem2とPlayItem3に使われていない部分のAVストリームデータを消去したとする。
編集後のClipは2個のATC-sequenceを持ち、stc_id=1であったSTC-sequenceは2個のSTC-sequenceに分かれる。1番目のATC-sequenceについてのoffset_STC_id[0]はゼロにセットされ、2番目のATC-sequenceについてのoffset_STC_id[1]は1にセットされる。すなわち、1番目のATC-sequenceの中で最後のSTC-sequenceのstc_id と 2番目のATC-sequenceの中で最初のSTC-sequenceのstc_id は、同じ値で1になる。
これにより、編集後のVirtual PlayListのPlayItem3とPlayItem4のref_to_STC_idの値を変更する必要がない。Clip AVストリームファイルの部分的なデータを消去する時に、その消去部分を使用していないVirtual PlayListについては何も変更しなくても良い。
このように、Clip AVストリームの中にATCの不連続点を作ることができるので、Clip AVストリームのミドル(middle)部分のストリームデータを消去した場合に、Clipファイルを2個に分割する必要がない。さらに、ATCシーケンス毎に、その上にある最初のSTCシーケンスのSTC-idに対するoffset_STC_idを用いることにより、Clip AVストリームファイルの部分的なデータを消去する時に、その消去部分を使用していないVirtual PlayListについては何も変更しなくて良い。
この効果についての理解を助けるために、図52はClipの中にATCの不連続を許さない場合において、Clip AVストリームの一部分を消去した時に、Clipファイルが二つに分かれる場合を説明する図であり、また、その時のClipとPlayListの関係を説明する図である。
図51と同様にして、編集前のClipは1個のATC-sequenceと3個のSTC-sequenceを持つとする。このATC-sequenceについてのoffset_STC_id[0]はゼロである。そして、Clipの中のstc=1であるSTC-sequenceは、PlayItem2とPlayItem3に使われているとする。今、図に示すようにstc=1であるSTC-sequenceのAVストリームデータについて、PlayItem2とPlayItem3に使われていない部分のAVストリームデータを消去したとする。
Clipの中にATCの不連続を許さない場合、編集後はClip-AとClip-Bの2個のClipファイルに分かれる。そのため、PlayItem3とPlayItem4が参照するClipファイルの名前を変更する必要がある。すなわち、Clip AVストリームファイルの部分的なデータを消去する時に、その消去部分を使用していないVirtual PlayListであっても、その内容を変更しなければならない場合がある。
Clipの中にATCの不連続を許さない場合は、これを許す場合に比べると次の問題がある。
(1) ディスク中のClipファイル数が多くなる問題。
これによって、ディスクの再生開始時に全てのClipファイルを読み出し、再生装置(動画像記録再生装置1)のメモリ(制御部17に内蔵されているメモリ)にストアする処理にかかる時間が増える問題がある。また、ディスク(記録媒体10)中に記録可能なファイル数の上限をある所定の値に決めた時、編集等によりClipファイル数が多くなり、その数が上限に達してしまい、ディスク中にまだ空き領域があるのに記録できなくなる問題が発生する。
(2) Clip AVストリームファイルの部分的なデータを消去した時に、ディスク中にあるVirtual PlayListの変更にかかる時間が大きい問題。
本発明は、これらの問題を解決する。すなわち、ディスクの再生開始時に全てのClipファイルを読み出し、再生装置のメモリにストアする処理にかかる時間を小さくできる。また、ディスク中に記録可能なファイル数の上限をより小さく設定できる。また、Clip AVストリームファイルの部分的なデータを消去した時に、ディスク中にあるVirtual PlayListの変更にがかかる時間が小さくなる。
図53は、CPIがTU_mapであるClip AVストリームの一部分を消去した時のClipとPlayListの関係を説明する図である。編集前のClipは1個のATC-sequenceを持つ。このATC-sequenceについてのoffset_arrival_time[0]はゼロである。Virtual PlayListのPlayItem1, PlayItem2, PlayItem3およびPlayItem4は、このATC-sequenceを参照しているとする。今、図に示すようにATC-sequenceのAVストリームデータについて、どのPlayItemにも使われていないAVストリームデータを消去したとする。
編集後のClipは2個のATC-sequenceを持つ。1番目のATC-sequenceについてのoffset_arrival_time[0]はゼロにセットされ、2番目のATC-sequenceについてのoffset_arrival_time[1]は値Xにセットされる。値Xは、OUT_time2よりも大きく、IN_time3よりも小さい。すなわち、編集後にVirtual PlayListのPlayItem3とPlayItem4のIN_timeとOUT_timeの値を変更する必要がない。
Clip AVストリームファイルの部分的なデータを消去する時に、その消去部分を使用していないVirtual PlayListについては何も変更しなくても良い。
TU_map typeのPlayListを再生する場合、再生機はPlayItemのIN_timeとATC-sequenceのoffset_arrival_timeの値を比較することにより、そのIN_timeとOUT_timeが指すところのATC-sequenceを見つけることができる。例えば、図53の場合、PlayItem3のIN_time3は2番目のATC-sequenceのoffset_arrival_time(=X)よりも大きいので、PlayItem3のIN_time3とOUT_time3は、2番目のATC-sequenceを指すことがわかる。
次に、DVRアプリケーション構造のデータを記録再生するシステムについて、図44の動画像記録再生装置1のブロック図を用いて説明する。
例えば、光ディスクにより構成される記録媒体10は、再生部61の読み出し部11により、そこに記録されている情報が読み出される。復調部12は、読み出し部11が記録媒体10から読み出したデータを復調し、ECC復号部13に供給する。ECC復号部13は、復調部12より供給されたデータを、AVストリームとデータベースとに分離し、AVストリームをソースデパケッタイザ14に供給し、データベースを制御部17に出力する。
ソースデパケッタイザ14は、入力されたAVストリームをデパッケタイズし、デマルチプレクサ15に出力する。デマルチプレクサ15は、ソースデパケッタイザ14より供給されたデータをビデオ(V)、オーディオ(A)、およびシステム(S)の各データに分離し、AVデコーダ16とマルチプレクサ25に出力する。
AVデコーダ16は、入力されたビデオデータとオーディオデータを、システムデータに基づいてデコードし、ビデオ信号を端子18から、オーディオ信号を端子19から、それぞれ出力する。
記録部62のAVエンコーダ23には、端子21から入力されたビデオ信号と、端子22から入力されたオーディオ信号が供給される。ビデオ信号はまた、ビデオ解析部24にも供給される。AVエンコーダ23とビデオ解析部24には、端子21から入力されたビデオ信号の代わりに、必要に応じて、AVデコーダ16が出力したビデオ信号が供給される。
AVエンコーダ23は、入力されたビデオ信号とオーディオ信号をエンコードし、エンコードしたビデオ信号(V)、オーディオ信号(A)、およびエンコードに対応するシステムデータ(S)を、マルチプレクサ25に出力する。
ビデオ解析部24は、入力されたビデオ信号を解析し、解析結果を制御部17に出力する。
端子33には、デジタルインタフェースまたはデジタルテレビチューナからのトランスポートストリームが入力され、スイッチ27を介して、デマルチプレクサ15、またはさらにスイッチ28を介して、多重化ストリーム解析部26、およびソースパケッタイザ29に供給される。多重化ストリーム解析部26とソースパケッタイザ29にはまた、スイッチ28を介してマルチプレクサ25が出力した信号も、スイッチ27からの信号に代えて供給可能とされている。
多重化ストリーム解析部26は、入力された信号を解析し、解析結果を制御部17に出力する。ソースパケッタイザ29は、入力された信号をパケッタイズし、ECC符号化部30に供給する。ECC符号化部30には、制御部17が出力するデータベースも供給されている。
ECC符号化部30は、入力に誤り訂正符号を付加し、符号化し、変調部31に出力する。変調部31は、ECC符号化部30から入力されたデータを変調し、書き込み部32に出力する。書き込み部32は、変調部31から入力されたデータを記録媒体10に書き込む処理を実行する。
制御部17は、各種のデータを記憶する記憶部17Aを有しており、上述したフォーマットを管理し、データの記録媒体10に対する記録または再生のために、各部を制御する。
制御部17にはまた、ドライブ41が接続されており、磁気ディスク51、光ディスク52、光磁気ディスク53、または半導体メモリ54などがドライブされる。
なお、光ディスク52は、記録媒体10と兼用することも可能である。
次に記録時の基本的動作について、動画像記録再生装置1自身が、入力オーディオビデオ信号を符号化して記録する場合を例として説明する。
記録部62の端子21と端子22からは、それぞれビデオ信号とオーディオ信号が入力される。ビデオ信号は、ビデオ解析部24とAVエンコーダ23へ入力される。また、オーディオ信号もまたAVエンコーダ23へ入力される。AVエンコーダ23は、入力ビデオ信号とオーディオ信号を符号化し、符号化ビデオストリーム(V),符号化オーディオストリーム(A)、およびシステム情報(S)をマルチプレクサ25に出力する。
符号化ビデオストリーム(V)は、例えばMPEG2ビデオストリームであり、符号化オーディオストリーム(A)は、例えばMPEG1オーディオストリームやドルビーAC3(商標)オーディオストリーム等である。システム情報(S)は、ビデオオーディオの符号化情報(符号化ピクチャやオーディオフレームのバイトサイズ,ピクチャ符号化タイプ等)やAV同期等の時間情報である。
マルチプレクサ25は、入力ストリームを入力システム情報に基づいて多重化して、多重化ストリームを出力する。多重化ストリームは、例えば、MPEG2トランスポートストリームやMPEG2プログラムストリームである。多重化ストリームは、多重化ストリーム解析部26およびソースパケッタイザ29に入力される。
ソースパケッタイザ29は、入力多重化ストリームを、記録媒体10のアプリケーションフォーマットに従って、ソースパケットから構成されるAVストリームに符号化する。AVストリームは、ECC(誤り訂正)符号化部30で誤り訂正符号が付加され、変調部31で変調処理されて、書き込み部32へ入力される。書き込み部32は、制御部17から指示される制御信号に基づいて、記録媒体10へAVストリームファイルを記録する。
次に、例えば、図示せぬディジタルインタフェースまたはディジタルTVチューナから入力されるディジタルTV放送等のトランスポートストリームを記録する場合を説明する。
端子33からはトランスポートストリームが入力される。入力トランスポートストリームの記録方法は、2通りあり、それらは、トランスペアレントに記録する方法と記録ビットレートを下げるなどの目的のために再エンコードをして記録する方法である。記録方法の指示情報は、ユーザインターフェースとしての端子20から制御部17へ入力され、制御部17が記録方法を制御する。
入力トランスポートストリームをトランスペアレントに記録する場合、トランスポートストリームは、多重化ストリーム解析部26およびソースパケッタイザ29に入力される。これ以後、記録媒体10へAVストリームが記録されるまでの処理は、上述の入力オーディオ信号とビデオ信号を符号化して記録する場合と同じである。
入力トランスポートストリームを再エンコードして記録する場合、入力トランスポートストリームは、デマルチプレクサ15へ入力される。デマルチプレクサ15は、ビデオストリーム(V)をAVデコーダ16へ入力する。AVデコーダ16は、ビデオストリームを復号し、再生ビデオ信号をAVエンコーダ23へ入力する。AVエンコーダ23は、入力ビデオを符号化し、符号化ビデオストリーム(V)をマルチプレクサ25へ入力する。
一方、デマルチプレクサ15から出力されるオーディオストリーム(A)とシステム情報(S)は、ダイレクトにマルチプレクサ25へ入力される。マルチプレクサ25は、入力ストリームを、入力システム情報に基づいて多重化して、多重化ストリームを出力する。これ以後、記録媒体10へAVストリームが記録されるまでの処理は、上述の入力オーディオビデオ信号を符号化して記録する場合と同じである。
この動画像記録再生装置1は、AVストリームファイルを記録すると共に、そのファイルに関係するアプリケーションデータベース情報もまた記録する。アプリケーションデータベース情報は、制御部17により作成される。制御部17への入力情報は、ビデオ解析部24からの動画像の特徴情報、多重化ストリーム解析部26からのAVストリームの特徴情報、およびユーザインターフェースとしての端子20から入力されるユーザの指示情報である。
ビデオ解析部24からの動画像の特徴情報は、動画像記録再生装置1自身がビデオ信号を符号化する場合において、動画像記録再生装置1により生成されるものである。ビデオ解析部24は、入力ビデオ信号の内容を解析し、入力動画像信号の中の特徴的なマーク点の画像に関係する情報を生成する。この情報は、例えば、入力ビデオ信号の中のプログラムの開始点、シーンチェンジ点、CMのスタート・エンド点などの特徴的なマーク点の画像の指示情報であり、また、これには、その画像のサムネールも含まれる。これらの画像の指示情報は、制御部17を介して、マルチプレクサ25へ入力される。
マルチプレクサ25は、制御部17から指示されるマーク点の画像の符号化ピクチャを多重化した時に、その符号化ピクチャのAVストリーム上でのアドレス情報を制御部17に返す。制御部17は、特徴的な画像の種類と、その符号化ピクチャのAVストリーム上でのアドレス情報を関連付けて記憶する。
多重化ストリーム解析部26からのAVストリームの特徴情報は、記録されるAVストリームの符号化情報に関係する情報であり、これらは動画像記録再生装置1により生成される。例えば、AVストリームの中におけるIピクチャのタイムスタンプとアドレス情報,STCの不連続情報,プログラム内容の変化情報,アライバルタイムとアドレス情報、などが含まれる。
AVストリーム内のIピクチャのタイムスタンプとアドレス情報は、上述のEP_mapにストアされるデータとなる。AVストリーム内のSTCの不連続情報は、上述のSequenceInfoにストアされるデータとなる。AVストリーム内のプログラム内容の変化情報は、ProgramInfoにストアされるデータとなる。また、AVストリーム内のアライバルタイムとアドレス情報は、上述のTU_mapにストアされる。
また、多重化ストリーム解析部26は、端子33から入力されるトランスポートストリームをトランスペアレントに記録する場合、AVストリームの中の特徴的なマーク点の画像を検出し、その種類とアドレス情報を生成する。この情報は、ClipMarkにストアされるデータとなる。
多重化ストリーム解析部26からのAVストリームの特徴情報は、AVストリームのデータベース(Clip Information)にストアされるものである。
端子20からのユーザの指示情報には、AVストリームの中のお好みの再生区間の指定情報,その再生区間の内容を説明するキャラクター文字,ユーザがお好みのシーンにセットするブックマークやリジューム点のAVストリームの中のタイムスタンプなどが含まれる。これらのユーザの指示情報は、PlayListのデータベースにストアされるものである。
制御部17は、前記入力情報に基づいて、AVストリームのデータベース(Clip Information), PlayListのデータベース, 記録媒体10の記録内容の管理情報(info.dvr)、およびサムネール情報を作成する。これらのデータベース情報は、AVストリームと同様にして、ECC(誤り訂正)符号化部30,変調部31で処理されて、書き込み部32へ入力される。書き込み部32は、制御部17から指示される制御信号に基づいて、このデータベース情報を、記録媒体10へ、アプリケーションデータベース情報として記録する。
次に、再生時の基本的な動作について説明する。
記録媒体10には、AVストリームファイルとアプリケーションデータベース情報が記録されている。
はじめに制御部17は、再生部61の読み出し部11に対して、アプリケーションデータベース情報を読み出すように指示する。そして、読み出し部11は、記録媒体10からアプリケーションデータベース情報を読み出し、そのデータベース情報は、復調部12,ECC(誤り訂正)復号部13の処理を経て、制御部17へ入力される。
制御部17は、アプリケーションデータベースに基づいて、記録媒体10に記録されているPlayListの一覧を、端子20のユーザインターフェースへ出力する。ユーザは、PlayListの一覧から再生したいPlayListを選択し、再生を指定されたPlayListが制御部17へ入力される。制御部17は、そのPlayListの再生に必要なAVストリームファイルの読み出しを読み出し部11に指示する。そして、読み出し部11は、記録媒体10からそのAVストリームを読み出し、AVストリームは復調部12,ECC復号部13の処理を経て、ソース・デパケッタイザ14へ入力される。
ソース・デパケッタイザ14は、記録媒体のアプリケーションフォーマットのAVストリームを、デマルチプレクサ15へ入力できるストリームに変換する。デマルチプレクサ15は、制御部17により指定されたAVストリームの再生区間(PlayItem)を構成するビデオストリーム(V),オーディオストリーム(A)、およびシステム情報(S)をAVデコーダ16へ入力する。AVデコーダ16は、ビデオストリームとオーディオストリームを復号し、再生ビデオ信号と再生オーディオ信号を、それぞれ端子18と端子19から出力する。
ユーザによって選択されたEP_mapタイプのPlayListをある時間から途中再生する場合、制御部17は、指定された時間にもっとも近いPTSを持つIピクチャのアドレスからデータを読み出すように読み出し部11へ指示する。
また、ユーザによって選択されたTU_mapタイプのPlayListをある時間から途中再生する場合、制御部17は、指定された時間にもっとも近いアライバルタイムのソースパケットのアドレスからデータを読み出すように読み出し部11へ指示する。
さらに、Clip Informationの中のClipMarkにストアされている番組の頭出し点やシーンチェンジ点の中から、ユーザがあるマークを選択した時(例えば、この選択動作は、ClipMarkにストアされている番組の頭出し点やシーンチェンジ点のサムネール画像リストをユーザインターフェースに表示して、ユーザが、その中からある画像を選択することにより行われる)、制御部17は、Clip Informationの内容に基づいて、記録媒体10からのAVストリームの読み出し位置を決定し、そのAVストリームの読み出しを読み出し部11へ指示する。
すなわち、ユーザが選択した画像がストアされているAVストリーム上でのアドレスに最も近いアドレスにあるIピクチャからのデータを読み出すように読み出し部11へ指示が出される。読み出し部11は、指定されたアドレスからデータを読み出し、読み出されたデータは、復調部12,ECC復号部13の処理を経て、デマルチプレクサ15へ入力され、AVデコーダ16で復号されて、マーク点のピクチャのアドレスで示されるAVデータが再生される。
次に、ユーザが、AVストリームの編集をする場合を説明する。
ユーザが、記録媒体10に記録されているAVストリームの再生区間を指定して新しい再生経路を作成したい場合、ユーザインターフェースの端子20から、再生区間のイン点とアウト点の情報が制御部17へ入力される。制御部17は、AVストリームの再生区間(PlayItem)をグループ化したもの(PlayList)のデータベースを作成する。
ユーザが、記録媒体10に記録されているAVストリームの一部を消去したい場合、ユーザインターフェースの端子20から、消去区間の情報が制御部17へ入力される。制御部17は、必要なAVストリーム部分だけを参照するようにPlayListのデータベースを変更する。また、AVストリームの不必要なストリーム部分を消去するように、書き込み部32に指示する。また、Clip AVストリームの変化に基づいて、そのClip Information fileの内容を変更する。
ユーザが、記録媒体10に記録されているAVストリームの再生区間を指定して新しい再生経路を作成したい場合であり、かつそれぞれの再生区間をシームレスに接続したい場合の動作を説明する。この場合、制御部17は、AVストリームの再生区間(PlayItem)をグループ化したもの(PlayList)のデータベースを作成し、さらに、再生区間の接続点付近のビデオストリームの部分的な再エンコードと再多重化が必要になる。
まず、ユーザインターフェースとしての端子20から、再生区間のイン点のピクチャとアウト点のピクチャの情報が制御部17へ入力される。制御部17は、読み出し部11に、イン点のピクチャとアウト点のピクチャを再生するために必要なデータの読み出しを指示する。そして、読み出し部11は、記録媒体10からそのデータを読み出し、そのデータは、復調部12,ECC復号部13, ソース・デパケッタイザ14を経て、デマルチプレクサ15へ入力される。
制御部17は、デマルチプレクサ15へ入力されたストリームを解析して、ビデオストリームの再エンコード方法(picture_coding_typeの変更,再エンコードする符号化ビット量の割り当て)と再多重化方法を決定して、その方法をAVエンコーダ23とマルチプレクサ25へ供給する。
次に、デマルチプレクサ15は、入力されたストリームをビデオストリーム(V),オーディオストリーム(A)、およびシステム情報(S)に分離する。ビデオストリームは、「AVデコーダ16へ入力されるデータ」と、「マルチプレクサ25へ直接入力されるデータ」がある。前者のデータは、再エンコードするために必要なデータであり、これはAVデコーダ16で復号され、復号されたピクチャは、AVエンコーダ23で再エンコードされて、ビデオストリームになる。後者のデータは、再エンコードをしないで、オリジナルのストリームからコピーされるデータである。オーディオストリームとシステム情報は、マルチプレクサ25に直接入力される。
マルチプレクサ25は、制御部17から入力された情報に基づいて、入力ストリームを多重化し、多重化ストリームを出力する。多重化ストリームは、ECC(誤り訂正)符号化部30,変調部31で処理されて、書き込み部32へ入力される。書き込み部32は、制御部17から指示される制御信号に基づいて、記録媒体10へAVストリームを記録する。
次に、図54は、AVストリームをClipをして新しく記録するときの、Clip AVストリームファイルと、それに関連するClip Informationファイルの、動画像記録再生装置1の記録動作のフローチャートを示す。
ステップS11で、制御部17は、端子21および22から入力されるAV入力をエンコードして得たトランスポートストリーム、または端子33のディジタルインタフェースから入力されるトランスポートストリームをファイル化して、Clip AVストリームファイルを作成して記録する。
ステップS12で、制御部17は上記AVストリームファイルについてのClipInfo(図8)を作成する。
ステップS13で、制御部17は上記AVストリームファイルについてのSequenceInfo(図13)を作成する。
ステップS14で、制御部17は上記AVストリームファイルについてのProgramInfo(図15)を作成する。
ステップS15で、制御部17は上記AVストリームファイルについてのCPI (EP-mapまたはTU-map)(図24、図25および図26)を作成する。
ステップS16で、制御部17は上記AVストリームファイルについてのClipMarkを作成する。
ステップS17で、制御部17は上記ClipInfo, SequenceInfo, ProgramInfo, CPI, およびClipMarkがストアされたClip Informationファイル(図8)を記録する。
なお、ここでは各処理を時系列に説明したが、ステップS11からステップS116は、実際には同時に動作するものである。
次に、AVストリームをClipをして新しく記録するときの、SequenceInfo(図13)の作成の動作例を、図55のフローチャートを用いて説明する。この処理は、図44の多重化ストリーム解析部26で行われる。
ステップS31において、制御部17は最初のトランスポートパケットをATCシーケンスの開始点とする。すなわち、SPN_ATC_startが設定される。また、このとき、atc_idとstc_idも設定される。
ステップS32において、多重化ストリーム解析部26はAVストリームに含まれるアクセスユニット(例えば、ピクチャやオーディオフレーム)のPTSを解析する。
ステップS33において、多重化ストリーム解析部26はPCRパケットが受信されたかどうかを調べる。ステップS33において、Noの場合はステップS32へ戻り、Yesの場合はステップS34へ進む。
ステップS34において、多重化ストリーム解析部26はSTCの不連続が検出されたか否かを調べる。NOの場合は、ステップS32へ戻る。YESの場合は、ステップS35へ進む。なお、記録開始後、最初に受信されたPCRパケットの場合は、必ずステップS35へ進む。
ステップS35において、多重化ストリーム解析部26は、新しいSTCの最初のPCRを伝送するトランスポートパケットの番号(アドレス)を取得する。
ステップS36において、制御部17は上記パケット番号をSTCシーケンスの開始するソースパケット番号として取得する。すなわち、SPN_STC_startが設定される。また、ことのき、新たなstc_idが設定される。
ステップS37において、制御部17はSTCシーケンスの表示開始のPTSと表示終了のPTSを取得し、それぞれ、presentation_start_time、またはpresentation_end_timeに設定し、それらに基づいて、SequenceInfo(図13)を作成する。
ステップS38において、制御部17は最後のトランスポートパケットが入力終了したかどうかを調べる。Noの場合は、ステップS32へ戻り、Yesの場合は処理を終了する。
ProgramInfo(図15)の作成の動作例を図56のフローチャートを用いて説明する。この処理は図44の多重化ストリーム解析部26で行われる。
ステップS51において、多重化ストリーム解析部26はPSI/SIを含むトランスポートパケットが受信されたかどうかを調べる。ここで、PSI/SIのトランスポートパケットは、具体的には、PAT, PMT, SITのパケットである。SITは、DVB規格で規定されているパーシャルトランスポートストリームのサービス情報が記述されているトランスポートパケットである。ステップS51において、Noの場合はステップS51へ戻り、Yesの場合はステップS52へ進む。
ステップS52において、多重化ストリーム解析部26は、PSI/SIの内容が変わったかを調べる。すなわち、PAT,PMT,SITのそれぞれの内容が、以前に受信したそれぞれの内容と比べて変化したかどうかが調べられる。内容が変化していない場合は、ステップS51へ戻る。内容が変化した場合は、ステップS53へ進む。なお、記録開始後、最初に受信されたPSI/SIの場合は、必ずステップS53へ進む。
ステップS53において、制御部17は新しいPSI/SIを伝送するトランスポートパケットの番号(アドレス)とその内容を取得する。
ステップS54において、制御部17はProgram-sequenceの情報を作成し、ProgramInfo(図15)を作成する。
ステップS55において、制御部17は最後のトランスポートパケットが入力終了したかどうかを調べる。Noの場合は、ステップS51へ戻り、Yesの場合は処理を終了する。
次にEP_map(図24)の作成の動作例を、図57のフローチャートを用いて説明する。この処理は図44の多重化ストリーム解析部26で行われる。
ステップS71で多重化ストリーム解析部26は、記録するAVプログラムのビデオのPIDをセットする。トランスポートストリームの中に複数のビデオが含まれている場合は、それぞれのビデオPIDがセットされる。
ステップS72で多重化ストリーム解析部26は、ビデオのトランスポートパケットを受信する。
ステップS73で多重化ストリーム解析部26は、トランスポートパケットのペイロード(パケットヘッダーに続くデータ部)がPESパケットの第1バイト目から開始しているかを調べる(PESパケットは、MPEG2で規定されているパケットであり、エレメンタリーストリームをパケット化するものである)。これは、トランスポートパケットヘッダにある"payload_unit_start_indicator"の値を調べることによりわかり、この値が1である場合、トランスポートパケットのペイロードがPESパケットの第1バイト目から開始する。ステップS73でNoの場合は、ステップS72へ戻り、Yesの場合は、ステップS74へ進む。
ステップS74で多重化ストリーム解析部26は、PESパケットのペイロードが、MPEGビデオのsequence_header_code(32ビット長で"0x000001B3"の符号)の第1バイト目から開始しているかを調べる。ステップS74でNoの場合は、ステップS72へ戻り、Yesの場合は、ステップS75へ進む。
ステップS75へ進んだ場合、制御部17は現在のトランスポートパケットをエントリーポイントとする。
ステップS76で制御部17は、上記パケットのパケット番号と上記sequence_header_code から開始するIピクチャのPTSとそのエントリーポイントが属するビデオのPIDを取得し、EP_mapを作成する。
ステップS77で、多重化ストリーム解析部26は、現在のパケットが最後に入力されるトランスポートパケットであるかどうかを判定する。最後のパケットでない場合、ステップS72へ戻る。最後のパケットである場合、処理を終了する。
図58は、Real PlayListの作成方法を説明するフローチャートを示す。図44の動画像記録再生装置1のブロック図を参照しながら説明する。
ステップS91で、制御部17はClip AVストリームを記録する。
ステップS92で、制御部17は上記Clipの全ての再生可能範囲をカバーするPlayItem(図36)からなるPlayList()(図31)を作成する。Clipの中にSTC不連続点があり、PlayList()が2つ以上のPlayItemからなる場合は、制御部17はPlayItem間のconnection_conditionもまた決定する。
ステップS93で、制御部17はUIAppInfoPlayList()を作成する。UIAppInfoPlayList()はPlayListの内容をユーザへ説明するための情報を含む。本実施の形態ではその説明を省略する。
ステップS94で、制御部17はPlayListMarkを作成する(本実施の形態ではその説明を省略)。
ステップS95で、制御部17はMakersPrivateDataを作成する(本実施の形態ではその説明を省略)。
ステップS96で、制御部17はReal PlayListファイルを記録する。
このようにして、新規にClip AVストリームを記録する毎に、1つのReal PlayListファイルが作られる。
図59は、Virtual PlayListの作成方法を説明するフローチャートである。
ステップS111で、ユーザインターフェースを通して、ディスク(記録媒体10)に記録されている1つのReal PlayListの再生が指定される。そして、そのReal PlayListの再生範囲の中から、ユーザインターフェースを通して、IN点とOUT点で示される再生区間が指定される。
ステップS112で、制御部17はユーザによる再生範囲の指定操作がすべて終了したか調べる。ユーザが上記指示した再生区間に続けて再生する区間を選ぶ場合はステップS111へ戻る。
ステップS112でユーザによる再生範囲の指定操作がすべて終了したと判定された場合は、ステップS113へ進む。
ステップS113で、連続して再生される2つの再生区間の間の接続状態(connection_condition)を、ユーザがユーザインターフェースを通して決定するか、または制御部17が決定する。
ステップS114で、ユーザインターフェースを通して、ユーザがサブパス(アフレコ用オーディオ)情報を指定する。ユーザがサブパスを作成しない場合はこのステップの処理はスルーされる。サブパス情報は、PlayListの中のSubPlayItemにストアされる情報であるが、本発明の趣旨に必要ないので説明を省略する。
ステップS115で、制御部17はユーザが指定した再生範囲情報、およびconnection_conditionに基づいて、PlayList()(図28)を作成する。
ステップS116で、制御部17はUIAppInfoPlayList()を作成する。UIAppInfoPlayList()はPlayListの内容をユーザへ説明するための情報を含む。本実施の形態ではその説明を省略する。
ステップS117で、制御部17はPlayListMarkを作成する(本実施の形態ではその説明を省略)。
ステップS118で、制御部17はMakersPrivateDataを作成する(本実施の形態ではその説明を省略)。
ステップS119で、制御部17はVirtual PlayListファイルを記録媒体10に記録する。
このようにして、記録媒体10に記録されているReal PlayListの再生範囲の中から、ユーザが見たい再生区間を選択してその再生区間をグループ化したもの毎に、1つのVirtual PlayListファイルが作られる。
図60はPlayListの再生方法を説明するフローチャートである。
ステップS131で、制御部17はInfo.dvr, Clip Information file, PlayList fileおよびサムネールファイルの情報を取得し、ディスク(記録媒体10)に記録されているPlayListの一覧を示すGUI画面を作成し、ユーザインターフェースを通して、GUIに表示する。
ステップS132で、制御部17はそれぞれのPlayListのUIAppInfoPlayList()に基づいて、PlayListを説明する情報をGUI画面に提示する。
ステップS133で、ユーザインターフェースを通して、GUI画面上からユーザが1つのPlayListの再生を指示する。
ステップS134で、制御部17は現在のPlayItemのSTC-idとIN_timeのPTSから、IN_timeより時間的に前で最も近いエントリーポイントのあるソースパケット番号を取得する。
ステップS135で、制御部17は上記エントリーポイントのあるソースパケット番号からAVストリームのデータを読み出し、デコーダへ供給する。
ステップS136で、現在のPlayItemの時間的に前のPlayItemがあった場合は、制御部17は、前のPlayItemと現在のPlayItemとの表示の接続処理をconnection_conditionに従って行う。
ステップS137で、制御部17は、AVデコーダ16にIN_timeのPTSのピクチャから表示を開始するように指示する。
ステップS138で、制御部17は、AVデコーダ16にAVストリームのデコードを続けるように指示する。
ステップS139で、制御部17は、現在表示の画像が、OUT_timeのPTSの画像か否かを調べる。Noの場合は、ステップS140へ進む。ステップS140で現在の画像を表示して、ステップS138へ戻る。
ステップS139で現在表示の画像がOUT_timeのPTSの画像の場合はステップS141へ進む。
ステップS141で、制御部17は、現在のPlayItemがPlayListの中で最後のPlayItemかを調べる。Noの場合はステップS134へ戻る。Yesの場合は、PlayListの再生を終了する。
このようなシンタクス、データ構造、規則に基づく事により、記録媒体10に記録されているデータの内容、再生情報などを適切に管理することができ、もって、ユーザが再生時に適切に記録媒体に記録されているデータの内容を確認したり、所望のデータを簡便に再生できるようにすることができる。
次に、本発明のAVストリームファイルとデータベースファイルが記録されている記録媒体から、ディジタルバス経由で、別の記録媒体へAVストリームファイルとデータベースファイルをファイルコピーする方法を説明する。
まず、本方法の目的を説明するために、AVストリームとそのデータベースを共にデータ転送する場合と、AVストリームだけをデータ転送する場合の違いを説明する。
図61、図62は、AVストリームとそのデータベースを共にデータ転送する場合を示す。一方、図63、図64は、AVストリームだけをデータ転送する場合を示す。
コピー元の記録媒体(例えば、後述する図71の記録媒体10)には、ClipとPlayListが記録されている。説明を簡単化するために、いま、1個のClip(Clip Information fileとClip AV stream file)を使用しているPlayListファイルがコピー元の記録媒体に記録されているとする。
図61は、当該PlayListとClipのファイルを、コピー元(図71の再生装置2)からコピー先(図71の記録装置3)へ、IEEE1394のディジタルバス(図71のディジタルバス60)を経由して、Asynchronous(アシンクロナス)転送によって、ファイル転送する場合を示す。この場合、コピーされたClip AV stream fileの各ソースパケットのTP_extra_headerのATS(アライバルタイムスタンプ)は、コピー元と同じであり、また、コピーされたClip AV stream fileに対応するClip Information fileとPlayListファイルもコピー先へコピーされる。
また、図62は、PlayList fileとClip Information fileのファイルを、コピー元(図71の再生装置2)からコピー先(図71の記録装置3)へ、IEEE1394のディジタルバス(図71のディジタルバス60)を経由して、Asynchronous(アシンクロナス)転送によって、ファイル転送し、AVストリームを、コピー元からコピー先へ、Isochronous(アイソクロナス)転送によって、リアルタイム転送(ストリーム転送)する場合を示す。
この場合、コピー元(図71の再生装置2)は、Clip Information fileに対応するClip AV stream fileをディジタルバス(図71のディジタルバス60)へ出力する時に、各ソースパケットのアライバルタイムスタンプに従って、トランスポートパケットを出力する(図7の再生モデルを参照)。各ソースパケットのTP_extra_header(ATS)は、コピー先(図71の記録装置3)で新たに付加される。また、コピーされたClip AV stream fileに対応するClip Information fileとPlayListファイルもコピー先へコピーされる。
図61または図62の場合、コピー元のPlayListとClipの内容を全て、コピー先へ転送することができるので、有効である。すなわち、コピー元のPlayListにセットされていた再生指定情報,UIAppInfoPlayList,PlayListMark,サムネール情報の内容など、また、コピー元のClipにセットされていた CPI, SequenceInfo, ProgramInfo, ClipMark,サムネール情報の内容などを、コピー先へ転送することができるので、有効である。
一方、図63、図64は、AVストリームだけをデータ転送する場合を示す。
図63は、AVストリームだけを、コピー元(図71の再生装置2)からコピー先(図71の記録装置3)へ、IEEE1394のディジタルバス(図71のディジタルバス60)を経由して、Isochronous(アイソクロナス)転送によって、リアルタイム転送(ストリーム転送)する場合を示す。この場合、コピー元は、PlayListが指定する再生区間のAVストリームをディジタルバスへ出力する時に、各ソースパケットのアライバルタイムスタンプに従って、トランスポートパケットを出力する(図7の再生モデルを参照)。コピー先の側から見ると、ディジタル放送のトランスポートストリームを記録する場合と同じ状態であり、入力されたAVストリームが新たに、Clipとして記録される。すなわち、各ソースパケットのTP_extra_header(ATS)は、コピー先で新たに付加される。また、当該Clipの再生範囲をカバーするReal PlayListファイルが新たに作られる。
また、図64は、コピー先の記録装置(図71の記録装置3)がDVRフォーマットに準拠したものでない場合に、AVストリームだけをリアルタイムにデータを再生する速度でデータ転送する場合を説明する図である。
この場合も、図63の場合と同様にして、AVストリームを、コピー元からコピー先へ、IEEE1394のIsochronous(アイソクロナス)転送によって、リアルタイム転送(ストリーム転送)する。コピー先では、その記録装置(図71の記録装置3)のフォーマットを用いて、入力されたAVストリームを記録する。例えば、コピー先の記録装置が、D−VHS(商標)の場合は、そのフォーマットでAVストリームを記録する。このように、コピー元のDVRフォーマットに準拠した再生装置(図71の再生装置2の制御部17)が、コピー先の記録装置(図71の記録装置3の制御部17−2)と相互認証を行い、前記記録装置がDVRフォーマットに準拠していないことをわかると、前記再生装置(図71の再生装置2の制御部17)は、AVストリームをリアルタイム転送する。
図63または図64の場合、コピー元のPlayListとClipの内容を全て、コピー先へ転送することができないので、問題がある。すなわち、コピー元のPlayListにセットされていた再生指定情報,UIAppInfoPlayList,PlayListMark,サムネール情報の内容など、また、コピー元のClipにセットされていた CPI, SequenceInfo, ProgramInfo, ClipMark,サムネール情報の内容などを、コピー先へ転送することができない。一方、図61または図62の場合は、コピー元のPlayListとClipの内容を全て、コピー先へ転送することができる。
コピー先の記録装置が、本実施の形態で説明しているDVRフォーマットに準拠している場合、図61と図62のどちらでも使用することができる。
図61の方法は、AVストリームをファイル転送するので、リアルタイムにデータを再生する速度でデータ転送する場合よりも高速にデータを転送することができる。しかし、コピー先の記録装置で入力されるデータを、リアルタイムにデコードして再生することは難しい。
一方、図62の方法は、AVストリームをリアルタイムにデータを再生する速度でデータ転送するので、コピー先の記録装置で入力されるデータをリアルタイムにデコードして再生することができる。しかし、AVストリームのコピーにかかる時間は、リアルタイムにデータを再生する場合と同じ時間が必要である。図61と図62の方法は、上記のように目的別に切り替えて使用するものである。
図61と図62の例は、PlayListが一つのClipの再生範囲の全体をカバーしている場合であるが、図46で説明したように、PlayListが指定する再生範囲は、一つのClip AVストリームの全体をカバーするとは限らない。これは、Real PlayListおよびVirtual PlayListのどちらでも、そうである。PlayListをコピー先へ転送するときは、PlayListの再生に必要なAVストリーム部分とそれが参照するClipのデータだけを、コピー先へ転送するようにした方が良い。すなわち、図65の例のように、コピー元(図72の再生装置2)から、コピー先(図71の記録装置3)へ、PlayListとそれに必要なClipの部分だけをコピーする。このようにすれば、コピー先の記録媒体(図71の記録装置3の記録媒体10−2)上に必要な空き記録容量を小さくできる。
コピー元(出力側の再生装置)から、コピー先(入力側の記録装置)へ、PlayListをコピーする場合に、そのPlayListの再生に必要なClip AVストリームの部分を決める方法について説明する。
図66は、あるPlayListが、オリジナルのAVストリームファイルの部分的な再生範囲を指示している時に、そのPlayListの再生に必要なストリーム部分を示す。
当該PlayListは、オリジナルAVストリーム上のIN_timeとOUT_timeを指しているとする。この場合、PlayListの再生に必要なストリーム部分は、図に示すようにソースパケット番号のX番目からY番目までである。以下の説明では、このX点とY点を決める方法の例を説明する。
図67は、AVストリームの内容を解析することをしないで、IN点の前のデータのコピー開始点(X点)を決める方法を説明する図である。PlayListはオリジナルAVストリーム上のIN点を指す。また、そのAVストリームのEP_mapを図示する。IN点が指すピクチャをデコードするためには、アドレスISA2から開始するIピクチャが必要である。また、X点の後で、PAT,PMTおよびPCRパケットが必要である。SPN_EP_start=ISA1のPTSはpts1であり、SPN_EP_start=ISA2のPTSはpts2である。pts1とpts2のシステムタイムベースの時間差が100 msec以上ならば、アドレスISA1とISA2の間にはPAT, PMTおよびPCRパケットが存在する(少なくとも、SESF, DVB, ATSC, ISDBの場合はそうである)。したがって、X点はアドレスISA1の前に決められる。そして、X点はアラインドユニットの境界でなければならない。
コピー元の再生装置は、AVストリームの内容を解析することをしないで、X点をEP_mapを使用して次のステップで決めることができる。
(S1)システムタイムベース上でIN timeのPTSに最も近く、かつそれよりも過去の表示時刻のPTSの値を持つSPN_EP_startを見つける。
(S2)ステップS1で見つけたSPN_EP_startのPTSの値よりも少なくとも100 msec過去の表示時刻のPTSの値を持つSPN_EP_startを見つける。
(S3)X点は、ステップS2で見つけたSPN_EP_startよりも前に決められる。
そして、X点はアラインドユニットの境界でなければならない。
この方法は、X点を決めるためにAVストリームのデータを読み出し、その内容を解析することを必要としないので、簡単である。しかし、X点より後のAVストリームは、そのPlayListの再生には不要なデータを残してしまう場合がある。
もし、X点を決めるためにAVストリームのデータを読み出し、その内容を解析するならば、そのPlayListの再生には不要なデータをより効率良く除去できる。
図68は、AVストリームの内容を解析することをしないで、OUT点の後のデータのコピー終了点(Y点)を決める方法を説明する図である。PlayListはオリジナルAVストリーム上のOUT点を指す。また、そのAVストリームのEP_mapを図示する。
SPN_EP_start=ISA4から開始するビデオシーケンスは次に示すものであることを前提とする。
I2 B0 B1 P5...
ここで、I,P,BはそれぞれIピクチャ,PピクチャそしてBピクチャを表す。数字は表示順序を表す。この処理において、記録装置がAVストリームの内容を解析しない場合、動画像記録再生装置1(図71の記録装置3)は、OUT_timeのPTSが参照するところのピクチャの情報(ピクチャコーディングタイプ,テンポラル・レファレンスなど)がわからない。OUT_timeのPTSはピクチャB0またはB1を参照しているかもしれない(コピー元の再生装置(図71の再生装置2)がAVストリームの内容を解析しない場合、このことはわからない)、この場合、ピクチャB0,B1をデコードするためにはI2が必要である。I2のPTSはOUT timeのPTSよりも大きい(OUT_time < pts4, ここでpts4はI2のPTSである)。I2のPTSはOUT_timeのPTSよりも大きいが、B0, B1のためにI2が必要である。
したがって、Y点は図に示すアドレスISA5の後ろに決められる。ISA5は、EP_mapの中でISA4の直後にあるSPN_EP_startの値である。Y点はまたアラインドユニットの境界でなければならない。
コピー元の再生装置(図71の再生装置2)は、AVストリームの内容を解析することをしないで、Y点をEP_mapを使用して次のステップで決めることができる。
(S1)システムタイムベース上でOUT timeのPTSに最も近く、かつそれよりも未来の表示時刻のPTSの値を持つSPN_EP_startを見つける。
(S2)ステップS1で見つけたSPN_EP_startの直後にあるSPN_EP_start を見つける。
(S3)Y点は、ステップS2で見つけたSPN_EP_startよりも後ろに決められる。そして、Y点はアラインドユニットの境界でなければならない。
この方法は、Y点を決めるためにAVストリームのデータを読み出し、その内容を解析することを必要としないので、簡単である。しかし、Y点より前のAVストリームは、そのPlayListの再生には不要なデータを残してしまう場合がある。
もし、Y点を決めるためにAVストリームのデータを読み出し、その内容を解析するならば、そのPlayListの再生には不要なデータをより効率良く除去できる。
次に、前記のように、コピー元から、コピー先へ、PlayListをコピーする場合に、そのPlayListの再生に必要なClip AVストリームを作成した場合の、Clip InformationファイルとPlayListの関係について説明する。
図69は、コピー元から、コピー先へ、PlayListをコピーする場合の例であり、そのPlayListの再生に必要なClip AVストリームを作成したときの、ClipとPlayListの関係を説明する図である。ここで、ClipのCPIはEP_mapであるとする。オリジナルのClipは1個のATC-sequenceと3個のSTC-sequenceを持つとする。このATC-sequenceについてのoffset_STC_id[0]はゼロである。そして、Clipの中で、stc_id=0のSTC-sequenceは、PlayItem1に使われており、stc_id=1であるSTC-sequenceは、PlayItem2とPlayItem3に使われており、stc_id=2であるSTC-sequenceは、PlayItem4に使われているいるとする。
今、このPlayListを別の記録媒体にコピーしたとする。すなわち、これにより、図69に示したように、このPlayListの再生に必要なClipの部分から成るClipが作られる。このように、コピー元において、1個のClip AVストリームから取り出された一つ以上のストリーム部分は、コピー先でも1個のClip AVストリームにコンバインされる。そして、新たに作られたClipは4個のATC-sequenceを持ち、それぞれのATC-sequenceは1個のSTC-sequenceを持つ。
stc_id=0であったSTC-sequenceが含まれるATC-sequenceのoffset_STC_id[0]はゼロにセットされる。また、stc_id=1であったSTC-sequenceは2個のSTC-sequenceに分かれる。1番目のATC-sequenceについてのoffset_STC_id[0]はゼロにセットされ、2番目のATC-sequenceについてのoffset_STC_id[1]は1にセットされる。すなわち、1番目のATC-sequenceの中で最後のSTC-sequenceのstc_id と 2番目のATC-sequenceの中で最初のSTC-sequenceのstc_id は、同じ値で1になる。
また、stc_id=2であったSTC-sequenceが含まれるATC-sequenceのoffset_STC_id[0]は2にセットされる。
これにより、コピーするPlayListのPlayItem1, PlayItem2, PlayItem3とPlayItem4のref_to_STC_idの値を変更する必要がない。あるPlayListを別の記録媒体にコピーする場合、このPlayListの再生に必要なClipの部分から成るClipを作成したときに、PlayListの内容については何も変更しなくても良い。
このように、Clip AVストリームの中にATCの不連続点を作ることができるので、PlayListの再生に必要なClipのストリームデータを部分的に取り出す場合に、Clipファイルを分割する必要がない。さらに、ATCシーケンス毎に、その上にある最初のSTCシーケンスのSTC-idに対するoffset_STC_idを用いることにより、PlayListの再生に必要なClipの部分から成るClipを作成したときに、PlayListの内容については何も変更しなくても良い。
次に、前記のように、Clipを部分的にコピーする場合のClipの変更方法について説明する。図70は、Clipを部分的にコピーする場合の例であり、その時のSequenceInfo, ProgramInfo, CPI(EP_map)およびClipMarkの変更方法を説明する図である。
図70(A)に示すClipが、コピー元に記録されているとする。このClipは、1個のATC-sequenceを持ち、その上にそれぞれ2個のSTC-sequenceとprogram-sequenceがある。1番目のSTC-sequenceとprogram-sequenceの開始アドレスは同じであり、それはClip AVストリーム上で0のソースパケット番号である。2番目のSTC-sequenceとprogram-sequenceの開始アドレスは同じであり、それはClip AVストリーム上でBなるソースパケット番号である。
今、図70(A)のソースパケット番号A(A<B)から始まる付影部分のストリームデータをコピーするとする。この付影部分は、AVストリームのIN_timeからOUT_timeの再生区間に必要なストリーム部分である。コピー先に転送されるClipを図70(B)に示す。コピー先に転送されるClipは、1個のATC-sequenceを持ち、その上にそれぞれ2個のSTC-sequenceとprogram-sequenceがある。1番目のSTC-sequenceとprogram-sequenceの開始アドレスは同じであり、それはClip AVストリーム上で0(A−A)のソースパケット番号である。2番目のSTC-sequenceとprogram-sequenceの開始アドレスは同じであり、それはClip AVストリーム上で(B−A)なるソースパケット番号である。
図70(C)は、図70(A)に示すClipのClip Information fileの内容を示す。上記の説明のように、SPN_ATC_start[0] = 0
SPN_STC_start[0] = 0, SPN_STC_start[1] = B
SPN_program_sequence_start[0] = 0, SPN_program_sequence_start[1] = B
である。
また、このClip Information file が、図示するようなEP_mapとClipMarkを持つとする。この中で、図70(A)の付影部分のClipが使用するEP_mapとClipMarkのデータ部分は次の範囲である。
EP_mapにおいては、
IN_time<pts(xa),
pts(xz)<OUT_time
のPTSの値を持つエントリーポイントのデータが、図70(A)の付影部分のClipに必要である。
ClipMarkにおいては、
IN_time<pts(F),
pts(Q)<OUT_time
のPTSの値を持つマークのデータが、図70(A)の付影部分のClipに必要である。
図70(D)は、図70(B)に示すClipのClip Information fileの内容を示す。上記の説明のように、
SPN_ATC_start[0] = 0
SPN_STC_start[0] = 0, SPN_STC_start[1] = B-A
SPN_program_sequence_start[0] = 0, SPN_program_sequence_start[1] = B-A
である。
また、EP_mapのデータは、図70(C)において斜線部分のClipが使用するEP_mapのデータを元にして作成される。すなわち、エントリーポイントのPTSの値は同じであり、ソースポケット番号の値は、コピー元のClipのコピーの開始ソースパケット番号Aが差し引かれる。また、ClipMarkのデータは、図70(C)において付影部分のClipが使用するClipMarkのデータがそのままコピーされる。
図71は、コピー元(出力側)の再生装置2から、コピー先(入力側)の記録装置3へ、AVストリームとそれに関係するデータベースを転送する場合、および、AVストリームだけをデータ転送する場合の構成を示す。図中で、図44と同じブロック番号がついているものは同じもであることを示す。また、記録装置3の記録媒体10−2と制御部17−2は、それぞれ記録媒体10と制御部17と同じ働きをするものである。
はじめに、AVストリームとそれに関係するデータベースを共に転送する場合を説明する。
まず、再生装置2の記録媒体10に記録されている所望のPlayListを記録装置3の記録媒体10−2へコピーすることを指示する情報が、図示しないユーザインターフェースを通して、コピー制御コマンドに乗って、再生装置2へ入力される。このコマンドは、ディジタルバスインターフェース50、バスコントローラ52を経由して、制御部17へ入力される。
制御部17は、上記PlayListの再生に必要なAVストリームのストリーム部分を決定し、そのAVストリームデータを記録媒体10から読み出すように、読み出し部11に指示を出す(図66、図67、図68参照)。また、制御部17は、上記PlayListに関係するデータベースファイル(PlayListファイル、Clip Information fileとサムネールファイル)を記録媒体10から読み出すように、読み出し部11に指示を出す。
制御部17は、復調部12、ECC復号部13を経て読み出された前記AVストリームデータを、スイッチ61の接点A側を通して、AVストリームファイルとして、ディジタルバスインターフェース50へ供給するように指示する(図61の場合)。ここで、1個のClip AVストリームファイルから取り出された一つ以上のストリーム部分は、1個のClip AVストリームファイルにコンバインされる(図69参照)。
または、制御部17は、復調部12、ECC復号部13を経て読み出された前記AVストリームデータを、スイッチ61の接点I側を通して、ソースデパケッタイザ14へ入力しても良い(図62の場合)。この場合、ソースデパケッタイザ14は、アライバルタイムスタンプに従って、トランスポートストリームをディジタルバスインターフェース50へ供給する。
一方、記録媒体10から読み出されたAVストリームデータに対応するデータベースファイルが、復調部12、ECC復号部13を経て、メモリ51へ入力される。制御部17は、メモリ51にあるデータを元にして、ディジタルバスインターフェース50から出力される上記のAVストリームファイルの再生に必要なデータベース(Clip Informationファイル,PlayListファイル)を作成する(図69、図70参照)。また、制御部17は、上記のAVストリームファイルに対応するClipとコピーするPlayListファイルが使用するサムネールファイルを作成する(後述の図72のステップS172参照)。
そして、制御部17は、上記新たに作成されたデータベースファイル(Clip Informationファイル,PlayListファイルとサムネールファイル)をメモリ51からディジタルバスインターフェース50へ供給するように指示する。
バスコントローラ52は、ディジタルインタフェース50からのファイル出力を制御する。制御部17は、バスコントローラ52に対して、ディジタルバスインターフェース50から、AVストリームとそれに関係するデータベースを出力するように指示する。
前記AVストリームとそれに関係するデータベースは、ディジタルバス60を経由して、コピー先の記録装置3へ入力される。
コピー先の記録装置3のバスコントローラ57は、ディジタルバスインターフェース55からのファイル入力を制御する。また、バスコントローラ52とバスコントローラ57は、ファイルのコピー制御コマンドを交換して、データ伝送/受信のタイミングを制御する。
記録装置3の制御部17−2は、コピー元からディジタルバスインターフェース55へ、AVストリームファイルとして入力される場合、スイッチ62の接点A側を通して、ECC符号化部30,変調部31、書き込み部32の処理を経て、記録媒体10−2に記録するように指示する。
または、制御部17−2は、コピー元からディジタルバスインターフェース55へ、トランスポートストリームとして入力される場合、スイッチ62の接点I側を通して、ソースパケッタイザ29へ入力する。ソースパケッタイザ29は、トランスポートパケットをソースパケット化して出力する。制御部17−2は、ソースパケットから成るAVストリームを、ECC符号化部30,変調部31、書き込み部32の処理を経て、記録媒体10−2に記録するように指示する。
また、制御部17−2は、ディジタルバスインターフェース55へ入力されるデータベースファイルを、メモリ56へ書きこむように指示する。
また、制御部17−2は、記録媒体10−2に記録されているデータベースファイル(Info.dvrファイルとサムネールファイル)を、読み出し部11、復調部12,ECC復号部13の処理を経て、メモリ56へ読み出すように指示する。
そして、制御部17−2は、メモリ56にあるInfo.dvrファイルとサムネールファイルを更新する。具体的には、コピー先にあるInfo.dvrファイルのTableOfPlayListに、新たに記録するPlayListファイル名を追加し、また、コピー先にあるサムネールファイルに新たに記録するサムネールを追加する(後述の図74のステップ224,S225参照)。
制御部17−2は、メモリ56にあるデータベースファイルを読み出して、ECC符号化部30,変調部31、書き込み部32の処理を経て、記録媒体10−2に記録するように指示する。
このようにして、再生装置2から、記録装置3へ、AVストリームとそれに関係するデータベースをデータ転送してコピーする場合の処理を行う。
次に、再生装置2がコピー先へAVストリームだけを転送する場合を説明する。これは、コピー先の記録装置3が、DVRフォーマットに準拠していない場合における、再生装置2のトランスポートストリームの再生動作と考えられる。
制御部17は、上記PlayListの再生に必要なAVストリームのストリーム部分を決定し、そのAVストリームデータを記録媒体10から読み出すように、読み出し部11に指示を出す。制御部17は、復調部12、ECC復号部13を経て読み出された前記AVストリームデータを、スイッチ61の接点I側を通して、ソースデパケッタイザ14へ入力する。ソースデパケッタイザ14は、アライバルタイムスタンプに従って、トランスポートパケットをディジタルバスインターフェース50へ供給する。ディジタルバスインターフェース50は、トランスポートパケットをアイソクロナス転送する。
また、記録装置3へAVストリームだけが転送される場合を説明する。これは、コピー元の再生装置2が、DVRフォーマットに準拠していない場合における、記録装置3のトランスポートストリームの記録動作と考えられる。
記録装置3の制御部17−2は、ディジタルバスインターフェース55へ入力されるトランスポートストリームを、スイッチ62の接点I側を通して、ソースパケッタイザ29へ入力する。ソースパケッタイザ29は、トランスポートパケットをソースパケット化して出力する。制御部17−2は、ソースパケットから成るAVストリームを、ECC符号化部30,変調部31、書き込み部32の処理を経て、記録媒体10−2に記録するように指示する。
また、スイッチ62の接点I側を通して、トランスポートストリームは多重化ストリーム解析部26へ入力される。ここでの処理の内容は、前述の図44で説明したとおりである。制御部17−2は、解析部26での解析結果に基づいて、データベースファイルを作成する。制御部17−2は、データベースファイルをECC符号化部30,変調部31、書き込み部32の処理を経て、記録媒体10−2に記録するように指示する。
このようにして、再生装置2からAVストリームだけをデータ転送する場合の処理、また、再生装置3へAVストリームだけがデータ転送される場合の処理を行う。
図72は、コピー元(出力側の再生装置2)から、コピー先(入力側の記録装置3)へ、PlayListをコピーする場合の、コピー元の制御部17が行う処理を説明するフローチャートである。
ステップS170で、AVストリームとそれに関係するデータベースをデータ転送してコピーする場合と、AVストリームだけをデータ転送してコピーする場合かを決める。前者の場合は、ステップS171へ進む。後者の場合は、ステップS175へ進む。
ステップS171で、Clipについての次の処理を行う。
・当該PlayListの再生に必要なClip AVストリームの部分を決定する(図66、図67、図68参照)。
・上記決定したAVストリーム部分が使用するClip Informationファイルを作成する(図70参照)。
ステップS172で、サムネールファイルについての次の処理を行う。
・当該PlayListが使用するメニューサムネールを含むファイルを作成する。
・当該PlayListおよび上記決定したAVストリーム部分が、使用するマークサムネールを含むファイルを作成する。
ステップS173で、AVストリームファイルの転送の処理を行う。
・上記Clipの処理で決定したストリーム部分のAVストリームデータをコピー先へ転送する(図69参照)。
ステップS174で、データベースファイルの転送の処理を行う。
・上記PlayListファイルをコピー先へ転送する。
・上記Clipの処理で作成したClip Informationファイルをコピー先へ転送する。
・上記ステップS172で作成したサムネールファイルをコピー先へ転送する。
ステップS170で、AVストリームだけをデータ転送してコピーすると判定され、ステップS175へ進む場合、図60に示すPlayListの再生を説明するフローチャートで読み出されるAVストリームデータ(S135で読み出すAVストリームデータ)を、トランスポートストリーム化して、コピー先へ転送する。
図73は、上記ステップS171のClipについての処理の詳細を説明するフローチャートである(図70参照)。
ステップS201で、PlayListが、当該Clipの中で使用する再生区間の表示開始時刻および表示終了時刻を取得する。
ステップS202で、上記時間区間に対応するClip AVストリーム上のコピー開始パケット(アドレス)とコピー終了パケット(アドレス)をCPIに基づいて決定する。
ステップS203で、CPIについての次の処理を行う。
・コピーする区間のAVストリーム部分が使用するCPIエントリーを取得する。
・CPIのエントリーポイントのソースパケット番号の値を、コピーするAVストリーム部分の中でのソースパケット番号の値へ変更する。
ステップS204で、SequenceInfoについての次の処理を行う。
・コピーする区間のAVストリーム部分におけるATC-sequenceの開始パケット番号を更新する。
・コピーする区間のAVストリーム部分におけるSTC-sequenceの開始パケット番号を更新する。
・コピーする区間のAVストリーム部分におけるATCシーケンス上にあるSTC-sequenceに対するSTC-idの値が変わらないようにoffset_STC_idを更新する。
ステップS205で、ProgramInfoについての次の処理を行う。コピーする区間のAVストリーム部分におけるprogram-sequenceの開始パケット番号を更新する。
ステップS206で、ClipMarkについての次の処理を行う。コピーする区間のAVストリーム部分が使用するMarkエントリーを取得する。
ステップS207で、ファイル作成についての次の処理を行う。
・コピーする区間のAVストリーム部分をコンバインしてClip AV stream fileにする。
・Clip Information fileを作成する。
図74は、コピー元(出力側の再生装置2)から、コピー先(入力側の記録装置3)へ、PlayListをコピーする場合の、コピー先が行う処理を説明するフローチャートである。
ステップS221で、AVストリームとそれに関係するデータベースをデータ転送してコピーする場合と、AVストリームだけをデータ転送してコピーする場合かを決める。前者の場合は、ステップS222へ進む。後者の場合は、ステップS226へ進む。
ステップS222で、AVストリームファイルの管理の処理を行う。
入力されたAVストリームデータをClip AVストリームファイルとして、STREAMディレクトリへ記録する。
ステップS223で、データベースファイルの管理についての処理を行う。
・入力されたPlayListファイルをPLAYLISTディレクトリへ記録する。
・入力されたClip InformationファイルをCLIPINFディレクトリへ記録する。
ステップS224で、Info.dvrについての処理を行う。
入力されたPlayListファイルをコピー先にあるInfo.dvrのTableOfPlayListに追加する。
ステップS225で、サムネールファイルについての処理を行う。
入力されたサムネールファイルにエントリーされているサムネールデータを、コピー先にあるサムネールファイルへ追加する。
ステップS221で、AVストリームだけをデータ転送してコピーすると判定され、ステップS226へ進む場合、図58に示すReal PlayListの作成を説明するフローチャートによって、コピー先に入力されるトランスポートストリームを記録して、Real PlayListを作成する。
このようなシンタクス、データ構造、規則に基づく事により、記録媒体10に記録されているAVストリームファイルとそのデータベースファイルの内容を適切に管理することができ、もって、ユーザが所望のAVストリームファイルとそのデータベースファイルを別の記録媒体に簡便にコピーできるようにすることができる。
また、記録媒体10に記録されているAVストリームファイルの部分的な再生区間を別の記録媒体にコピーする場合に、当該再生区間の再生に必要なAVストリームファイルを簡便に作成することができ、当該再生区間の再生に必要なデータベースファイルを簡便に作成ことができるので、もって、ユーザが、所望のAVストリームファイルの部分的な再生区間の再生に必要なAVストリームファイルとデータベースファイルを作成することができ、それらファイルを別の記録媒体に簡便にコピーできるようにすることができる。
なお、図71の説明では、コピー先からコピー元へのファイル転送に用いる伝送路が、IEEE1394等のディジタルバスの場合を説明したが、これに限らず、図75に示すように、放送波等の無線波を伝送路としてもよい。また、コピー制御のコマンドは、ファイル転送用の伝送路と同じである必要はない。(図75参照)
また、AVストリームファイルとそのデータベースファイルが別々の記録媒体から、コピー先に転送されてもよい。図76に示すように、AVストリームファイルが記録されているサーバーとデータベースファイルが記録されているサーバーが別々に用意されており、記録装置3からのコピー制御コマンドに対して、AVストリームファイルサーバーとデータベースファイルサーバーから、ファイルが記録装置3へ転送されるようにしても良い。
なお、本実施の形態は、多重化ストリームとしてMPEG2トランスポートストリームを例にして説明しているが、これに限らず、DSSトランスポートストリームやMPEG2プログラムストリームについても適用することが可能である。
上述した一連の処理は、ハードウエアにより実行させることもできるが、ソフトウエアにより実行させることもできる。この場合、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
この記録媒体は、図44に示すように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク51(フロッピディスクを含む)、光ディスク52(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク53(MD(Mini-Disk)を含む)、もしくは半導体メモリ54などよりなるパッケージメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROMやハードディスクなどで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
10 記録媒体, 11 読み出し部, 12 復調部, 13 ECC復号部, 14 ソースデパケッタイザ, 15 デマルチプレクサ, 16 AVデコーダ, 17 制御部, 23 AVエンコーダ, 24 ビデオ解析部, 25 マルチプレクサ, 26 多重化ストリーム解析部, 29 ソースパケッタイザ, 30 ECC符号化部, 31 変調部, 32 書き込み部, 61 再生部, 62 記録部