AAC ADTS päise teave kirjeldab

Aac Adts Header Information Describes



ADTS on Audio Data Transport Streami lühend.


AAC-helifailid on levinud edastusvorming. Mõnikord, kui paljastate AAC-kodeeritud voogude, ei saa kirjalikke AAC-faile arvutil ja mobiiltelefonidel esitada, on palju tõenäolisem, et iga AAC-kaadri kaader on pakendi ühendamise ADTS-päisefaili puudumisel. Peab lisama ainult päisefaile.AAC-i puhul on algse andmeploki pikkus muutuv, moodustatakse originaalse kaadri päis ADTS koos paketi ADTS, ADTS-i kaadriga.
Järgmine ADTS-päise teabe ja failistruktuuri analüüs: iga AAC-helifaili kaader ADTS-i päise AAC-heliandmete ja koostise järgi.


AAC ADTS päise kuvamiseks võite kasutada utiliiti AAC Audio ES Viewer.

Helifaili iga kaadri ADTS päis sisaldab näidissagedust, kanalit, kaadri pikkuse teavet, nii et dekooder loeb parsimiseks.

ADTS-päise teave on tavaolukorras 7 baiti, jagatud kaheks osaks:

adts_fixed_header ()



adts_variable_header ()



Esimene pilk:adts_fixed_header ()

  • sünkroniseeriminealati0xFFF, Esitab ADTS-i kaadri käivitamist sünkroonimiseks.
    Dekooder poolt0xFFFMäärab iga ADTSi algpositsiooni.
    Selle olemasolu tõttu võib dekodeerimine alata voo ükskõik kus, stIga kaadrit saab dekodeerida
  • IDMPEG-versioon: 0 MPEG-4,1 jaoks MPEG-2 jaoks
  • Kihtalati: '00'
  • kaitse_teemaline :Hoiatus. Valige 1, kui CRC-d pole, ja 0, kui CRC-d on
  • profiil :Näitab, milline AAC tase, näiteks 01 madala keerukusega (LC) - AAC LC
    Väärtus, mis võrdub profiili väärtusega, millest lahutatakse 1 heliobjekti tüüp.
    profiil = MPEG-4 audioobjekti tüüp - 1
  • valimi_sageduse_indeks exAlamindeksi valimi määr
  • kanal_konfiguratsioon :Kanalite arv, näitekskaksSee tähistab kahekanalilist stereot
Siis vaataadts_variable_header ()
  • aac_frame_length :ADTS-raam sisaldab algse voo pikkust ja AAC ADTS-päist. kaadri pikkus peab see väärtus sisaldama 7 või 9 baiti päise pikkust:
    aac_frame_length = (kaitse_absent == 1? 7: 9) + suurus (AACFrame)

    Kui protection_absent = 0, on päise pikkus = 9baiti
    protection_absent = 1 millal, päise pikkus = 7baiti
  • adts_buffer_fullness :0x7FF kirjeldas muutuva kiirusega koodivoogu.
  • raami_andmete_blokid_raami_arv :See tähistab seal ADTS-i kaadrit, AAC_raamistiku_andmete_blokid_raamis_raami + algset kaadrit.
    Nii et see arv_raw_data_blocks_in_frame == 0 tähistab andmeplokis AAC ADTS-i kaadreid.
    (Toores AAC-raamistik sisaldab 1024 proovi ja ajavahemiku andmeid)

Siin peatuvad kaks päist.
JAVA ja Android esitasid siin ATE ADTS-i päisefailide lisamise meetodi osas ByteBufferi jaoks.
[java] vaade tavaline koopia
  1. / **
  2. * Lisage ADTS-päis
  3. *
  4. * @param pakett
  5. * @param packetLen
  6. * /
  7. privaatne tühineaddADTStoPacket (bait[] pakett,intpacketLen) {
  8. intprofiil =kaks // AAC LC
  9. intfreqIdx =4 // 44,1KHz
  10. intchanCfg =kaks // CPE
  11. // täitke ADTS-i andmed
  12. pakett [0] = (bait)0xFF
  13. pakett [1] = (bait)0xF9
  14. pakett [kaks] = (bait) (((profiil -1)<< 6) + (sagedusIdx<< kaks) + (chanCfg >>kaks))
  15. pakett [3] = (bait) (((chanCfg &3)<< 6) + (packetLen >>üksteist))
  16. pakett [4] = (bait) ((packetLen ja0x7FF) >>3)
  17. pakett [5] = (bait) ((((packetLen ja7)<< 5) +0x1F)
  18. pakett [6] = (bait)0xFC
  19. }

Siin on kõne :( vastavalt nende vajadustele on siin AudioBufFrame meie enda projekt klassis, tegelikult on see pakett ByteBuffer klass) [java] vaade tavaline koopia
  1. AudioBufFrame audioBufFrame = (AudioBufFrame) o
  2. intoutBufferSize = audioBufFrame.buf.limit () +7
  3. bait[] aacBytes =uus bait[outBufferSize]
  4. proovige{
  5. kui(! kirjuta) {
  6. viga =uusFileOutputStream (Minu seadistused.VIDEO_PATH +'/audio.aac')
  7. kirjuta =tõsi
  8. }
  9. addADTStoPacket (aacBytes, outBufferSize)
  10. audioBufFrame.buf.get (aacBytes,7, audioBufFrame.buf.limit ())
  11. fout.write (aacBytes)
  12. }saak(IOException e) {
  13. e.printStackTrace ()
  14. }

Järgnevalt on lisatud viide FFMPEG C ADTS päise kood. [java] vaade tavaline koopia
  1. intff_adts_write_frame_header (ADTSContext * ctx,
  2. uint8_t * buf,intsuurus,intpce_size)
  3. {
  4. PutBitContext lk
  5. init_put_bits (& pb, buf, ADTS_HEADER_SIZE)
  6. / * adts_fixed_header * /
  7. put_bits (& pb,12,0xfff)/ * sünkroniseerimine * /
  8. put_bits (& pb,1,0)/ * ID * /
  9. put_bits (& pb,kaks,0)/ * kiht * /
  10. put_bits (& pb,1,1)/ * kaitse_teemaline * /
  11. put_bits (& pb,kaks, ctx-> objekti tüüp)/ * profile_objecttype * /
  12. put_bits (& pb,4, ctx-> proovi_hinde_indeks)
  13. put_bits (& pb,1,0)/ * private_bit * /
  14. put_bits (& pb,3, ctx-> channel_conf)/ * kanali_konfiguratsioon * /
  15. put_bits (& pb,1,0)/* originaal */
  16. put_bits (& pb,1,0)/* Kodu */
  17. / * adts_variable_header * /
  18. put_bits (& pb,1,0)/ * copyright_identification_bit * /
  19. put_bits (& pb,1,0)/ * copyright_identification_start * /
  20. put_bits (& pb,13, ADTS_HEADER_SIZE + suurus + pce_size)/ * aac_frame_length * /
  21. put_bits (& pb,üksteist,0x7jj)/ * adts_buffer_fullness * /
  22. put_bits (& pb,kaks,0)/ * raami_andmete_blokkide_raami_arv * /
  23. flush_put_bits (& pb)
  24. tagasi 0
  25. }