0

M4A アトムをファイルに挿入する際に問題が発生しています。元のファイルは udta 構造を持っていないので、手元にあった既存の M4A ファイルを参考に追加しました。

アトムを追加するために私がしたことは次のとおりです。

  1. メモリ内に udta アトムを構築する
  2. 含めるmoovアトムのサイズをudtaアトムのサイズに更新します
  3. 最初のtrakアトムの終わりまでファイルをコピーします
  4. udta アトムを挿入
  5. 残りはいつものようにコピーします。

元のファイルとタグ付きファイルの唯一の実際の違いは、mdat アトムがタグに対応するために少し下に移動されていることです。これは、他の原子のその位置への何らかの参照があると私に信じさせますが、私はそれを見つけることができませんでした.

AtomicParsley からの出力は次のとおりです。

元のファイル:

Atom ftyp @ 0 of size: 36, ends @ 36
Atom moov @ 36 of size: 30156, ends @ 30192
     Atom mvhd @ 44 of size: 108, ends @ 152
     Atom iods @ 152 of size: 33, ends @ 185
     Atom trak @ 185 of size: 30007, ends @ 30192
         Atom tkhd @ 193 of size: 92, ends @ 285
         Atom mdia @ 285 of size: 29907, ends @ 30192
             Atom mdhd @ 293 of size: 32, ends @ 325
             Atom hdlr @ 325 of size: 37, ends @ 362
             Atom minf @ 362 of size: 29830, ends @ 30192
                 Atom smhd @ 370 of size: 16, ends @ 386
                 Atom dinf @ 386 of size: 36, ends @ 422
                     Atom dref @ 394 of size: 28, ends @ 422
                 Atom stbl @ 422 of size: 29770, ends @ 30192
                     Atom stts @ 430 of size: 24, ends @ 454
                     Atom stsd @ 454 of size: 106, ends @ 560
                         Atom mp4a @ 470 of size: 90, ends @ 560
                             Atom esds @ 506 of size: 54, ends @ 560
                     Atom stsz @ 560 of size: 26888, ends @ 27448
                     Atom stsc @ 27448 of size: 40, ends @ 27488
                     Atom stco @ 27488 of size: 2704, ends @ 30192
Atom mdat @ 30192 of size: 2495503, ends @ 2525695

変更されたファイル:

Atom ftyp @ 0 of size: 36, ends @ 36
Atom moov @ 36 of size: 30323, ends @ 30359
     Atom mvhd @ 44 of size: 108, ends @ 152
     Atom iods @ 152 of size: 33, ends @ 185
     Atom trak @ 185 of size: 30007, ends @ 30192
         Atom tkhd @ 193 of size: 92, ends @ 285
         Atom mdia @ 285 of size: 29907, ends @ 30192
             Atom mdhd @ 293 of size: 32, ends @ 325
             Atom hdlr @ 325 of size: 37, ends @ 362
             Atom minf @ 362 of size: 29830, ends @ 30192
                 Atom smhd @ 370 of size: 16, ends @ 386
                 Atom dinf @ 386 of size: 36, ends @ 422
                     Atom dref @ 394 of size: 28, ends @ 422
                 Atom stbl @ 422 of size: 29770, ends @ 30192
                     Atom stts @ 430 of size: 24, ends @ 454
                     Atom stsd @ 454 of size: 106, ends @ 560
                         Atom mp4a @ 470 of size: 90, ends @ 560
                             Atom esds @ 506 of size: 54, ends @ 560
                     Atom stsz @ 560 of size: 26888, ends @ 27448
                     Atom stsc @ 27448 of size: 40, ends @ 27488
                     Atom stco @ 27488 of size: 2704, ends @ 30192
     Atom udta @ 30192 of size: 167, ends @ 30359
         Atom meta @ 30200 of size: 159, ends @ 30359
             Atom ilst @ 30212 of size: 147, ends @ 30359
                 Atom ©ART @ 30220 of size: 35, ends @ 30255
                     Atom data @ 30228 of size: 27, ends @ 30255
                 Atom ©nam @ 30255 of size: 63, ends @ 30318
                     Atom data @ 30263 of size: 55, ends @ 30318
                 Atom ©alb @ 30318 of size: 41, ends @ 30359
                     Atom data @ 30326 of size: 33, ends @ 30359
Atom mdat @ 30359 of size: 2495503, ends @ 2525862

もう 1 つの注意点は、参照として使用しているタグ付きファイルの udta->meta の下に hdlr アトムがあることですが、そのタグのコピーを追加しても役に立ちませんでした。udta アトムと moov のサイズ データを手動で削除すると、ファイルは再び機能します。

タグ付けされたファイルを再生しようとすると、さまざまなプログラムで次のエラーが発生します。

mplayer:
    [aac @ 0x204d720] channel element 0.0 is not allocated
    [aac @ 0x204d720] channel element 0.0 is not allocated
    [aac @ 0x204d720] channel element 3.13 is not allocated
    [aac @ 0x204d720] channel element 2.14 is not allocated
    [aac @ 0x204d720] channel element 2.9 is not allocated
    [aac @ 0x204d720] Prediction is not allowed in AAC-LC.
    [aac @ 0x204d720] channel element 3.1 is not allocated
    [aac @ 0x204d720] channel element 0.3 is not allocated
    ....
totem:
    ** Message: Error: Could not decode stream.
    gstfaad.c(1319): gst_faad_chain (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstFaad:faad0:
    decoding error: Bitstream value not allowed by specification
banshee:
    [Error 08:26:27.610] GStreamer stream error: Decode
    [Error 08:26:27.960] GStreamer stream error: Decode
    [Error 08:26:28.252] GStreamer resource error: NotFound

ああ、残りの 99% のプログラムが MP3 以外のファイルの ID3 タグを認識してくれるといいのですが....

4

1 に答える 1

0

xdelta3 のおかげで、タグ付けソフトウェアでタグ付けされ、手動で削除されたファイルと元のファイルの違いを見つけることができました。

この問題は、絶対ファイル オフセットを使用したチャンクのリストである「stco」アトムにあるようです。ビンゴ!タグを追加したので、これらのオフセットは無効になりました。ため息をつくためのより多くのコーディング

于 2012-03-12T14:35:24.643 に答える