Проблемы с маркировкой M4A - PullRequest
0 голосов
/ 12 марта 2012

У меня проблема с вставкой атомов 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

Еще одно замечание заключается в том, чтофайл тега, который я использую в качестве ссылки, имеет атом hdlr в разделе udta-> meta, но добавление копии этого тега также не помогло.Если я вручную удаляю атом 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% программ распознавали теги ID3 на файлах, отличных от MP3 ....

1 Ответ

0 голосов
/ 12 марта 2012

Благодаря xdelta3 мне удалось обнаружить разницу между файлом, помеченным с помощью программного обеспечения для тегов, а затем удаленным вручную, и исходным файлом.

Похоже, что проблема связана с атомом 'stco', представляющим собой список фрагментов с использованием абсолютных смещений файлов. Бинго! Поскольку я добавил теги, эти смещения теперь недействительны. Больше кодирования, чтобы сделать вздох

...