Σάββατο 30 Μαΐου 2015

H ανατομία της ψηφιακής τηλεόρασης. Τι είναι και πώς δημιουργείται το transport stream.

    Ως γενικότερη εικόνα για την κωδικοποίηση ενός συστήματος απαιτούνται κάποιες ροές μεταφοράς, Transport Stream και Program Stream. Κάθε μία βελτιστοποιείται για ένα σύνολο αιτήσεων που θα ζητηθεί από τον δέκτη - αποκωδικοποιητή Integrated Receiver Decoder (IRD). Και οι 2 είναι αναγκαίες όμως για τον κατάλληλο συγχρονισμό ήχου /εικόνας/δεδομένων κατά την αποκωδικοποίηση, καθώς και για την αποφυγή των φαινόμενων της υπερχείλισης (overflow) και έλλειψης δεδομένων (underflow) στο κύκλωμα των data buffers. Οι πληροφορίες κωδικοποιούνται σε σύνταξη χρησιμοποιώντας χρονικές σφραγίδες (time stamps), οι οποίες παρουσιάζουν χρόνους για την κωδικοποίηση και την παρουσίαση των κωδικοποιημένων πληροφοριών (encoder) ήχου/εικόνας, αλλά και του χρόνου παράδοσης της ροής μεταφοράς καθεαυτής.
Η βασική προσέγγιση πολυπλεξίας στοιχειωδών (Elementary Streams) ρευμάτων ήχου και εικόνας και λοιπών πληροφοριών φαίνεται στην εικόνα 1.


Tα δεδομένα ήχου και εικόνας είναι κωδικοποιημένα, όπως περιγράφεται από τον Διεθνή Οργανισμό Τηλεπικοινωνιών ITU-T Rec H.262 | ISO / IEC 13818-2 και κατά ISO / IEC 13818-3. Έπειτα συμπιέζονται, πακετάρονται και παράγουν τα PES (πακέτα). Ως εκ τούτου θα λέγαμε πως κάθε PES πακέτο είναι μια 'ενθυλάκωση' ενός πλαισίου των κωδικοποιημένων δεδομένων. Κάθε πακέτο PES περιέχει μια επικεφαλίδα (packet header) και τα δεδομένα ωφέλιμου φορτίου (payload data). Δεδομένου ότι ο αριθμός των bits για την αναπαράσταση ενός frame διαφέρει στα δεδομένα ήχου και εικόνας, το μέγεθος (σε αριθμό bits) των PES πακέτων ποικίλει επίσης.

Κάθε πακέτο PES έχει την εξής δομή: Η επικεφαλίδα PES ξεκινά με μέγεθος 3 byte έναρξης ως πρόθεμα κωδικού, που είναι πάντα '0x000001' ακολουθούμενο από ένα byte - stream id (παράδειγμα Audio streams (0xC0-0xDF), Video streams (0xE0-0xEF)) το οποίο χρησιμοποιείται για τον προσδιορισμό μίας μοναδικής ροής. Αυτό μαζί με το πρόθεμα κωδικού που αναφέρθηκε πριν (3 bytes), αποτελούν τον κωδικό εκκίνησης (start code - συνολικά 4 bytes). Όπως επίσης αναφέραμε το μήκος ενός πακέτου PES ποικίλει και μπορεί να φτάσει έως 65536 bytes. Τα επόμενα 2 bytes στην επικεφαλίδα αποτελούν την χρονική σφραγίδα (time stamp) και περιέχουν πληροφορίες του χρόνου αναπαραγωγής, ο οποίος υπολογίζεται εφόσον γνωρίζουμε τον αριθμό πλαισίου (frame number).

Mpeg transport stream (MPEG-TS)

Τα πακέτα PES δεν έχουν συγκεκριμένη χωρητικότητα και γι' αυτό θεωρείται δύσκολο να μεταδοθούν σε ένα επιρρεπή από λάθη δίκτυο/κανάλι, όπως ο αέρας. Ως εκ τούτου θα υποστούν ακόμα ένα στρώμα (layer) πακετοποίησης που θα οδηγήσει στη λεγόμενη ροή μεταφοράς TS (transport stream). Αυτές οι ροές μεταφοράς χρησιμοποιούν συγκεκριμένο μέγεθος (μήκος) σε αντίθεση με τα PES, καθώς και αναγνωριστικό (packet identifier) για να αναγνωρίζεται ξεχωριστά κάθε πακέτο μεταφοράς, έτσι όπως αυτά συμφύρουν στην τελική ροή μεταφοράς. Το αναγνωριστικό (packet identifier) είναι απόρροια του συστήματος MPEG που αναγνωρίζει το PES πακέτο είτε ως πληροφορία ήχου, είτε ως πληροφορία εικόνας. Κάθε TS πακέτο είναι 188 bytes, όπου περιλαμβάνει την επικεφαλίδα και το ωφέλιμο φορτίο δεδομένων. Η επικεφαλίδα καλύπτει τα 3 bytes μπορεί όμως να τροποποιηθεί για λόγους απλότητας αν και το συνολικό πλαίσιο (framework) θα παραμένει πάντα το ίδιο.

Πολυπλεξία

Κατά την πολυπλεξία οι ροές (transport streams) που 'γεννιούνται', μεταδίδονται με τέτοιο τρόπο (σωστός καταμερισμός των TS πακέτων), ώστε να αποφευχθούν φαινόμενα υπερχείλισης στα κυκλώματα των data buffers στην πλευρά του αποκωδικοποιητή (αποπολυπλέκτη). Τέτοιου είδους φαινόμενα είναι δυνατόν να δημιουργήσουν θέματα ασυγχρονισμού και παγώματα (skips/freezes) κατά την αναπαραγωγή των ήχων/εικόνων. Ένα προτεινόμενο διάγραμμα ροής κατά την πολυπλεξία των Elementary Streams (H.264 Video & Mpeg4 HE AAC v2 Audio) φαίνεται στην εικόνα 5.

Η βασική λογική βασίζεται στις αμφότερες αλληλουχίες ήχου και εικόνας ώστε να έχουν σταθερά πλαίσια (frame rates). Για το βίντεο, ο αριθμός των καρέ ανά δευτερόλεπτο θα παραμείνει ίδιος σε όλη την ακολουθία βίντεο. Στην ακουστική ακολουθία εφόσον η συχνότητα δειγματοληψίας παραμένει σταθερή και τα δείγματα είναι σταθερά ανά πλαίσιο (1024 stereo), η διάρκεια και αυτής προφανώς θα είναι σταθερή. Όπως είπαμε για την μετάδοση ενός PES πακέτου που σημαίνει ενός πλαισίου (frame) μη συγκεκριμένης χωρητικότητας απαιτείται η διάσπασή του σε n transport streams των 188 bytes (όπου n εξαρτάται από το μέγεθος του PES πακέτου). Ο ακριβής χρόνος παρουσίασης των TS πακέτων (PTAudio/VideoTS) βρίσκεται όπως φαίνεται παρακάτω, λαμβάνοντας υπόψη πως το ΝTSVideo/Audio είναι ο αριθμός των πακέτων TS πακέτων που ορίζουν ένα PES πακέτο ή πλαίσιο (frame).

Ισχύει:

NTSVideo=Video (PES length)/185 (1)

TS(Video duration)=1/FramesPerSecond Video*NTSVideo (2)

PT(Video TS)=PT(Video TS)+TS(Video Duration) (3)

Εξίσου για τον ήχο ισχύει:

NTSAudio=Audio (PES length)/185 (4)

TS (Audio duration)=1/FramesPerSecond Audio*NTSVideo (5)

Εδώ ο δείκτης FPS Audio μας δίνεται από την συχνότητα δειγματοληψίας (sampling frequency)/1024

PT(Audio TS)=PT(Audio TS)+TS(Audio Duration) (6)

Από τις (3) και (6) σχέσεις φαίνεται ότι ο ακριβής χρόνος παρουσίασης ενός transport stream εξαρτάται από τον χρόνο παρουσίασης του προηγούμενο ίδιου τύπου stream, συν το συνολικό χρόνο του transport stream.

Σε μια από τις περιπτώσεις των μπλοκ επεξεργασίας ήχου και εικόνας ο πρώτος έλεγχος που πραγματοποιείται από τον πολυπλέκτη μέσω του αλγορίθμου είναι να διαπιστωθεί αν βρίσκεται στην αρχή ή στην μέση ενός frame (time decision block). Εφόσον είναι ένα νέο πλαίσιο, τότε πραγματοποιούνται οι σχέσεις (2) και (5) για να διαπιστωθεί η διάρκεια του stream. Εφόσον μια ροή TS είναι του τελευταίου πακέτου TS, ένα νέο πακέτο PES αναπαράγεται για να δώσει το νέο πλαίσιο (frame). Πραγματοποιείται επανάληψη του πρώτου ελέγχου έως ότου ολοκληρωθεί ο κύκλος των frames.

Αποπολυπλεξία

Στην είσοδο του αποπολυπλέκτη το TS διασπάται σε δύο ES ξεχωριστά για ήχο /εικόνα τα οποία αποθηκεύονται προσωρινά. Μετά την λήψη του, ελέγχεται από το byte συγχρονισμού (0x47) εάν είναι έγκυρο ή όχι. Εάν δεν είναι έγκυρο απορρίπτεται και προχωράει στο επόμενο πακέτο. Μια έγκυρη επικεφαλίδα περιλαμβάνει αναγνωριστικό πακέτου (PID), τον έλεγχο προσαρμογής σημαίας (AFC), την έναρξη του ωφέλιμου φορτίου (PUS), καθώς και ένα μετρητή των 4 -bit. Με τον έλεγχο διαπιστώνεται αν όλα τα 185 bytes αποτελούν ωφέλιμο φορτίο ή αν πρέπει να υπολογιστεί μια offset τιμή. Το bit έναρξης ελέγχεται για να διαπιστωθεί αν το παρόν TS περιέχει επικεφαλίδα PES. Αν ναι, ελέγχεται η παρουσία του συγχρονισμού ακολουθίας (0x000001). Τελικά σε ένα έγκυρο πακέτο PES μετά την ανάγνωση της επικεφαλίδας διαβάζονται και εξάγονται μαζί οι υπόλοιπες πληροφορίες όπως το stream id, το μήκος του PES πακέτου, καθώς και ο αριθμός των πλαισίων (frames).

Αμέσως μόλις το ωφέλιμο φορτίο γραφτεί στα βίντεο/ήχο buffer, το βίντεο buffer ελέγχεται για πληρότητα. Δεδομένου ότι τα αρχεία βίντεο είναι μεγαλύτερα από εκείνα του ήχου, το βίντεο buffer γεμίζει πρώτα. Εφόσον γεμίσει, αναζητείται το επόμενο IDR πλαίσιο. Μόλις ολοκληρωθεί αυτή διαδικασία υπολογίζεται ο αριθμός των πλαισίων εικόνας και αυτό βοηθάει να υπολογιστεί ο αντίστοιχος αριθμός πλαισίων του ήχου, σημαντική λειτουργία για τον συγχρονισμό των δεδομένων.

Πηγή: Αναδημοσίευση από τη σελίδα digitaltvinfo.gr.