Pertanyaan Adakah yang akrab dengan struktur data mp4?


Di mana di struktur file mp4 berapa lama?


32


asal


Jawaban:


Ini mungkin bukan jawaban atas masalah Anda, tetapi itu adalah masalah saya: http://mediainfo.sourceforge.net/

(Ini memiliki perpustakaan dan itu open source sehingga Anda dapat memeriksa bagian yang Anda butuhkan)


13



Lihat https://github.com/sannies/mp4parser proyek. Ini adalah pustaka Java yang menunjukkan struktur file mp4.


7



Sejauh yang saya tahu - "mp4" container berasal dari struktur atom QuickTime. Anda dapat membaca deskripsi QuickTime File Format.

Parsing atom waktu cepat bukan masalah besar (lihat proyek atomicParsley). Saya tidak yakin untuk MP4, tetapi untuk file MOV - ada kolom "durasi" di "mvhd" (header film) dan juga di "tkhd" (header track) atom. Durasi ini biasanya sejumlah frame dikalikan dengan atribut "skala waktu". Skala waktu dapat ditemukan dalam atom yang sama.


6



Untuk pembaca Red5 MP4, saya menggunakan atom "mvhd", karena berisi skala waktu dan durasi. Mendapatkan durasi dari atom akan berbeda berdasarkan versi yang digunakan, di bawah ini Anda dapat melihat contoh:

panjang buat_full_atom publik (MP4DataStream bitstream) melempar IOException {
    nilai panjang = bitstream.readBytes (4);
    nilai version = (int) >> 24;
    bendera = (int) nilai & 0xffffff;
    sudah dibaca + = 4;
    kembali dibaca;
}

panjang buat_movie_header_atom publik (MP4DataStream bitstream) melempar IOException {     create_full_atom (bitstream);     if (version == 1) {         creationTime = createDate (bitstream.readBytes (8));     modificationTime = createDate (bitstream.readBytes (8));     timeScale = (int) bitstream.readBytes (4);     duration = bitstream.readBytes (8);     sudah dibaca + = 28;     } lain {         creationTime = createDate (bitstream.readBytes (4));     modificationTime = createDate (bitstream.readBytes (4));     timeScale = (int) bitstream.readBytes (4);     duration = bitstream.readBytes (4);     sudah dibaca + = 16;     }     int qt_preferredRate = (int) bitstream.readBytes (4);     int qt_preferredVolume = (int) bitstream.readBytes (2);     bitstream.skipBytes (10);     long qt_matrixA = bitstream.readBytes (4);     long qt_matrixB = bitstream.readBytes (4);     long qt_matrixU = bitstream.readBytes (4);     long qt_matrixC = bitstream.readBytes (4);     long qt_matrixD = bitstream.readBytes (4);     long qt_matrixV = bitstream.readBytes (4);     long qt_matrixX = bitstream.readBytes (4);     long qt_matrixY = bitstream.readBytes (4);     long qt_matrixW = bitstream.readBytes (4);     long qt_previewTime = bitstream.readBytes (4);     long qt_previewDuration = bitstream.readBytes (4);     long qt_posterTime = bitstream.readBytes (4);     long qt_selectionTime = bitstream.readBytes (4);     long qt_selectionDuration = bitstream.readBytes (4);     long qt_currentTime = bitstream.readBytes (4);     longTrackID = bitstream.readBytes (4);     sudah dibaca + = 80;
    kembali dibaca;
}


6



MP4 adalah format "penampung", yang pada dasarnya berarti dapat berisi sejumlah aliran audio atau video yang berbeda. Dan setiap aliran bisa memiliki nilai durasi sendiri ...

Untuk menggali apa yang Anda butuhkan, Anda akan menginginkan lebih banyak file referensi. Saya mungkin menyarankan mencari sini dan sini... tetapi Anda mungkin harus mencari di luar itu untuk berbagai jenis aliran A / V yang ingin Anda dukung.


4



Menggunakan MP4Parser http://code.google.com/p/mp4parser/ seperti poster sebelumnya yang disebutkan - mereka bahkan memiliki sampel yang memberikan durasi:

https://mp4parser.googlecode.com/svn/trunk/examples/src/main/java/com/googlecode/mp4parser/GetDuration.java


1



Pada dasarnya struktur MP4 adalah sebuah pohon. Area makro adalah:

  • ftyp - jenis file
  • moov - berisi data meta (judul lagu, autors, url, dan info lainnya)
  • gratis - area kosong untuk memisahkan header dan data
  • mdat - berisi frame audio

Anda dapat mencoba alat Analyzer MP4 gratis ini

http://www.thinmultimedia.co.kr/products/MP4Reader_download.html


1