FMUSER Wirless Μετάδοση βίντεο και ήχου πιο εύκολα!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Αφρικανικά
sq.fmuser.org -> Αλβανικά
ar.fmuser.org -> Αραβικά
hy.fmuser.org -> Αρμενίων
az.fmuser.org -> Αζερμπαϊτζάν
eu.fmuser.org -> Βάσκων
be.fmuser.org -> Λευκορωσικά
bg.fmuser.org -> Βουλγαρικά
ca.fmuser.org -> Καταλανικά
zh-CN.fmuser.org -> Κινέζικα (απλοποιημένα)
zh-TW.fmuser.org -> Κινέζικα (Παραδοσιακά)
hr.fmuser.org -> Κροατικά
cs.fmuser.org -> Τσέχικα
da.fmuser.org -> Δανικά
nl.fmuser.org -> Ολλανδικά
et.fmuser.org -> Εσθονικά
tl.fmuser.org -> Φιλιππινέζικα
fi.fmuser.org -> Φινλανδικά
fr.fmuser.org -> Γαλλικά
gl.fmuser.org -> Γαλικιανά
ka.fmuser.org -> Γεωργιανά
de.fmuser.org -> Γερμανικά
el.fmuser.org -> Ελληνική
ht.fmuser.org -> Κρεόλ της Αϊτής
iw.fmuser.org -> Εβραϊκά
hi.fmuser.org -> Χίντι
hu.fmuser.org -> Ουγγρική
is.fmuser.org -> Ισλανδικά
id.fmuser.org -> Ινδονησιακά
ga.fmuser.org -> Ιρλανδικά
it.fmuser.org -> Ιταλικά
ja.fmuser.org -> Ιαπωνικά
ko.fmuser.org -> Κορεάτικα
lv.fmuser.org -> Λετονικά
lt.fmuser.org -> Λιθουανικά
mk.fmuser.org -> Μακεδόνας
ms.fmuser.org -> Μαλαισιανά
mt.fmuser.org -> Μαλτέζικα
no.fmuser.org -> Νορβηγική
fa.fmuser.org -> Περσικά
pl.fmuser.org -> Πολωνικά
pt.fmuser.org -> Πορτογαλικά
ro.fmuser.org -> Ρουμανικά
ru.fmuser.org -> Ρωσικά
sr.fmuser.org -> Σέρβικα
sk.fmuser.org -> Σλοβακικά
sl.fmuser.org -> Σλοβένικα
es.fmuser.org -> Ισπανικά
sw.fmuser.org -> Σουαχίλι
sv.fmuser.org -> Σουηδικά
th.fmuser.org -> Ταϊλάνδης
tr.fmuser.org -> Τουρκικά
uk.fmuser.org -> Ουκρανικά
ur.fmuser.org -> Ουρντού
vi.fmuser.org -> Βιετνάμ
cy.fmuser.org -> Ουαλικά
yi.fmuser.org -> Γίντις
HLS και Http Live Streaming είναι πρωτόκολλα για streaming σε πραγματικό χρόνο που ορίζονται από την Apple. Το HLS υλοποιείται με βάση το πρωτόκολλο HTTP. Το περιεχόμενο μετάδοσης περιλαμβάνει δύο μέρη, το ένα είναι το αρχείο περιγραφής M3U8 και το άλλο είναι το αρχείο μέσων TS.
1. Αρχείο M3U8
Το αρχείο πολυμέσων περιγράφεται σε κείμενο, το οποίο αποτελείται από μια σειρά ετικετών.
#EXTM3U
# EXT-X-ΣΤΟΧΟΣ: 5
# ΕΞΤΙΝΕ: 5,
./0.ts
# ΕΞΤΙΝΕ: 5,
./1.ts
# EXTM3U: Η πρώτη γραμμή κάθε αρχείου M3U8 πρέπει να είναι αυτή η ετικέτα.
# EXT-X-TARGETDURATION: Καθορίστε τη μέγιστη διάρκεια του τμήματος μέσων (δευτερόλεπτα). Η χρονική διάρκεια που καθορίζεται στο #EXTINF πρέπει να είναι μικρότερη ή ίση με αυτήν τη μέγιστη τιμή. Αυτή η τιμή μπορεί να εμφανιστεί μόνο μία φορά.
#EXTINF: Περιγράψτε το μήκος ενός μεμονωμένου αρχείου πολυμέσων. Ακολουθούν τα αρχεία πολυμέσων, όπως ./0.ts
2. αρχείο ts
Το αρχείο ts είναι ένα αρχείο ροής μεταφοράς, η κύρια μορφή κωδικοποίησης βίντεο είναι h264 / mpeg4 και ο ήχος είναι acc / MP3.
Το αρχείο ts χωρίζεται σε τρία επίπεδα: ts layer Transport Stream, pes layer Packet Elemental Stream, es layer Elementary Stream. Το στρώμα es είναι τα δεδομένα ήχου και βίντεο και το στρώμα pes είναι οι πληροφορίες περιγραφής του πλαισίου δεδομένων, όπως μια χρονική σήμανση που προστίθεται στα δεδομένα ήχου και βίντεο. Το επίπεδο ts είναι να προσθέσετε τις απαραίτητες πληροφορίες για την ταυτοποίηση και τη μετάδοση της ροής δεδομένων στο στρώμα pes
Σημείωση: Οι λεπτομέρειες έχουν ως εξής
(1) στρώση ts Το μέγεθος πακέτου ts καθορίζεται στα 188 bytes και το επίπεδο ts χωρίζεται σε τρία μέρη: κεφαλίδα ts, πεδίο προσαρμογής και ωφέλιμο φορτίο. Η κεφαλίδα ts είναι σταθερή στα 4 byte. Το πεδίο προσαρμογής μπορεί να υπάρχει ή να μην υπάρχει και η κύρια λειτουργία του είναι να συμπληρώνει δεδομένα λιγότερα από 188 bytes. το ωφέλιμο φορτίο είναι δεδομένα pes.
επικεφαλίδα
sync_byte 8b byte συγχρονισμού, σταθερό σε 0x47
transport_error_indicator 1b Ένδειξη σφάλματος μεταφοράς, που δείχνει ότι υπάρχει ένα άχρηστο byte μετά το πεδίο προσαρμογής της κεφαλίδας ts, συνήθως 0, αυτό το byte μετράται στο μήκος του πεδίου προσαρμογής
payload_unit_start_indicator 1b Ένδειξη έναρξης μονάδας φόρτωσης, η οποία επισημαίνεται ως 1 στην αρχή ενός πλήρους πακέτου δεδομένων
transport_priority 1b Προτεραιότητα μεταφοράς, 0 είναι χαμηλή προτεραιότητα, 1 είναι υψηλή προτεραιότητα, συνήθως 0
pid 13b τιμή pid
transport_scrambling_control 2b Έλεγχος αναμετάδοσης μεταφοράς, 00 σημαίνει μη κρυπτογραφημένος
adaptation_field_control 2b Εάν θα συμπεριληφθεί το πεδίο προσαρμογής, το '00' είναι δεσμευμένο. «01» δεν σημαίνει πεδίο προσαρμογής, μόνο το ωφέλιμο φορτίο. «10» σημαίνει μόνο το πεδίο προσαρμογής, χωρίς ωφέλιμο φορτίο. «11» σημαίνει ότι η προσαρμογή περιλαμβάνεται επίσης Domain και payload.
Continity_counter 4b Αύξηση μετρητή, από 0-f, η αρχική τιμή δεν παίρνει απαραίτητα 0, αλλά πρέπει να είναι συνεχής
Το περιεχόμενο του επιπέδου ts αναγνωρίζεται από την τιμή PID και το κύριο περιεχόμενο περιλαμβάνει: πίνακα PAT, πίνακας PMT, ροή ήχου και ροή βίντεο. Για να αναλύσετε τη ροή ts, πρέπει πρώτα να βρείτε τον πίνακα PAT, αρκεί να βρείτε το PAT, μπορείτε να βρείτε το PMT και, στη συνέχεια, μπορείτε να βρείτε τις ροές ήχου και βίντεο. Η τιμή PID του πίνακα PAT είναι σταθερή στο 0. Ο πίνακας PAT και ο πίνακας PMT πρέπει να εισάγονται τακτικά στη ροή ts, επειδή ο χρήστης μπορεί να συμμετάσχει στη ροή ts ανά πάσα στιγμή, αυτό το διάστημα είναι σχετικά μικρό, συνήθως κάθε λίγα καρέ βίντεο για προσθήκη PAT και PMT. Οι πίνακες PAT και PMT είναι απαραίτητοι και άλλοι πίνακες όπως το SDT (πίνακας περιγραφής υπηρεσίας) μπορούν επίσης να προστεθούν, αλλά η ροή hls μπορεί να αναπαραχθεί αρκεί να υπάρχουν PAT και PMT.
Πίνακας PAT: Η κύρια λειτουργία του είναι να υποδείξει την τιμή PID του πίνακα PMT.
Πίνακας PMT: Η κύρια λειτουργία του είναι να καθορίσει την τιμή PID της ροής ήχου και βίντεο.
Ροή ήχου / ροή βίντεο: Μεταφέρετε περιεχόμενο ήχου και βίντεο.
προσαρμογή
adaptation_field_length 1B μήκος πεδίου προσαρμογής, ο αριθμός των byte πίσω
Η σημαία 1B παίρνει 0x50 για να υποδείξει PCR ή 0x40 για να μην συμπεριλάβει PCR
Αναφορά ρολογιού προγράμματος PCR 5B, αναφορά ρολογιού προγράμματος, που χρησιμοποιείται για την ανάκτηση του χρονισμού συστήματος STC (System Time Clock) σύμφωνα με τον κωδικοποιητή.
stuffing_bytes xB bytes γεμίσματος, η τιμή είναι 0xff
Το μήκος της περιοχής προσαρμογής περιλαμβάνει ένα byte που προσδιορίζεται από τον δείκτη σφάλματος μετάδοσης. pcr είναι η αναφορά ρολογιού προγράμματος, pcr, dts, pts είναι όλες οι τιμές δειγματοληψίας του ίδιου ρολογιού συστήματος, το pcr είναι αυξητικό, οπότε μπορεί να οριστεί ως τιμή dts, τα δεδομένα ήχου δεν χρειάζονται pcr. Εάν δεν υπάρχει πεδίο, το ipad μπορεί να παίξει, αλλά το vlc δεν μπορεί να παίξει. Κατά τη συσκευασία της ροής ts, οι πίνακες PAT και PMT δεν έχουν πεδίο προσαρμογής. Εάν το μήκος δεν είναι αρκετό, συμπληρώστε 0xff. Τόσο η ροή βίντεο όσο και η ροή ήχου πρέπει να προσθέσουν ένα πεδίο προσαρμογής, το οποίο συνήθως προστίθεται στο πρώτο πακέτο ts και στο τελευταίο πακέτο ts ενός καρέ, και το μεσαίο πακέτο ts δεν προστίθεται.
Μορφή PAT
table_id 8b Ο πίνακας PAT έχει οριστεί σε 0x00
Το τμήμα_syntax_indicator 1b είναι σταθερό στο 1
το μηδέν 1b είναι σταθερό στο 0
Το δεσμευμένο 2b είναι σταθερό σε 11
section_length 12b Το μήκος των ακόλουθων δεδομένων
transport_stream_id 16b Αναγνωριστικό ροής μεταφοράς, σταθερό ως 0x0001
Το δεσμευμένο 2b είναι σταθερό σε 11
version_number 5b Αριθμός έκδοσης, σταθερό στα 00000, εάν αλλάξει ο PAT, ο αριθμός έκδοσης θα αυξηθεί κατά 1
current_next_indicator 1b είναι σταθερό στο 1, υποδεικνύοντας ότι αυτός ο πίνακας PAT μπορεί να χρησιμοποιηθεί, αν είναι 0, περιμένετε τον επόμενο πίνακα PAT
Το τμήμα_number 8b έχει οριστεί σε 0x00
Το Last_section_number 8b έχει οριστεί σε 0x00
Έναρξη βρόχου
program_number 16b Όταν ο αριθμός προγράμματος είναι 0x0000, αυτό σημαίνει ότι είναι NIT, όταν ο αριθμός προγράμματος είναι 0x0001, αυτό σημαίνει ότι είναι PMT
Το δεσμευμένο 3b είναι σταθερό σε 111
PID 13b Τιμή PID που αντιστοιχεί στο περιεχόμενο του αριθμού προγράμματος
Τελικό βρόχο
CRC32 32b CRC32 ελέγξτε τον κωδικό των προηγούμενων δεδομένων
Μορφή PMT
table_id 8b Ο πίνακας PMT έχει οποιαδήποτε τιμή, 0x02
Το τμήμα_syntax_indicator 1b είναι σταθερό στο 1
το μηδέν 1b είναι σταθερό στο 0
Το δεσμευμένο 2b είναι σταθερό σε 11
section_length 12b Το μήκος των ακόλουθων δεδομένων
program_number 16b αριθμός καναλιού, που σημαίνει το κανάλι που σχετίζεται με το τρέχον PMT, η τιμή είναι 0x0001
Το δεσμευμένο 2b είναι σταθερό σε 11
version_number 5b Αριθμός έκδοσης, σταθερό στα 00000, εάν αλλάξει ο PAT, ο αριθμός έκδοσης θα αυξηθεί κατά 1
current_next_indicator 1b είναι σταθερό στο 1
Το τμήμα_number 8b έχει οριστεί σε 0x00
Το Last_section_number 8b έχει οριστεί σε 0x00
Το δεσμευμένο 3b είναι σταθερό σε 111
PCR_PID 13b Το PID του πακέτου TS όπου βρίσκεται το PCR (ρολόι αναφοράς προγράμματος), που ορίζεται ως PID βίντεο
Το δεσμευμένο 4b είναι σταθερό σε 1111
program_info_length 12b Πληροφορίες περιγραφής προγράμματος, που ορίζονται ως 0x000 σημαίνει όχι
Έναρξη βρόχου
stream_type 8b Τύπος ροής, το σήμα είναι Βίντεο ή ήχος ή άλλα δεδομένα, η κωδικοποίηση h.264 αντιστοιχεί στο 0x1b, η κωδικοποίηση aac αντιστοιχεί στο 0x0f, η κωδικοποίηση mp3 αντιστοιχεί στο 0x03
Το δεσμευμένο 3b είναι σταθερό σε 111
elementary_PID 13b PID που αντιστοιχεί στο stream_type
Το δεσμευμένο 4b είναι σταθερό σε 1111
ES_info_length 12b Πληροφορίες περιγραφής, που ορίζονται ως 0x000 σημαίνει όχι
Τελικό βρόχο
CRC32 32b CRC32 ελέγξτε τον κωδικό των προηγούμενων δεδομένων
(2) στρώμα pes
Το στρώμα pes προσθέτει χρονική σήμανση και άλλες πληροφορίες σε κάθε πλαίσιο βίντεο / ήχου. Το πακέτο pes περιέχει πολύ περιεχόμενο και αφήνουμε μόνο τα πιο συχνά χρησιμοποιούμενα.
κωδικός εκκίνησης pes 3B κωδικός έναρξης, σταθερός στο 0x000001
ροή id 1B τιμή ήχου (0xc0-0xdf), συνήθως 0xc0
Τιμή βίντεο (0xe0-0xef), συνήθως 0xe0
μήκος πακέτου pes 2B Το μήκος των δεδομένων pes πίσω, 0 σημαίνει απεριόριστο μήκος,
Μόνο το μήκος δεδομένων βίντεο θα υπερβαίνει το 0xffff
Η σημαία 1B συνήθως παίρνει την τιμή 0x80, που σημαίνει ότι τα δεδομένα δεν είναι κρυπτογραφημένα, δεν έχουν προτεραιότητα και δημιουργούνται αντίγραφα ασφαλείας των δεδομένων
Η τιμή σημαίας 1B 0x80 σημαίνει μόνο pts, η τιμή 0xc0 σημαίνει pts και dts
μήκος δεδομένων pes 1B Το μήκος των ακόλουθων δεδομένων, η τιμή είναι 5 ή 10
pts 5B 33bit τιμή
τιμή dts 5B 33bit
Το pts είναι η χρονική σήμανση οθόνης και το dts είναι η χρονική σήμανση αποκωδικοποίησης. Και τα δύο χρονικά σήματα απαιτούνται για δεδομένα βίντεο. Τα pts και dts των δεδομένων ήχου είναι τα ίδια, επομένως χρειάζονται μόνο pts. Υπάρχουν δύο χρονικές σημάνσεις, τα pts και τα dts, που προκαλούνται από B frames. Τα σημεία των πλαισίων I και P είναι ίση με τα dts. Εάν ένα βίντεο δεν έχει καρέ B, τα σημεία θα είναι πάντα τα ίδια με τα dts. Διαβάστε τα καρέ βίντεο διαδοχικά από το αρχείο, και η ακολουθία των εξαγόμενων καρέ είναι ίδια με την ακολουθία dts. Ο αλγόριθμος dts είναι σχετικά απλός, η αρχική τιμή + αύξηση είναι αρκετή, ο υπολογισμός των σημείων είναι πιο περίπλοκος και η μετατόπιση πρέπει να προστεθεί στα dts.
Υπάρχουν μόνο σημεία στο ήχο pes (όπως τα dts), τα καρέ I και P του βίντεο πρέπει να έχουν και τις δύο χρονικές σημάνσεις και το καρέ βίντεο B χρειάζεται μόνο πόντους (ίδιο με τα dts). Για να συσκευάσετε pts και dts, πρέπει να γνωρίζετε τον τύπο καρέ βίντεο, αλλά δεν μπορούμε να κρίνουμε τον τύπο καρέ μέσω της μορφής κοντέινερ. Πρέπει να αναλύσετε το περιεχόμενο h.264 για να λάβετε τον τύπο καρέ.
για παράδειγμα:
IPBBBP
Διάταξη ανάγνωσης: 1 2 3 4 5 6
παραγγελία dts: 1 2 3 4 5 6
σειρά πόντων: 1 5 3 2 4 6
Αλγόριθμος βίντεο κατά παραγγελία κατ 'απαίτηση:
dts = αρχική τιμή + 90000 / video_frame_rate, η αρχική τιμή μπορεί να καθοριστεί αυθαίρετα, αλλά είναι καλύτερο να μην πάρετε 0, το video_frame_rate είναι ο ρυθμός καρέ, όπως 23, 30.
Τα σημεία και τα dts βασίζονται σε κλίμακα χρόνου, 1s = 90000 κλίμακα χρόνου, ένα πλαίσιο πρέπει να είναι 90000 / video_frame_rate χρονοδιάγραμμα.
Ο διαχωρισμός του χρονοδιαγράμματος ενός καρέ με τη συχνότητα δειγματοληψίας μπορεί να μετατραπεί στη διάρκεια αναπαραγωγής ενός καρέ
Αλγόριθμος dts ήχου κατ 'απαίτηση:
dts = αρχική τιμή + (90000 * audio_samples_per_frame) / audio_sample_rate, η τιμή του audio_samples_per_frame σχετίζεται με τον κωδικοποιητή, η τιμή aac είναι 1024, η τιμή mp3 είναι 1158, το audio_sample_rate είναι ο ρυθμός δειγματοληψίας, όπως 24000, 41000. Το AAC αποκωδικοποιεί ένα πλαίσιο 1024 δείγματα ανά κανάλι, πράγμα που σημαίνει ότι η διάρκεια ενός καρέ είναι 1024 / δείγμα_ ρυθμός δευτερολέπτων. Έτσι, η χρονική σήμανση κάθε καρέ είναι 0, 1024 / δείγμα_ ρυθμός, ..., 1024 * n / δείγμα_ ρυθμός δευτερολέπτων.
Τα dts και τα σημεία του ζωντανού βίντεο πρέπει να χρησιμοποιούν άμεσα τον χρόνο στη ζωντανή ροή δεδομένων και δεν πρέπει να υπολογίζονται με τύπους.
(3) στρώμα es
Το επίπεδο ES αναφέρεται σε δεδομένα ήχου και βίντεο, εισάγουμε μόνο βίντεο h.264 και ήχου aac.
h.264 βίντεο:
Για να συσκευάσουμε τα δεδομένα h.264, πρέπει να προσθέσουμε ένα nalu (Network Abstraction Layer unit) στα δεδομένα βίντεο. Το nalu περιλαμβάνει την επικεφαλίδα nalu και τον τύπο nalu. Η κεφαλίδα nalu είναι σταθερή σε 0x00000001 (έναρξη πλαισίου) ή 0x000001 (σε πλαίσιο). Τα δεδομένα του h.264 αποτελούνται από φέτες, και το περιεχόμενο των slice περιλαμβάνει: βίντεο, sps, pps, κ.λπ. Ο τύπος nalu καθορίζει το περιεχόμενο των επόμενων δεδομένων h.264.
Το F 1b banter_zero_bit, h.264 ορίζει ότι πρέπει να είναι 0
NRI 2b nal_ref_idc, τιμή 0 ~ 3, υποδηλώνει τη σημασία αυτού του nalu, I frame, sps, pps συνήθως παίρνει 3, το P frame παίρνει συνήθως 2, και το B frame συνήθως παίρνει 0
Ο τύπος 5b αναφέρεται στον παρακάτω πίνακα
nal_unit_type περιγραφή
0 δεν χρησιμοποιείται
1 Non-IDR εικόνα, το IDR αναφέρεται στο βασικό καρέ
2 κομμάτι διαμέρισμα A
Διαμέρισμα 3 φετών Β
|
Εισαγάγετε email για να εκπλήξετε
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Αφρικανικά
sq.fmuser.org -> Αλβανικά
ar.fmuser.org -> Αραβικά
hy.fmuser.org -> Αρμενίων
az.fmuser.org -> Αζερμπαϊτζάν
eu.fmuser.org -> Βάσκων
be.fmuser.org -> Λευκορωσικά
bg.fmuser.org -> Βουλγαρικά
ca.fmuser.org -> Καταλανικά
zh-CN.fmuser.org -> Κινέζικα (απλοποιημένα)
zh-TW.fmuser.org -> Κινέζικα (Παραδοσιακά)
hr.fmuser.org -> Κροατικά
cs.fmuser.org -> Τσέχικα
da.fmuser.org -> Δανικά
nl.fmuser.org -> Ολλανδικά
et.fmuser.org -> Εσθονικά
tl.fmuser.org -> Φιλιππινέζικα
fi.fmuser.org -> Φινλανδικά
fr.fmuser.org -> Γαλλικά
gl.fmuser.org -> Γαλικιανά
ka.fmuser.org -> Γεωργιανά
de.fmuser.org -> Γερμανικά
el.fmuser.org -> Ελληνική
ht.fmuser.org -> Κρεόλ της Αϊτής
iw.fmuser.org -> Εβραϊκά
hi.fmuser.org -> Χίντι
hu.fmuser.org -> Ουγγρική
is.fmuser.org -> Ισλανδικά
id.fmuser.org -> Ινδονησιακά
ga.fmuser.org -> Ιρλανδικά
it.fmuser.org -> Ιταλικά
ja.fmuser.org -> Ιαπωνικά
ko.fmuser.org -> Κορεάτικα
lv.fmuser.org -> Λετονικά
lt.fmuser.org -> Λιθουανικά
mk.fmuser.org -> Μακεδόνας
ms.fmuser.org -> Μαλαισιανά
mt.fmuser.org -> Μαλτέζικα
no.fmuser.org -> Νορβηγική
fa.fmuser.org -> Περσικά
pl.fmuser.org -> Πολωνικά
pt.fmuser.org -> Πορτογαλικά
ro.fmuser.org -> Ρουμανικά
ru.fmuser.org -> Ρωσικά
sr.fmuser.org -> Σέρβικα
sk.fmuser.org -> Σλοβακικά
sl.fmuser.org -> Σλοβένικα
es.fmuser.org -> Ισπανικά
sw.fmuser.org -> Σουαχίλι
sv.fmuser.org -> Σουηδικά
th.fmuser.org -> Ταϊλάνδης
tr.fmuser.org -> Τουρκικά
uk.fmuser.org -> Ουκρανικά
ur.fmuser.org -> Ουρντού
vi.fmuser.org -> Βιετνάμ
cy.fmuser.org -> Ουαλικά
yi.fmuser.org -> Γίντις
FMUSER Wirless Μετάδοση βίντεο και ήχου πιο εύκολα!
Επικοινωνία
Διεύθυνση:
No.305 Room HuiLan Building No.273 Huanpu Road Guangzhou Κίνα 510620
Κατηγορίες
Newsletter