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 -> Γίντις
Πριν από λίγες ημέρες, πέρασα λίγο χρόνο για να μελετήσω την τεχνολογία ζωντανής ροής HTTP (HLS) και να εφαρμόσω έναν κωδικοποιητή HLS, hlsliveencoder, γραμμένος σε C + +. Η λειτουργία του είναι να συλλάβει την κάμερα και το μικρόφωνο, την κωδικοποίηση βίντεο H.264 σε πραγματικό χρόνο και την κωδικοποίηση ήχου aac, και σύμφωνα με τις προδιαγραφές του πρωτοκόλλου HLS, να δημιουργήσει τμηματικό πρότυπο αρχείο TS και αρχείο ευρετηρίου m3u8. Μέσω του hlsliveencoder και του διακομιστή HTTP τρίτου μέρους (όπως το nginx), πραγματοποιήσαμε με επιτυχία τη ζωντανή ροή του HTTP και περάσαμε τη δοκιμή στο iPhone. Θα γράψω μερικά από τα κέρδη εδώ.
1. Ανάλυση της τεχνολογίας HLS
Η ζωντανή ροή HTTP (HLS) είναι ένα πρωτόκολλο μεταφοράς μέσων ροής που βασίζεται στο HTTP που εφαρμόζεται από την Apple Inc., το οποίο μπορεί να πραγματοποιήσει ζωντανά και κατ 'απαίτηση μέσα ροής. Χρησιμοποιείται κυρίως στο σύστημα IOS για την παροχή ζωντανών και κατ 'απαίτηση λύσεων ήχου και βίντεο για συσκευές IOS (όπως iPhone και iPad). Το HLS κατ 'απαίτηση είναι βασικά ένα κοινό τμηματοποιημένο HTTP κατ' απαίτηση. Η διαφορά είναι ότι τα τμήματα του είναι πολύ μικρά. Προκειμένου να πραγματοποιηθεί το HLS κατ 'απαίτηση, το κλειδί είναι η τμηματοποίηση αρχείων πολυμέσων. Προς το παρόν, υπάρχουν πολλά εργαλεία ανοιχτού κώδικα που μπορούν να χρησιμοποιηθούν. Δεν θα το συζητήσω εδώ, απλώς μιλώ για την τεχνολογία ζωντανής μετάδοσης HLS.
Σε σύγκριση με τα κοινά πρωτόκολλα ζωντανής ροής, όπως το πρωτόκολλο RTMP, το πρωτόκολλο RTSP, το πρωτόκολλο MMS και ούτω καθεξής, η μεγαλύτερη διαφορά της ζωντανής ροής HLS είναι ότι ο ζωντανός πελάτης δεν λαμβάνει πλήρη ροή δεδομένων. Το πρωτόκολλο HLS αποθηκεύει τη ζωντανή ροή δεδομένων ως συνεχή, βραχυπρόθεσμα και μακρά αρχεία πολυμέσων (μορφή mpeg-ts) στην πλευρά του διακομιστή, ενώ η πλευρά του πελάτη κατεβάζει και αναπαράγει συνεχώς αυτά τα μικρά αρχεία, επειδή η πλευρά του διακομιστή δημιουργεί πάντα νέα μικρά αρχεία από τα πιο πρόσφατα ζωντανά δεδομένα, έτσι ώστε η πλευρά του πελάτη να χρειάζεται να αναπαράγει μόνο τα αρχεία που λαμβάνονται από το διακομιστή για να πραγματοποιήσει τη ζωντανή μετάδοση. Μπορεί να φανεί ότι το HLS ουσιαστικά πραγματοποιεί ζωντανή μετάδοση μέσω τεχνολογίας VOD. Επειδή τα δεδομένα μεταδίδονται μέσω πρωτοκόλλου HTTP, δεν χρειάζεται να εξετάσουμε το πρόβλημα του τείχους προστασίας ή του διακομιστή μεσολάβησης και ο χρόνος τμηματοποίησης αρχείων είναι πολύ μικρός. Ο πελάτης μπορεί γρήγορα να επιλέξει και να αλλάξει το ρυθμό κώδικα για να προσαρμοστεί στην αναπαραγωγή υπό διαφορετικές συνθήκες εύρους ζώνης. Ωστόσο, λόγω των τεχνικών χαρακτηριστικών του HLS, η καθυστέρησή του είναι πάντα υψηλότερη από εκείνη του συνηθισμένου πρωτοκόλλου ζωντανής ροής.
Σύμφωνα με την παραπάνω κατανόηση, για να επιτύχουμε ζωντανή ροή HTTP ζωντανά, πρέπει να μελετήσουμε και να εφαρμόσουμε τις ακόλουθες βασικές τεχνολογίες.
(1) Συλλέξτε τα δεδομένα της πηγής βίντεο και της πηγής ήχου
(2) Τα αρχικά δεδομένα κωδικοποιούνται από H264 και AAC
(3) Τα δεδομένα βίντεο και ήχου συσκευάζονται ως πακέτα mpeg-ts
(4) Στρατηγική δημιουργίας τμηματοποίησης HLS και αρχείο ευρετηρίου m3u8
2. Πρωτόκολλο μεταφοράς HTTP
Μεταξύ αυτών, το πρώτο και το δεύτερο σημείο έχουν αναφερθεί στο προηγούμενο άρθρο μου, και το τελευταίο σημείο είναι ότι μπορούμε να χρησιμοποιήσουμε τον υπάρχοντα διακομιστή HTTP, οπότε η εφαρμογή του τρίτου και του τέταρτου σημείου είναι το κλειδί.
(1) Πλαίσιο προγράμματος και εφαρμογή
Μέσω της παραπάνω ανάλυσης, η λογική και η διαδικασία του ζωντανού κωδικοποιητή HLS είναι βασικά σαφείς: ξεκινήστε το νήμα κωδικοποίησης ήχου και βίντεο αντίστοιχα, πραγματοποιήστε την απόκτηση ήχου και βίντεο μέσω της τεχνολογίας DirectShow (ή άλλης) και, στη συνέχεια, καλέστε libx264 και libfaac αντίστοιχα για βίντεο και κωδικοποίηση ήχου. Αφού τα δύο νήματα κωδικοποίησης κωδικοποιούν τα δεδομένα ήχου και βίντεο σε πραγματικό χρόνο, τα αποθηκεύουν σε ένα αρχείο τμήματος με μορφή mpeg-ts σύμφωνα με την προσαρμοσμένη στρατηγική διαμέρισης. Όταν αποθηκεύεται ένα αρχείο τμήματος, το αρχείο ευρετηρίου m3u8 ενημερώνεται. Όπως φαίνεται στο παρακάτω σχήμα:
Στο παραπάνω σχήμα, μετά τη λήψη των δεδομένων βίντεο και ήχου, ο hlsliveencoder πρέπει πρώτα να καθορίσει εάν το τρέχον διαμέρισμα πρέπει να τερματιστεί και να δημιουργήσει ένα νέο διαμέρισμα για να συνεχίσει τη συνεχή δημιουργία διαμερισμάτων TS. Πρέπει να σημειωθεί ότι ο νέος κατακερματισμός πρέπει να ξεκινά από το βασικό πλαίσιο για να αποτρέψει την αποτυχία αποκωδικοποίησης της συσκευής αναπαραγωγής. Ο βασικός κώδικας έχει ως εξής:
Η διεπαφή του tsmuxer είναι επίσης σχετικά απλή.
(2) Στρατηγική παραγωγής τμημάτων HLS και m3u8
Strategy Στρατηγική τμηματοποίησης
Η στρατηγική τμηματοποίησης του HLS συνιστάται βασικά να χωρίζεται κάθε 10 δευτερόλεπτα. Φυσικά, ο συγκεκριμένος χρόνος πρέπει να επισημανθεί ανάλογα με το πραγματικό μήκος του διαχωρισμού
Σε γενικές γραμμές, για χάρη της προσωρινής μνήμης και για άλλους λόγους, οι τρεις τελευταίες διευθύνσεις θραυσμάτων διατηρούνται στο αρχείο ευρετηρίου και ενημερώνονται με τη μορφή "συρόμενου παραθύρου".
② Εισαγωγή του αρχείου m3u8
Το M3u8 είναι το αρχείο ευρετηρίου της ζωντανής ροής HTTP. Το M3u8 μπορεί να θεωρηθεί ως. Βασικά το αρχείο μορφής M3U, η διαφορά είναι ότι το αρχείο m3u8 χρησιμοποιεί κωδικοποίηση χαρακτήρων UTF-8.
Αντιγράψτε τον κωδικό
# Κεφαλίδα αρχείου Extm3u M3U, πρέπει να τοποθετηθεί στην πρώτη γραμμή
# Σειριακός αριθμός του πρώτου τμήματος TS της ακολουθίας ext-x-media
# Ext-x-targetduration η μέγιστη διάρκεια κάθε τμήματος TS
# Το ext-x-allow-cache επιτρέπει την προσωρινή μνήμη
# Τελικό αρχείο ext-x-endlist m3u8
#Extinf επιπλέον πληροφορίες, οι πληροφορίες του split ts, όπως η διάρκεια, το εύρος ζώνης κ.λπ.
|
Εισαγάγετε 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