Τι είναι ένα αρχείο QT;
Ένα αρχείο με επέκταση .qt είναι ένα αρχείο κοντέινερ πολυμέσων που χρησιμοποιείται από το πλαίσιο QuickTime για την αποθήκευση περιεχομένων αρχείων πολυμέσων. Αναπτύχθηκε από την Apple Inc. το QuickTime File Format (QTFF) είναι ένα αρχείο κοντέινερ πολυμέσων που περιέχει ήχο, βίντεο ή κείμενο για αναπαραγωγή αργότερα. Είναι η μορφή της επιλογής για την ανταλλαγή ψηφιακών μέσων μεταξύ συσκευών, εφαρμογών και λειτουργικών συστημάτων. Τα αρχεία QT αποθηκεύονται επίσης σε μορφή MOV που αναπτύχθηκε επίσης από την Apple Inc. Ορισμένες από τις εφαρμογές που μπορούν να ανοίξουν αρχεία QT περιλαμβάνουν το Apple QuickTime player, το πρόγραμμα αναπαραγωγής πολυμέσων VLC και το Media Player Classic με K- Lite Codec Pack.
Μορφή αρχείου QT
Το QTFF είναι αντικειμενοστρεφές που εκθέτει μια ευέλικτη συλλογή αντικειμένων για ευκολία ανάλυσης και επέκτασης. Κάθε κομμάτι σε ένα αρχείο QT περιέχει μια ψηφιακά κωδικοποιημένη ροή πολυμέσων ή μια αναφορά δεδομένων στη ροή πολυμέσων που βρίσκεται σε άλλο αρχείο. Η ιεραρχική δομή δεδομένων που αποτελείται από αντικείμενα που ονομάζονται άτομα δρα ως δοχεία τροχιών. Οι προδιαγραφές μορφής αρχείου για μορφή αρχείου QT είναι επίσημα διαθέσιμες από την Apple Inc για αναφορά του προγραμματιστή.
Περιγραφή πολυμέσων
Η περιγραφή πολυμέσων ενός αρχείου QuickTime αποθηκεύεται χωριστά από τα δεδομένα πολυμέσων. Πληροφορίες όπως ο αριθμός των κομματιών, η μορφή συμπίεσης βίντεο και οι πληροφορίες χρονισμού αποθηκεύονται στην περιγραφή του μέσου (γνωστή και ως πηγή ταινίας, άτομο ταινίας ή απλώς ταινία). Τα δεδομένα πολυμέσων αναφέρονται από ένα ευρετήριο σε αυτήν τη δομή μέσων. Τα δεδομένα πολυμέσων είναι τα πραγματικά δείγματα δεδομένων, όπως καρέ βίντεο και δείγματα ήχου, που χρησιμοποιούνται στην ταινία.
Άτομα
Το Atom είναι η βασική μονάδα του αρχείου QuickTime. Υπάρχουν δύο κύρια πεδία σε οποιοδήποτε άτομο πριν από οποιοδήποτε άλλο πεδίο: πεδία Μέγεθος και Τύπος. Το πεδίο μεγέθους δείχνει το μέγεθος του ατόμου ενώ το πεδίο τύπου υποδεικνύει τον τύπο των δεδομένων που είναι αποθηκευμένα στο άτομο. Από τη φύση τους, τα άτομα είναι ιεραρχικά, πράγμα που σημαίνει ότι ένα άτομο μπορεί να περιέχει άλλα άτομα τα οποία μπορούν ακόμα να περιέχουν άλλα. Η διάταξη ενός ατόμου δείγματος φαίνεται στην παρακάτω εικόνα.
Κάθε άτομο έχει δύο μέρη, κεφαλίδα και δεδομένα. Η κεφαλίδα περιέχει τα πεδία μεγέθους και τύπου και το τμήμα δεδομένων περιέχει τα πραγματικά δεδομένα. Επιπλέον, κάθε πεδίο επεξηγείται παρακάτω:
Μέγεθος ατόμου
Η κεφαλίδα και τα περιεχόμενα του ατόμου υποδεικνύονται από έναν ακέραιο 32-bit γνωστό ως το μέγεθος του ατόμου. Το πεδίο μεγέθους περιέχει το μέγεθος του ατόμου σε byte, εκφρασμένο σε έναν ακέραιο 32-bit χωρίς πρόσημο.
Τύπος ατόμου
Ο τύπος του ατόμου εμφανίζεται επίσης από έναν ακέραιο 32-bit, ο οποίος αντιμετωπίζεται ως επί το πλείστον ως πεδίο τεσσάρων χαρακτήρων με knemonic τιμή, όπως “moov” (0x6D6F6F76) για ένα άτομο ταινίας ή “trak” (0x7472616B) για ένα άτομο τροχιάς. Μόλις γίνει γνωστός ο τύπος του ατόμου, επιτρέπει την ερμηνεία των δεδομένων του.
Δομή αρχείου
Τα αρχεία QT/MOV αποτελούνται από διαδοχικά κομμάτια. Κάθε κομμάτι έχει μια κεφαλίδα 8 byte: μέγεθος τεμαχίου 4 byte (big-endian, high byte πρώτα) και τύπο τεμαχίου 4 byte - μία από τις προκαθορισμένες υπογραφές: “ftyp”, “mdat”, “moov”, “pnot “, “udta”, “uuid”, “moof”, “free”, “skip”, “jP2 “, “wide”, “load”, “ctab”, “imap”, “matt”, “kmat”, “clip”, “crgn”, “sync”, “chap”, “tmcd”, “scpt”, “ssrc”, “PICT”. Το πρώτο κομμάτι είναι τύπου “ftype” και έχει έναν δευτερεύοντα τύπο σε μετατόπιση 8. Το MOV ορίζεται από τον δευτερεύοντα τύπο που πρέπει να είναι “qt”. Για τη σύνθεση του αρχείου MOV, απαιτούνται επαναλαμβανόμενα κομμάτια μέχρι να εντοπιστεί άγνωστος τύπος.
Ακολουθεί ένα δείγμα παράδειγμα: Επιθεωρώντας τα δυαδικά δεδομένα ενός δείγματος αρχείου MOV, είναι προφανές ότι ξεκινά με μια υπογραφή ftyp (δεκαεξαδικό: 66 74 79 70) στη μετατόπιση 4, η οποία ορίζει τον τύπο αρχείου κοντέινερ QuickTime. Ο δευτερεύων τύπος αρχείου είναι qt~~ (hex: 71 74 20 20) που δείχνει τον τύπο αρχείου MOV. Το πρώτο μέγεθος μπλοκ είναι 32 (δεκαεξαδικό: 00 00 00 20, big-endian, υψηλό byte πρώτα), το μέγεθος βρίσκεται σε μετατόπιση 0. Στη μετατόπιση 32 (hex: 20) βρίσκεται το δεύτερο κομμάτι, το οποίο έχει μέγεθος 8 και τύπου mdat (hex: 6D 64 61 74).
Το επόμενο κομμάτι βρίσκεται στο offset 32+8#40 (hex: 28) και έχει μέγεθος 3.263.028 (hex: 00 31 CA 34) και τύπο mdat (hex: 6D 64 61 74) σε offset 44 (hex : 2C). Το επόμενο κομμάτι βρίσκεται στο offset 40 + 3.263.028#3.263.068 (hex: 00 31 CA 5C) και έχει μέγεθος 21.189 (hex: 00 00 52 C5) και τύπο moov (hex: 6D 76F) at 6F 1.836.019.574 (hex: 00 31 CA 60). Αυτό είναι το τελευταίο κομμάτι, επομένως το συνολικό μέγεθος αρχείου είναι 3.263.068+21.189#3.284.257 byte.