「高速ダビング」の処理速度を考えると、DVD-RAMのデータと同様な形式でHDDに記録されているのでは?
という予測を立ててみた。
この予測通りなら、packデータの連続性を補完することが出来れば、最低限ではあるものの、「見られるデータ」が取得できることになる。

そこで、HDDの中身を見る前に、RD-X4で記録したDVD-RAMのデータを見ると、
  • 2048バイトごとに、pack_headerが現れる = packは2048バイト固定
  • MPEG_program_end_codeは存在しない
  • タイトルのsystem_clock_referenceは常に0から始まる
  • ただし、タイトルではなくチャプタを高速ダビングしたときのsystem_clock_referenceは0から始まらない → オリジナルのsystem_clock_referenceが引き継がれている
  • system_headerは、45045/90000秒ごとに現れる
  • 同一タイトルと思われる範囲のデータで、system_headerを含むpackからある程度の長さのデータを抜き出して、拡張子mpgのファイル化して再生を試みると再生できる
となっていた。

つまり、この予測を確認するためには
  • 2048バイトごとに、「00 00 01 BA」のバイト列が出現する
という事が確認できれば良いということになる。
ということで、「00 00 01 BA」のバイト列を探すプログラムを作成し、実行してみたが、無かった。

暗号化でもしているのかと思い、100GB目くらいの辺りのデータを見ると、
00 00 BA 01 ....
というデータが2048バイトごとに現れている。
要するに、2バイト単位でバイトスワップしているということらしい。
まぁ、CPUと、IDEコントローラの間のバイトオーダが異なっている事から、PCで見たときにスワップして見えるとかなのでしょう。

ということで、バイトスワップを考慮してHDDを再度チェックすると、先頭から0x000FA110 * 0x800バイト目から始まっていることがわかった。

また、たいていのファイルシステムは、複数のセクタを一まとめにしたクラスタという単位でファイルアクセスをするので、RD-X4でも、同じようにクラスタ的な概念があるか検証してみる。
これには、system_clock_referenceが0のpackの位置をチェックしていけばよい。
そこでチェックしたところ、16 * 2048バイト単位であるらしいことがわかった。


ここまでわかったことを実証するために、DVD-RAMで行った、「同一タイトルと思われる範囲のデータで、system_headerを含むpackからある程度の長さのデータを抜き出して、拡張子mpgのファイル化して再生を試みる」を実施したところ、無事再生に成功。

一番最低のレベルではあるものの、データの抜き出しに一応成功。


まとめ

  • HDDのデータは奇数バイトと偶数バイトが逆になっている
  • MPEG-2 Program Streamのデータは、HDDの先頭から0x000FA110 * 0x800バイト目の位置以降に記録されている
  • MPEG-2 Program Streamのデータは、32KB(16*2048バイト)単位で記録されている
最終更新:2007年03月04日 14:22