2012-03-12 35 views
0

M4Aアトムをファイルに挿入する際に問題が発生しています。元のファイルはudta構造を持っていないので、私はガイドとして横たわっていた既存のM4Aファイルを使用して追加しました。M4Aタグの問題

は、ここで私は原子を追加するためにやったことだ:

  1. メモリにUDTA原子を構築
  2. アップデートファイルをコピーアップUDTA原子
  3. のサイズに含まれるようにmoovアトムのサイズ最初のトラップ原子の終わりまで
  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 

ノートのもう一つは、私はタグ付けされたファイルを参照として使用していることですudta-> metaの下にhdlrアトムがありますが、そのタグのコピーを追加しても役に立ちませんでした。 udta原子とmoovのサイズデータを手動で削除すると、ファイルは再び動作します。

私がタグ付けされたファイルを再生しようとすると、私は様々なプログラムでこれらのエラーを取得:私はプログラムの他の99%がMP3の以外のファイルにID3タグを認識したいどのように

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 

ああ、...

答えて

0

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

問題は絶対ファイルオフセットを使用するチャンクのリストである 'stco'アトムのようです。ビンゴ!タグを追加したので、それらのオフセットは現在無効です。より多くのコーディングを行うにはsigh

+0

うん、それは魅力的なように働いた! –