Διαδικτυακές εκπομπές χρησιμοποιώντας τη μονάδα Ngnix-rtmp-module. Ζωντανή ροή HTTP: Ανασκόπηση των καλύτερων συνταγών για τα πρωτόκολλα ροής

05.09.2023

Σχεδόν όλοι το χρησιμοποιούν και πολλοί πιθανότατα έχουν ακούσει για τη δυναμική προσαρμογή μιας ροής βίντεο στο εύρος ζώνης δικτύου. ΣΕ πρόσφαταΑυτή είναι σχεδόν μια υποχρεωτική απαίτηση για online βίντεο στο Διαδίκτυο. Τα πλεονεκτήματα μιας προσαρμοστικής ροής βίντεο είναι προφανή: εάν το δίκτυο χαλάει κατά καιρούς, το βίντεο συνεχίζει να εμφανίζεται στη συσκευή αναπαραγωγής χωρίς ορατή εναλλαγή ή αποθήκευση στην προσωρινή μνήμη. Η ποιότητα της εικόνας επιλέγεται αυτόματα για να ταιριάζει με το εύρος ζώνης του δικτύου.

Παρά το γεγονός ότι η δυναμική προσαρμογή μιας ροής βίντεο είναι ήδη μια σχετικά «παλιά» τεχνολογία, υπάρχουν πολλές μικρές λεπτομέρειες για το πώς να επιτύχετε το καλύτερο αποτέλεσμα. Για να το κάνετε πιο απλό και φθηνότερο από την πλευρά του διακομιστή και για να κάνετε αυτό το βίντεο συμβατό με όσο το δυνατόν περισσότερους πελάτες (Web, iOS, Android και μην ξεχνάτε τη Smart TV).

Έχουν ήδη κυκλοφορήσει αρκετά άρθρα σχετικά με το προσαρμοστικό βίντεο στο Habré, οπότε δεν θα επαναλάβω τον εαυτό μου και θα προσπαθήσω να εστιάσω στο πώς λειτουργεί και πώς να το φτιάξω.

Λυρική παρέκβαση(όσο πιο συνοπτικά και απλά γίνεται για το προσαρμοστικό βίντεο):

Προφανώς, η πιο εύκολη επιλογή για τη διανομή βίντεο στο Διαδίκτυο είναι να πάρετε ένα αρχείο mp4 και να το δημοσιεύσετε σε έναν διακομιστή HTTP. Αυτή η επιλογή είναι κακή επειδή έχουμε μόνο 1 αρχείο, αλλά έχουμε πάρα πολλούς πελάτες και το ίδιο πολλές συνδέσεις στο Διαδίκτυο υψηλής ποιότητας και όχι πολύ υψηλής ποιότητας. Εάν ανεβάσουμε ένα βίντεο 1080p με ρυθμό μετάδοσης bit 20 megabit/s (ποιότητα Blueray), τα smartphone δεν θα μπορούν να το παρακολουθήσουν και εάν ανεβάσουμε ένα βίντεο για smartphone (ας πούμε, 1 megabit/s και 320x240), θα φαίνεται τρομερό σε τηλεόραση 55 ιντσών.

Λοιπόν, επειδή 1 αρχείο είναι κακό, ας ανεβάσουμε μια ντουζίνα αρχεία, ας "κόψουμε" διαφορετικά βίντεο από μια πηγή, θα υπάρχουν όλοι οι ρυθμοί bit και όλα τα μεγέθη καρέ, από κινητό έως 1080p, με ρυθμό μετάδοσης από 1 megabit/s έως 20. Τέλεια . Υπάρχει όμως ένα πρόβλημα. Το ίδιο smartphone μπορεί να είναι τόσο στο οικιακό Wi-Fi (δηλαδή γρήγορο) όσο και στο Wi-Fi του εστιατορίου (δηλαδή σε αργό). Τόσο οι άνθρωποι στη Μόσχα όσο και οι άνθρωποι στη Σαχαλίνη έχουν τις ίδιες τηλεοράσεις.

Στη συνέχεια, αφήστε το πρόγραμμα αναπαραγωγής να ελέγξει με κάποιο τρόπο πόσο εύρος ζώνης έχει το δίκτυο και, αφού το μετρήσει, επιλέξτε απαιτούμενο αρχείογια προβολή. Τέλος, ένα άλλο άλυτο πρόβλημα είναι πώς να ληφθεί υπόψη το γεγονός ότι η ταινία διαρκεί 2-3 ώρες και το Διαδίκτυο είναι είτε «πολύ» ή «δεν φτάνει». Να εκτελούνται περιοδικά μετρήσεις εύρους ζώνης δικτύου; Αυτή η μέθοδος θα λειτουργήσει, αλλά τι πρέπει να κάνετε όταν πρέπει να μεταβείτε σε ένα περισσότερο ή λιγότερο "υψηλής ποιότητας" αρχείο κατά τη διάρκεια ενός δικτύου "χαλάωσης" ή "επιτάχυνσης"; Για να το κάνετε αυτό γρήγορα (και χωρίς να σταματήσετε να βλέπετε ό,τι έχει ήδη ληφθεί), πρέπει να γνωρίζετε εκ των προτέρων πού στο νέο αρχείο πρέπει να ξεκινήσετε τη λήψη. Δυστυχώς, η σχέση μεταξύ της μετατόπισης από την αρχή του αρχείου και της ώρας της ταινίας είναι πολύ συχνά μη γραμμική, λόγω του μεταβλητού bitrate. Σε γρήγορες σκηνές, όταν, για παράδειγμα, ο Τζέιμς Μποντ κυνηγά έναν άλλον εχθρό, η εικόνα αλλάζει συχνά και ο ρυθμός μετάδοσης bit είναι υψηλός, αλλά σε ένα ομαλό πανόραμα ενός ουρανού χωρίς σύννεφα η εικόνα δεν αλλάζει σχεδόν και ο ρυθμός μετάδοσης bit είναι χαμηλός.

Για να αντεπεξέλθετε σε αυτήν την εργασία, είναι απαραίτητο να καταχωρίσετε όλα τα αρχεία εκ των προτέρων (κάντε ζεύγη "χρόνο σκηνής στην ταινία / θέση από την αρχή του αρχείου." Αυτά τα ζεύγη ονομάζονται τμήματα. Μετά από αυτό, θα είναι δυνατό, γνωρίζοντας τρέχουσα ώραπροβολή, προσδιορίστε από πού σε άλλο αρχείο μπορεί να γίνει λήψη του επόμενου τμήματος. Για "αδιάλειπτη" εναλλαγή, τα τμήματα από διαφορετικούς ρυθμούς bit ευθυγραμμίζονται έγκαιρα.

Φυσικά, όλες αυτές οι λειτουργίες έχουν εφαρμοστεί από καιρό σε όλες σχεδόν τις σύγχρονες συσκευές. Αρκετοί διαφορετικοί ρυθμοί bit και μεγέθη καρέ για την ίδια ταινία συσκευάζονται σε μια συγκεκριμένη μορφή πληροφοριών σχετικά με το τι είναι σε ποια αρχεία και πού περιγράφεται σε ένα ειδικό αρχείο περιγραφής (που συχνά ονομάζεται δήλωση). Πριν από την παρακολούθηση, ο πελάτης κατεβάζει το αρχείο του μανιφέστου και «καταλαβαίνει» από πού πρέπει να πραγματοποιήσει λήψη, από πού είναι το μέγεθος του βίντεο και ποιος είναι ο ρυθμός μετάδοσης bit στον διακομιστή.

Τα κακά νέα είναι ότι σε σύγχρονος κόσμοςΑυτή η απλή προσέγγιση έχει εφαρμοστεί από διαφορετικές εταιρείες σε διαφορετικές χρονικές στιγμές και με διαφορετικούς τρόπους. Ακολουθεί μια λίστα με τις πιο διάσημες και κοινές μεθόδους για προσαρμοστική διανομή βίντεο μέσω HTTP:

  • Ζωντανή ροή HTTP (ή HLS, που εφευρέθηκε από την Apple και χρησιμοποιείται σε πολλές συσκευές)
  • HTTP Dynamic Streaming (Adobe HDS για συντομία)
  • MPEG-DASH (το πρότυπο δημοσιεύτηκε στα τέλη Ιανουαρίου)
  • Ομαλή ροή (εφευρέθηκε στη Microsoft)

Αξίζει επίσης να σημειωθεί ότι μερικές φορές (σε μορφές HDS και Smooth Streaming) αντί για άμεσους συνδέσμους από δηλώσεις, χρησιμοποιείται ένα ειδικό σχήμα διεύθυνσης τμήματος, όταν ο διακομιστής, χρησιμοποιώντας αυτό το ειδικό σχήμα, «υπολογίζει» ποιο αρχείο ζητά ο πελάτης και σε Για να υποστηρίξει ένα τέτοιο σχήμα, δημιουργείται επίσης ένα μανιφέστο διακομιστή.

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

Ένα μανιφέστο στο HLS είναι μια ομάδα λιστών αναπαραγωγής που αποτελείται από μια "κύρια λίστα αναπαραγωγής" και πολλές "λίστες αναπαραγωγής ροής". Ο ευκολότερος τρόπος για να το δείξετε αυτό είναι με ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε μια πολύ μικρή ταινία (μόνο 3 τμήματα των 10 δευτερολέπτων, για απλότητα), για την οποία φτιάξαμε 3 ρυθμούς bit βίντεο 500 kbps, 1000 kbpsΚαι 2000 kbps. ΣΕ σύστημα αρχείωνδιακομιστής μπορεί να βρίσκεται για παράδειγμα ως εξής:

/master-playlist.m3u8 /500K/ /500K/playlist-500K.m3u8 /500K/segment0.ts /500K/segment1.ts /500K/segment2.ts /1000K/ /1000K/playlist-1000K/segment0.ts /500K/segment1.ts /500K/segment2.ts /1000K/ /1000K/playlist-1000K/segment0000 .ts /1000K/segment1.ts /1000K/segment2.ts /2000K/ /2000K/playlist-2000K.m3u8 /2000K/segment0.ts /2000K/segment1.ts /2000K/segment2.ts

Αρχείο master-playlist.m3u8μέσα μοιάζει με αυτό (αφαίρεσα κάποιες πληροφορίες για ευκολία παρουσίασης):

#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=500,CODECS="mp4a.40.2, avc1.640028",RESOLUTION=640x480 500K/playlist-500K.m3u8 #EXT-X-STREAM-INF:10B CODECS="mp4a.40.2, avc1.640028", RESOLUTION=640x480 1000K/playlist-1000K.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2000,CODECS="mp4a.40.2, av00.40.2, av000.2, av000.2, av000.2, av000.2, av000.2, av000.2, av000.2, av000.2, av000.2, av000.2. 2000K/playlist-2000K.m3u8

Όσοι είναι εξοικειωμένοι με τη μορφή m3u θα καταλάβουν εύκολα τι είναι τι. Το αρχείο περιέχει τρεις γραμμές συνδέσμων προς άλλες λίστες αναπαραγωγής m3u8 και η γραμμή που σχολιάζεται με το εικονίδιο "#" πάνω από κάθε σύνδεσμο περιέχει τα δεδομένα για τον αντίστοιχο ρυθμό μετάδοσης bit. Εύρος ζώνης, ΚΩΔΙΚΟΙ, ΑΝΑΛΥΣΗ- γενικά, οι όροι μιλούν από μόνοι τους. Είναι εύκολο να παρατηρήσετε ότι μόνο το εύρος ζώνης είναι διαφορετικό, αν και στην πραγματικότητα όλες οι παράμετροι εκεί μπορεί να είναι διαφορετικές. Το καθήκον του πελάτη είναι να κατανοήσει, με βάση αυτές τις παραμέτρους, ποια λίστα αναπαραγωγής του αρέσει. αυτή τη στιγμήκαλός.

Ας υποθέσουμε ότι ο πελάτης γνωρίζει ότι έχει πλέον «καλό» Διαδίκτυο και προτιμά υψηλό ρυθμό μετάδοσης bit (2000K). Ο πελάτης κατεβάζει τη λίστα αναπαραγωγής 2000K/playlist-2000K.m3u8, η οποία εσωτερικά μοιάζει με αυτό:

#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.8849, segment0.ts #EXTINF:9.9266 , segment1.ts #EXTINF:9.9266, segment2.ts #EXT-X-ENDLIST

Οι σύνδεσμοι προς μεμονωμένα τμήματα είναι ορατοί, η διάρκειά τους σε δευτερόλεπτα υποδεικνύεται στην παραπάνω γραμμή, για το μηδενικό τμήμα, για παράδειγμα: "#EXTINF:9.8849". Μετά τη λήψη αυτής της λίστας αναπαραγωγής, ο πελάτης αρχίζει να παίζει από το πρώτο έως το τρίτο τμήμα. Κατά την παρακολούθηση ενός τμήματος, το επόμενο συνήθως κατεβάζει και ούτω καθεξής. Εάν ο πελάτης πιστεύει ότι η λήψη του επόμενου τμήματος γίνεται πολύ αργά, ο πελάτης μπορεί να σταματήσει τη λήψη και να ξεκινήσει τη λήψη του ίδιου τμήματος (για το ίδιο μέρος στην ταινία) από μια άλλη λίστα αναπαραγωγής, για παράδειγμα, 500K/playlist-500K.m3u8. Όταν αποκατασταθεί η ταχύτητα του Διαδικτύου, ο πελάτης μπορεί να μεταβεί ξανά στη λήψη τμημάτων από τη λίστα αναπαραγωγής 1000K ή 2000K.

Η απλότητα του HLS επιτρέπει τη διανομή του από σχεδόν οποιαδήποτε πλατφόρμα διακομιστή (στην πραγματικότητα, δεν απαιτείται «λογική» διακομιστή για τη διανομή). Τα μεμονωμένα τμήματα, εάν είναι απαραίτητο, μπορούν εύκολα να αποθηκευτούν στην κρυφή μνήμη με οποιονδήποτε διαθέσιμο τρόπο.

Τώρα ας δούμε ποια εργαλεία είναι διαθέσιμα για τη δημιουργία και τη συσκευασία βίντεο στο HLS. Αυτή η διαδικασία αποτελείται από τρία κύρια στάδια:

Στάδιο 1. Προετοιμασία αρχείων πηγής (.mov ή .mp4 με H.264) με τον απαιτούμενο ρυθμό μετάδοσης bit και μέγεθος καρέ.

Υπάρχουν πολλές επιλογές εδώ, αλλά η πιο προφανής είναι να χρησιμοποιήσετε μια δωρεάν ffmpeg. Υπάρχουν επίσης πολλοί επεξεργαστές βίντεο GUI για MacOSX και Windows. Για το παράδειγμα που περιγράφεται παραπάνω, σε αυτό το στάδιο πρέπει να λάβετε τρία αρχεία .mp4 ή .mov, με μέσους ρυθμούς bit 500K, 1000K και 2000K. Είναι σημαντικό να χρησιμοποιείτε την ίδια πηγή για όλα αυτά, έτσι ώστε στο τέλος της όλης διαδικασίας να καταλήξετε με τμήματα που είναι ίδια χρονικά.

Για παράδειγμα, εάν έχετε ένα αρχείο προέλευσης ταινία.mp4(υποθέτουμε ότι το bitrate του δεν είναι χαμηλότερο από 2000K), τότε θα αρκεί να εκτελέσετε το ffmpeg κάτι τέτοιο (τα πλήκτρα υποδεικνύουν ότι το κομμάτι ήχου μπορεί να ληφθεί ως έχει και ο ρυθμός μετάδοσης bit βίντεο μπορεί να αλλάξει):

$ ffmpeg -i movie.mp4 -acodec copy -vb 500K movie-500K.mp4 $ ffmpeg -i movie.mp4 -acodec copy -vb 1000K movie-1000K.mp4 $ ffmpeg -i movie.mp4 -acodec copy -vb ταινία 2000K -2000K.mp4

Στάδιο 2. Δημιουργία λιστών αναπαραγωγής ενός bitrate.

Στη συνέχεια, πρέπει να δημιουργήσετε ένα σύνολο από λίστα αναπαραγωγής m3u8 και τμήματα *.ts από κάθε ταινία-*K.mp4. Είναι σημαντικό τα τμήματα να είναι σύγχρονα μεταξύ διαφορετικών ρυθμών bit. Θα πω αμέσως ότι το ffmpeg μπορεί να "κόψει" το mp4 σε τμήματα m3u8 +, αλλά μόνο εντός του ίδιου bitrate. Δυστυχώς, στη συνέχεια θα πρέπει να δημιουργήσετε την κύρια λίστα αναπαραγωγής με μη αυτόματο τρόπο. Αυτό δεν είναι πολύ δύσκολο (στην ελάχιστη έκδοση, οποιαδήποτε επεξεργαστής κειμένου), αλλά αν τύχει Apple iOSή προγραμματιστή OSX, μπορώ να προτείνω το πακέτο Εργαλεία ζωντανής ροής HTTP(για MacOSX). Περιλαμβάνει πολλά προγράμματα, δύο από τα οποία θα μας φανούν χρήσιμα: mediafilesegmenterΚαι variantplaylistcreator. Η πρώτη μετατρέπει ένα αρχείο mp4 σε μια λίστα αναπαραγωγής m3u8 και "κόβει" τμήματα, η δεύτερη συλλέγει πολλές λίστες αναπαραγωγής ενός bitrate σε μια κύρια λίστα αναπαραγωγής.

Έτσι, δημιουργούμε τρεις λίστες αναπαραγωγής από τα τρία αρχεία που ελήφθησαν στο προηγούμενο βήμα (υποτίθεται ότι τα αρχεία movie-*.mp4 βρίσκονται στον τρέχοντα φάκελο).

$ mkdir 500K $ mediafilesegmenter -I -f 500K -B τμήμα ταινία-500K.mp4 $ mkdir 1000K $ mediafilesegmenter -I -f 1000K -B τμήμα ταινία-1000K.mp4 $ mkdir 2000K $ τμήμα mediafilesegmenter -I -0 -2000K.mp4

Μικρές διευκρινίσεις:

Κλειδί -Ιαπαιτεί τη δημιουργία ενός ειδικού αρχείου (variant plist), το οποίο θα χρειαστεί αργότερα στο πρόγραμμα variantplaylistcreator.

Κλειδί -f 500Kυποδηλώνει τον κατάλογο (500K) στον οποίο πρέπει να προστεθούν τα "κομμένα" τμήματα.

Διακόπτης -Β τμήμαλέει πώς πρέπει να ονομάζονται τα αρχεία τμήματος (πρόθεμα, το οποίο θα συμπληρωθεί με έναν αριθμό και την επέκταση .ts).

Σε αυτό το στάδιο, θα πρέπει να έχετε 3 φακέλους γεμάτους με αρχεία τμημάτων, 3 αρχεία λίστας αναπαραγωγής, ένα σε κάθε φάκελο και 3 αρχεία με την επέκταση .plist. Οι λίστες αναπαραγωγής ενός bitrate ονομάζονται prog_index.m3u8 από προεπιλογή. Μπορείτε επίσης να ελέγξετε πώς παίζονται σε πελάτες για να το κάνετε αυτό, πρέπει να τα ανεβάσετε σε έναν διακομιστή HTTP και να εκτελέσετε την προβολή σε οποιοδήποτε από αυτά τα prog_index.m3u8 στον υπολογιστή-πελάτη.

Στάδιο 3. Συλλέγουμε τρεις ξεχωριστές λίστες αναπαραγωγής σε ένα μόνο κύριο.

Για το σκοπό αυτό χρησιμοποιείται variantplaylistcreator. Ξεκινά ως εξής (για το παράδειγμά μας):

Variantplaylistcreator -r -o movie.m3u8 \ 500K\prog_index.m3u8 movie-500K.plist \ 1000K\prog_index.m3u8 movie-1000K.plist \ 2000K\prog_index.m3u8 movie-2000K.plist

Διακόπτης -rαπαιτεί τον καθορισμό των λεγόμενων ετικετών ανάλυσης (μέγεθος καρέ βίντεο). Γενικά, δεν απαιτείται, αλλά εάν συσκευάσετε πολλά βίντεο με διαφορετική ανάλυση σε ένα κύριο playlist (για παράδειγμα, ποιότητα κινητού, 480p και 1080p), τότε αξίζει να το προσδιορίσετε. Σε αυτήν την περίπτωση, ο πελάτης γνωρίζει απευθείας από την κύρια λίστα αναπαραγωγής ποια δικαιώματα είναι διαθέσιμα.

Key -o ταινία.m3u8υποδηλώνει το όνομα του αρχείου εξόδου (κύριο playlist).

Άλλα μέρη γραμμή εντολών- αυτά είναι ζεύγη playlist-plist για κάθε bitrate που λήφθηκαν στο προηγούμενο στάδιο.

Τώρα έχουμε μια κύρια λίστα αναπαραγωγής ταινία.m3u8. Μπορείτε να ανεβάσετε τον τρέχοντα κατάλογο και τους υποκαταλόγους σε έναν διακομιστή HTTP και να ξεκινήσετε την προβολή του αρχείου movie.m3u8 στον υπολογιστή-πελάτη. Παρεμπιπτόντως, τα αρχεία *.mov δεν χρειάζονται πλέον για τη μείωση του χώρου που καταλαμβάνεται από το περιεχόμενο, μπορούν να αφαιρεθούν από το φάκελο.

Αυτό είναι το μόνο που έχω προς το παρόν, αλλά αν αυτό το θέμαείναι ενδιαφέρον για την αξιοσέβαστη κοινότητα, μπορώ να το συνεχίσω και σε μελλοντικές αναρτήσεις θα σας πω πώς να προσθέσετε εναλλακτικά κομμάτια ήχου και υπότιτλους στο HLS, καθώς και πώς να κάνετε το MPEG-DASH συμβατό με Smart TV από την HLS. Σας ευχαριστώ για την προσοχή σας.

Τα τελευταία χρόνια, ο κόσμος ψηφιακή μετάδοσηέχουν γίνει μεγάλες αλλαγές. Το Flash, μια τεχνολογία για την παράδοση περιεχομένου μέσω του Διαδικτύου που αναπτύχθηκε από την Adobe, μειώνει ραγδαία την παρουσία της. Και τη θέση του παίρνουν πρωτόκολλα όπως το HLS.

Τα HTML5 και HLS είναι χτισμένα ανοιχτού κώδικα, μπορούν να τροποποιηθούν όπως θέλετε και είναι δωρεάν. Είναι επίσης πιο ασφαλή, πιο αξιόπιστα και πιο γρήγορα από τους προκατόχους τους. Σε αυτό το άρθρο θα προσπαθήσουμε να εξηγήσουμε τις έννοιες της διαδικτυακής μετάδοσης, να δώσουμε μια περιγραφή των πρωτοκόλλων ροής και συστάσεις για τη χρήση του HLS.

Τι είναι το HLS

Το HLS σημαίνει HTTP Live Streaming, ένα πρωτόκολλο για ροή δεδομένων πολυμέσων μέσω Διαδικτύου. Το HLS κόβει το περιεχόμενο βίντεο σε μορφή MP4 σε μικρά μπλοκ 10 δευτερολέπτων, κομμάτια. Αυτά τα σύντομα τμήματα παραδίδονται μέσω HTTP, καθιστώντας το πρωτόκολλο συμβατό με τις περισσότερες συσκευές και τείχη προστασίας.

Το HLS παρέχει κατά κύριο λόγο εξαιρετική ποιότητα διαδικτυακών εκπομπών. Ωστόσο, πρέπει να λάβετε υπόψη ότι η καθυστέρηση κατά τη διαδικτυακή μετάδοση είναι 15-30 δευτερόλεπτα. Από την πλευρά του διακομιστή, ο δημιουργός εκπομπής μπορεί να εκχωρήσει την κωδικοποίηση ροής σε διάφορες ποιότητες. Στη συνέχεια, η συσκευή αναπαραγωγής ζητά δυναμικά τη βέλτιστη ποιότητα με βάση το πλάτος του καναλιού Διαδικτύου σε μια συγκεκριμένη στιγμή. Κατά συνέπεια, η ποιότητα των θραυσμάτων μπορεί να ποικίλλει.

Για παράδειγμα, κινητό τηλέφωνοπαίζει το βίντεο σε ποιότητα HD και ένα λεπτό αργότερα ο θεατής βρίσκεται σε μια κακή περιοχή λήψης. Όταν η συσκευή αναπαραγωγής εντοπίσει μείωση στην ποιότητα σύνδεσης, ζητά κομμάτια βίντεο χαμηλότερης ποιότητας. Αυτό μειώνει την προσωρινή αποθήκευση, το πάγωμα και άλλα προβλήματα.

Ιστορία της δημιουργίας του HLS

Το HLS κυκλοφόρησε αρχικά από την Appleτο καλοκαίρι του 2009 μαζί με το IPhone 3. Προηγούμενα μοντέλαΤο iPhone αντιμετώπισε προβλήματα με τη διαδικτυακή μετάδοση λόγω του γεγονότος ότι μερικές φορές άλλαζε μεταξύ τους Δίκτυα Wi-FiΚαι κινητή μετάδοσηδεδομένα.

Πριν από την κυκλοφορία του HLS, το κύριο πρωτόκολλο μέσων ροής της Apple ήταν ο Quicktime Streaming Server. Καλή εξυπηρέτηση, αλλά επειδή χρησιμοποιούσε μη τυπικές θύρες για μετάδοση δεδομένων, το πρωτόκολλο RTSP του αποκλείστηκε περιοδικά από τείχη προστασίας. Σε συνδυασμό με το αργό Διαδίκτυο, αυτό οδήγησε στην εγκατάλειψη αυτού του πρωτοκόλλου. Όμως τα διδάγματα που αντλήθηκαν από την εφαρμογή του ήταν πολύ χρήσιμα για την ανάπτυξη του HLS.

Η ροή HLS δημιουργείται εν κινήσει και αποθηκεύεται στον διακομιστή HTTP. Τα αρχεία βίντεο, όπως προαναφέρθηκε, χωρίζονται σε μικρά κομμάτια με την επέκταση .ts - MPEG2 Transport Stream.

Ο διακομιστής HTTP δημιουργεί επίσης ένα αρχείο λίστας αναπαραγωγής με την επέκταση .M3U8 (ονομάζεται επίσης manifest), το οποίο χρησιμεύει για την ευρετηρίαση όλων των τμημάτων βίντεο. Αυτό το αρχείο λίστας αναπαραγωγής οδηγεί σε πρόσθετα αρχεία ευρετηρίου για καθεμία από τις υπάρχουσες ιδιότητες εκπομπής. Ακόμα κι αν αποφασίσετε να μεταδώσετε χρησιμοποιώντας μία ποιότητα, θα δημιουργηθεί ένα «μανιφέστο».

Η συσκευή αναπαραγωγής του χρήστη πρέπει να αναγνωρίσει την υποβάθμιση ή τη βελτίωση της ταχύτητας μετάδοσης δεδομένων στο Διαδίκτυο. Όταν συμβεί ένα τέτοιο συμβάν, το πρόγραμμα αναπαραγωγής αποκτά πρόσβαση στο αρχείο μανιφέστου για να προσδιορίσει σε ποια ποιότητα βίντεο θα αλλάξει. Στη συνέχεια, το πρόγραμμα αναπαραγωγής ζητά ένα αρχείο ευρετηρίου για συγκεκριμένη ποιότητα για να φορτώσει το τμήμα του βίντεο στο οποίο σταμάτησε ο θεατής. Όλη αυτή η διαδικασία είναι αόρατη στον χρήστη. Το πρωτόκολλο HLS υποστηρίζει επίσης κλειστούς υπότιτλους,

Επισκόπηση των πρωτοκόλλων ροής

Κάθε ένα από τα πρωτόκολλα που δημιουργήθηκαν προηγουμένως αντιπροσώπευε την εφαρμογή κάποιας καινοτομίας στη ροή πολυμέσων. Υπήρχαν επίσης «πόλεμοι μορφών», όπως HD-DVD έναντι Blu-Ray και Betamax έναντι VHS. Η HLS είναι ο ηγέτης στις διαδικτυακές εκπομπές, αλλά αυτό δεν ίσχυε πάντα και δεν είναι γεγονός ότι θα παραμείνει έτσι και στο μέλλον.

RTMP ή πρωτόκολλο ανταλλαγής μηνυμάτων σε πραγματικό χρόνο, ένα πρωτόκολλο ροής δεδομένων σε πραγματικό χρόνο. Η Macromedia δημιουργήθηκε στα μέσα του 2000 για την παροχή περιεχομένου ήχου και βίντεο. Συχνά ονομάζεται απλά Flash. Η Macromedia αργότερα συγχωνεύθηκε με την Adobe Inc, η οποία συνεχίζει να αναπτύσσει το RTMP ως ημι-ανοικτό πρωτόκολλο.

Την τελευταία δεκαετία, το RTMP ήταν η κυρίαρχη μέθοδος μετάδοσης μέσω Διαδικτύου. Μόνο με την έλευση του HLS το μερίδιό του άρχισε να μειώνεται. Σήμερα, οι περισσότερες διαδικτυακές πλατφόρμες βίντεο λειτουργούν με εισερχόμενη ροή RTMP. Με άλλα λόγια, εκπέμπετε σε RTMP, το οποίο η διαδικτυακή πλατφόρμα βίντεο κωδικοποιεί στη συνέχεια σε HLS και παραδίδει στους τελικούς θεατές. Είναι αλήθεια ότι πολλοί χειριστές CDN αρχίζουν να εγκαταλείπουν την υποστήριξη RTMP - proof

Το πρωτόκολλο ροής επόμενης γενιάς που αναπτύχθηκε από την Adobe ονομάζεται HDS - HTTP Dynamic Streaming. Είναι συμβατό με το πρόσθετο αναπαραγωγής Flash, αλλά η συχνότητα χρήσης του είναι πολύ χαμηλότερη από το κοινό HLS.

Για συσκευές και προγράμματα περιήγησης που υποστηρίζουν Flash, το HDS θα καλύτερη επιλογή. Παρέχει ελάχιστη καθυστέρηση κατά τη μετάδοση, όπως και το HLS, διαιρεί τα αρχεία πολυμέσων σε μικρά τμήματα, υποστηρίζει κρυπτογράφηση και DRM.

Microsoft Smooth Streaming

Η Microsoft έχει δημιουργήσει το δικό της πρωτόκολλο διαδικτυακής ροής, το Microsoft Smooth Streaming. Το MSS χρησιμοποιεί επίσης προσαρμοστικό ρυθμό μετάδοσης bit για την παροχή περιεχομένου στην καλύτερη δυνατή ποιότητα. Η προσαρμοστική μετάδοση bitrate εισήχθη το 2008. Το MSS χρησιμοποιήθηκε για τη μετάδοση των Θερινών Ολυμπιακών Αγώνων του 2008. Κύριος χρήστηςαυτού του τύπου η μετάδοση είναι μια πλατφόρμα XBox One

. Ταυτόχρονα, το MSS είναι ένα από τα λιγότερο δημοφιλή πρωτόκολλα σήμερα.

MPEG-DASH

Μία από τις πιο πρόσφατες σημαντικές λύσεις στον τομέα των πρωτοκόλλων ροής είναι το MPEG-DASH, όπου το DASH σημαίνει Dynamic Adaptive Streaming μέσω HTTP.

Το πλεονέκτημα του MPEG-DASH είναι ότι αναγνωρίζεται ως ενιαίο διεθνές πρότυπο για μετάδοση μέσων μέσω HTTP. Προς το παρόν, δεν είναι ακόμη ευρέως διαδεδομένο και δεν το υποστηρίζουν όλοι οι ραδιοτηλεοπτικοί φορείς. Όμως, κατά γενική ομολογία, σε λίγα χρόνια αυτό το συγκεκριμένο πρότυπο θα γίνει το πιο δημοφιλές πρωτόκολλο εκπομπής.

Το MPEG-DASH δεν εξαρτάται από τον τύπο του κωδικοποιητή, μπορείτε να χρησιμοποιήσετε οποιοδήποτε από αυτά για να στείλετε μέσα χρησιμοποιώντας αυτό το πρωτόκολλο - H.264, HEVC/H.265, VP10

Πότε να χρησιμοποιήσετε το HLS για διαδικτυακή μετάδοση

Συνιστούμε να χρησιμοποιείτε το HLS όλη την ώρα. Είναι το πιο σύγχρονο και ευρέως υποστηριζόμενο πρωτόκολλο ροής πολυμέσων. Δεν μπορείτε να κάνετε χωρίς αυτό εάν θέλετε να μεταδώσετε σε κινητές συσκευές. Η υποστήριξη εγγενούς προγράμματος αναπαραγωγής HTML5 και, φυσικά, ο προσαρμοστικός ρυθμός bit εξασφαλίζουν βέλτιστη ποιότητα προβολής.

Για να οργανώσετε διαδικτυακές εκπομπές σε πραγματικό χρόνο, βίντεο κατ' απαίτηση (vod), καθώς και για εγγραφή ροών βίντεο, μπορείτε να χρησιμοποιήσετε το nginx μαζί με τη μονάδα nginx-rtmp-module.

Διακομιστές πολυμέσων Σήμερα υπάρχουν αρκετοί δημοφιλείς διακομιστές πολυμέσων, για τους οποίους μπορείτε να διαβάσετε περισσότερα σε έναν από αυτούς. Απαιτούνται διακομιστές πολυμέσων για τη δημιουργία διαδικτυακών εκπομπών σε πραγματικό χρόνο.Υπάρχουν και επί πληρωμή και

δωρεάν μέσα ενημέρωσης

διακομιστές που περιλαμβάνουν διάφορες λειτουργίες. Σήμερα θα μιλήσουμε για μια δωρεάν και αρκετά καλή λύση. Ngnix-rtmpΗ βασική λειτουργικότητα ενός διακομιστή πολυμέσων μπορεί επίσης να υλοποιηθεί χρησιμοποιώντας ένα δωρεάν

Έτσι, χρησιμοποιώντας το Ngnix-rtmp (διακομιστής ιστού Ngnix + λειτουργική μονάδα Ngnix-rtmp), μπορείτε να οργανώσετε τη μετάδοση RTMP και HLS σε συσκευές χρήστη. Ένας συνοπτικός πίνακας πρωτοκόλλων και συσκευών που τα υποστηρίζουν μπορείτε να βρείτε στο άρθρο. Επίσης, σε ένα από τα μελλοντικά μου άρθρα, σκοπεύω να φτιάξω έναν συγκριτικό πίνακα της λειτουργικότητας της μονάδας Ngnix-rtmp-module και άλλων διακομιστών πολυμέσων.

Διαδικτυακή μετάδοση μέσω πρωτοκόλλου HLS

Σήμερα θα δούμε πώς να οργανώσουμε μια απλή μετάδοση με προσαρμοστικό bitrate χρησιμοποιώντας το πρωτόκολλο HLS χρησιμοποιώντας τη μονάδα Nginx-rtmp. Πρώτα από όλα πρέπει να κατεβάσουμε πηγαίους κώδικεςΔιακομιστής ιστού Nginx από τον επίσημο ιστότοπο. Όλες οι εντολές που παρουσιάζονται παρακάτω εκτελέστηκαν σε Linux.

  • wgethttp://nginx.org/download/nginx-1.4.1.tar.gz

Εξαγωγή αρχείων από το αρχείο.

  • tar -zxvf nginx-1.4.1.tar.gz

Κατεβάστε το αρχείο zip με τα αρχεία προέλευσης της ενότητας nginx-rtmp-module και εξαγάγετε τα αρχεία από το αρχείο.

  • wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

Τώρα πρέπει να μεταγλωττίσουμε το nginx με το module nginx-rtmp-module , για να το κάνετε αυτό, κατά τη διαμόρφωση του nginx, πρέπει να καθορίσετε στην επιλογή --add-module θέση των αρχείων πηγής nginx-rtmp-module , και είναι επίσης απαραίτητο να υποδειχθεί πρόσθετη επιλογή με-http_ssl_module .

./configure --add-module=/home/nginx/nginx-rtmp-module-master --with-http_ssl_module

κάντε εγκατάσταση

  • Εάν όλα πήγαν χωρίς σφάλματα, μπορείτε να ξεκινήσετε τη ρύθμιση του διακομιστή. Από προεπιλογή, ο διακομιστής είναι εγκατεστημένος στον κατάλογο/usr/local/nginx . Το αρχείο διαμόρφωσης διακομιστή nginx.conf βρίσκεται στον κατάλογο/usr/local/nginx/conf . Ας ρίξουμε μια πιο προσεκτική ματιά στην ενότητα rtmp:server του αρχείου διαμόρφωσης. Η παράμετρος listen καθορίζει τη θύρα στην οποία ο διακομιστής θα δέχεται αιτήματα rtmp.
  • Στη συνέχεια ανοίγουμε την ενότητα για τη ρύθμιση της εφαρμογής testlive. Εδώ υποδεικνύουμε ότι έχουμε μια ζωντανή ροή - την παράμετρο live on, ενεργοποιούμε την υποστήριξη για το πρωτόκολλο hls για αυτήν την εφαρμογή - την παράμετρο hls on.
  • Χρησιμοποιώντας την παράμετρο hls_path ορίζουμε τον κατάλογο στον οποίο θα βρίσκονται τα κομμάτια (κομμάτια) της ροής. Προκειμένου τα κομμάτια (κομμάτια) για κάθε ροή βίντεο να βρίσκονται σε ξεχωριστό κατάλογο, πρέπει να συμπεριλάβετε την οδηγία hls_nested on .
  • Στη συνέχεια, χρησιμοποιώντας την παράμετρο επιτρέψτε τη δημοσίευση σας επιτρέπουμε να δημοσιεύετε ροές από τον υπολογιστή σας και χρησιμοποιώντας την παράμετρο άρνηση δημοσίευσης όλων Απαγορεύουμε σε όλους τους άλλους να δημοσιεύουν βίντεο.
  • Τώρα ας δούμε την ενότηταhttp:διακομιστής . Στην παράμετρο ακούω είναι απαραίτητο να υποδείξετε σε ποια θύρα θα λάβει ο διακομιστήςhttp αιτήματα. Καθορίζουμε τη θύρα 8080. Και από το παράδειγμα αρχείου ρυθμίσεων μετακινήστε την ενότηταhttp:server:location/hls . Δείτε περισσότερα λεπτομερείς πληροφορίεςγια όλες τις οδηγίες του αρχείου διαμόρφωσης, μπορείτε να μεταβείτε στη διεύθυνση:https://github.com/arut/nginx-rtmp-module/wiki/Directives.
  • Ήρθε η ώρα να ξεκινήσετε τον διακομιστή. Για να το κάνετε αυτό, πρέπει να μεταβείτε στον κατάλογο /usr/local/nginx/bin και εκτελέστε την εντολή ./nginx .

Τώρα ας δούμε ένα παράδειγμα. Στέλνουμε τρεις ροές βίντεο στον διακομιστή:

  • δοκιμή 1με bitrate 256 kbit/s,
  • τεστ2με bitrate 512 kbit/s,
  • δοκιμή 3με bitrate 1024 kbps.

Στόχος μας είναι ένας πελάτης που χρησιμοποιεί το πρωτόκολλο HLS (συσκευές: Mac, iPad, iPhone) να μπορεί να εναλλάσσεται δυναμικά μεταξύ ροών, ανάλογα με την ποιότητα της σύνδεσης στο Διαδίκτυο. Για να το κάνουμε αυτό χρειαζόμαστε στον κατάλογο /usr/local/nginx/html δημιουργήστε ένα αρχείο με την επέκταση m3u8 , Για παράδειγμα playlist.m3u8 , με το ακόλουθο περιεχόμενο:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=256000,RESOLUTION=640×480

hls/test1/index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=512000,RESOLUTION=640×480

hls/test2/index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1024000,RESOLUTION=640×480

hls/test3/index.m3u8

Δείτε την εκπομπή

Για να προβάλετε ροές βίντεο, πρέπει να ενσωματώσετε τον ακόλουθο κώδικα στην ιστοσελίδα του ιστότοπου.

- Διεύθυνση IP του διακομιστή σας nginx.

[όνομα playlist]- το όνομα του αρχείου που δημιουργήθηκε στην προηγούμενη παράγραφο (playlist.m3u8).

Παρακάτω είναι ένα παράδειγμα ενός απλού αρχείου διαμόρφωσης nginx.conf.

worker_processes 1;

διακομιστής (

ακούστε 1935;

ζωντανή δοκιμή εφαρμογής (

Ζήσε επάνω?

hls σε?

hls_path /tmp/hls;

hls_nested on;

επιτρέψτε τη δημοσίευση 10.10.146.148;

άρνηση δημοσίευσης όλων

διακομιστής (

ακούστε 8080?

όνομα_διακομιστή rtmp_test;

σύνολο χαρακτήρων utf-8;

τοποθεσία/(

root html?

ευρετήριο index.html index.htm;

τοποθεσία /hls (

τύποι (

application/vnd.apple.mpegurl m3u8;

ψευδώνυμο /tmp/hls;

Σύναψη

Αυτό το άρθρο γράφτηκε και δημοσιεύτηκε από κοινού με τον συνάδελφό μου Evgeniy Petrov. Χρησιμοποιούμε αυτήν την ενότητα (Ngnix-rtmp) σε διαφορετικά έργα. Αν κάποιος έχει οποιεσδήποτε ερωτήσεις σχετικά με τον διακομιστή Ngnix-rtmp, Wowza, γράψτε. Εάν χρειάζεται να διαμορφώσετε κάτι ή να λάβετε συμβουλές σχετικά με διακομιστές πολυμέσων και συστήματα πολυμέσων, μπορείτε επίσης να επικοινωνήσετε μαζί μου και την ομάδα μας μέσω.

Παροχή υπηρεσιών IPTVμέσω Διαδικτύου και τοπικά δίκτυα υπολογιστώναποκτά ολοένα και πιο διαδεδομένες μορφές. Δεν υπάρχουν σχεδόν μεγάλοι πάροχοι στις χώρες της ΚΑΚ που να μην μεταδίδουν βίντεο μέσω multicastστα τοπικά τους δίκτυα, δηλαδή στην παροχή της υπηρεσίας IPTV. Όμως η παροχή τηλεοπτικών υπηρεσιών εκτός αυτής τοπικό δίκτυοσχετίζεται με κάποιο κόστος υλικού και τη δυσκολία εξασφάλισης της απαιτούμενης ποιότητας εκπομπής.

Ζωντανή ροή HTTPεπίσης γνωστό ως H.L.S., είναι ένα πρωτόκολλο επικοινωνίας που υλοποιείται από την Apple. Η ιδιαιτερότητά του είναι ότι η συνολική ροή χωρίζεται σε μια ακολουθία μικρών αρχείων λήψης, κάθε λήψη κατεβάζει ένα μικρό τμήμα της ροής μεταφοράς. Όταν αναπαράγεται μια ροή, ο πελάτης μπορεί να επιλέξει από πολλές διαφορετικές εναλλακτικές ροές που περιέχουν το ίδιο υλικό, ηχογραφημένο με διαφορετικούς ρυθμούς bit, επιτρέποντάς του να προσαρμοστεί στον διαθέσιμο ρυθμό μετάδοσης bit. Στην αρχή μιας περιόδου σύνδεσης ροής, φορτώνεται μια βελτιωμένη λίστα αναπαραγωγής M3U (m3u8) που περιέχει μεταδεδομένα για τις διάφορες υποροές που είναι διαθέσιμες. Επειδή τα αιτήματα χρησιμοποιούν μόνο τυπικές λειτουργίες HTTP, η Ζωντανή ροή HTTP μπορεί να παρακάμψει οποιοδήποτε τείχος προστασίας ή διακομιστή μεσολάβησης που επιτρέπει την τυπική κυκλοφορία HTTP σε αντίθεση με τα πρωτόκολλα UDP όπως το RTP.

Το HLS βασίζεται σε HTTP. Το HLS ορίζει επίσης έναν τυπικό μηχανισμό κρυπτογράφησης που χρησιμοποιεί AES και μια μέθοδο διανομής κλειδιού ασφαλείας χρησιμοποιώντας cookies HTTPS ή HTTP, τα οποία μαζί παρέχουν απλό σύστημαπροστασία πνευματικών δικαιωμάτων.

Πώς λειτουργεί το HLS;

Τώρα ας μάθουμε ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα αυτής της τεχνολογίας. Τα πλεονεκτήματα είναι αναμφισβήτητα και προφανή. Αυτό είναι, πρώτα απ 'όλα, η προσαρμοστικότητα της ταχύτητας μετάδοσης δεδομένων στις ιδιότητες της γραμμής και της συσκευής λήψης και, δεύτερον, ενσωματωμένοι μηχανισμοί προστασίας πνευματικών δικαιωμάτων. Τρίτον, δεν απαιτείται δρομολογητής με περιορισμό πλάτους ροή πολλαπλής διανομήςμέσω WI_FI, το οποίο θα βοηθούσε στην αποφυγή της απορρόφησης ολόκληρου του πλάτους του καναλιού από ροές πολλαπλής εκπομπής στην περίπτωση μετάδοσης τηλεόρασης IP με χρήση πολλαπλής εκπομπής. Επίσης δεν απαιτείται πρόσθετη συσκευήμε λειτουργία Διακομιστής UDPγια να μετατρέψετε μια ροή πολλαπλής μετάδοσης σε HTTP, η οποία συχνά απαιτείται για φορητές συσκευές, αν και επηρεάζει το φορτίο υλικού στο δρομολογητή ή σε άλλη συσκευή που εκτελεί τη λειτουργία διακομιστή μεσολάβησης UDP στο τοπικό δίκτυο του συνδρομητή. Το πρότυπο HLS έχει γίνει αρκετά διαδεδομένο και υποστηρίζεται από σχεδόν όλα τα σύγχρονα προγράμματα αναπαραγωγής βίντεο και αποκωδικοποιητές IPTV.

Αποκωδικοποιητής IPTV

Ένα σημαντικό μειονέκτημα είναι ότι οι συνδρομητές διαθέτουν αποκωδικοποιητές πολυμέσων και αποκωδικοποιητές smart-TV με ξεπερασμένο υλικολογισμικό ή ξεπερασμένους σχεδιασμούς που δεν υποστηρίζουν πρότυπα HLS ή δεν τους υποστηρίζουν σωστά. Επίσης, ένα από τα προβλήματα είναι η αδυναμία σωστής επιλογής της ποιότητας για σταθερή μετάδοση σε συνθήκες αλλαγής των χαρακτηριστικών της γραμμής σε χρονικά διαστήματα μικρότερα από τη διάρκεια του ζητούμενου τμήματος βίντεο.

Η δημιουργία τεχνικά άρτιων εφαρμογών είναι συνήθως μια εξαιρετικά δύσκολη και χρονοβόρα εργασία. Ταυτόχρονα, χρήσιμες πληροφορίες είναι συχνά διάσπαρτες σε πολλές πηγές. Αυτό ισχύει, μεταξύ άλλων, για την ανάπτυξη εφαρμογών βίντεο για iOS. Αυτό το άρθρο περιέχει τις πιο σημαντικές και χρήσιμες πληροφορίες που σας επιτρέπουν να χρησιμοποιήσετε αποτελεσματικά το πλήρες εύρος των δυνατοτήτων ζωντανής ροής HTTP, καθώς και μια λίστα με κύριες πηγές. Αυτά τα υλικά θα είναι χρήσιμα σε όλους τους αναγνώστες που ενδιαφέρονται να δημιουργήσουν υπηρεσίες βίντεο υψηλής ποιότητας και φιλικές προς το χρήστη.

Η αύξηση της ευκολίας και της διαδραστικότητας των υπηρεσιών βίντεο επιτυγχάνεται μέσω της γρήγορης εκκίνησης και της επαναφοράς, καθώς και της απουσίας αποθήκευσης στην προσωρινή μνήμη. Για να επιτύχετε το καλύτερο αποτέλεσμα, προτείνεται το ακόλουθο σύνολο ενεργειών.

  • Ξεκινήστε με χαμηλή ποιότητα βίντεο.Για να ξεκινήσετε ένα βίντεο, απαιτείται τουλάχιστον ένα κομμάτι. Αντίστοιχα, όσο μικρότερο είναι το μέγεθος ενός κομματιού, τόσο πιο γρήγορα θα ξεκινήσει το βίντεο. Η μείωση του ρυθμού bit της αρχικής ροής και η μείωση της διάρκειας του κομματιού οδηγεί σε ταχύτερη εκκίνηση βίντεο. Συνιστούμε διάρκεια τεμαχίου 4-8 δευτερολέπτων και αρχικό ρυθμό bit 200-300 Kbps. Έτσι, για να ξεκινήσει η αναπαραγωγή του βίντεο, ο χρήστης θα χρειαστεί να κατεβάσει το πολύ 300 KB.
  • Βελτιστοποίηση λίστας αναπαραγωγής.Οι λίστες αναπαραγωγής μπορούν να καταλάβουν σημαντικό μέρος της συνολικής ροής δεδομένων, ειδικά με μικρά μεγέθη κομματιών και περιεχόμενο μεγάλης διάρκειας (αρκετές ώρες). Στις περισσότερες περιπτώσεις, κατά τη μεταφορά λιστών αναπαραγωγής σε πρόγραμμα αναπαραγωγής βίντεο, συνιστάται η αρχειοθέτησή τους.
  • Κουφώματα κλειδιών.Είναι επιθυμητό να υπάρχει τουλάχιστον ένα πλαίσιο IDR ανά τμήμα, κατά προτίμηση στην αρχή του τμήματος. Επιπλέον, κατά τη μεταφορά βίντεο σε δίκτυα κινητής τηλεφωνίαςΣυνιστάται η δημιουργία βασικών καρέ τουλάχιστον μία φορά κάθε 3 δευτερόλεπτα.
  • TS Γενικά.Το HTTP LS χρησιμοποιεί το MPEG TS ως κοντέινερ, επομένως είναι πολύ σημαντικό να ελαχιστοποιήσετε τα γενικά έξοδα TS (θα πρέπει να είναι μικρότερα από 10% ακόμη και με χαμηλή ποιότητα βίντεο). Σε αυτήν την περίπτωση, αξίζει να μετρήσετε τους πραγματικούς ρυθμούς μετάδοσης bit χρησιμοποιώντας τις χωματερές κυκλοφορίας και να βελτιστοποιήσετε τους χρησιμοποιούμενους συσκευαστές (segmenters).
  • Παράμετρος διάρκειας στόχου στη λίστα αναπαραγωγής. Αυτή η παράμετροςεπηρεάζει τον χρόνο εκκίνησης, αλλά η Apple συνιστά τη ρύθμιση του στα 10 δευτερόλεπτα, επειδή οι χαμηλότερες τιμές αυξάνουν την πιθανότητα αποθήκευσης στην προσωρινή μνήμη, ειδικά σε δίκτυα κινητής τηλεφωνίας με υψηλή καθυστέρηση. Επίσης, δεν συνιστάται η δημιουργία τμημάτων με διάρκεια μεγαλύτερη των 20 δευτερολέπτων.
  • Δυναμικός ρυθμός bit.Ο προσαρμοστικός μηχανισμός ροής που είναι ενσωματωμένος στο iOS λειτουργεί βέλτιστα σε επακριβώς καθορισμένους ρυθμούς bit στη λίστα αναπαραγωγής παραλλαγής (λαμβάνοντας υπόψη την επισκεψιμότητα της ίδιας της λίστας αναπαραγωγής). Σε αυτήν την περίπτωση, για ροές με διαφορετικούς ρυθμούς bit, πρέπει να καθορίσετε μια τιμή πιο κοντά στο μέγιστο. Διαφορετικά, είναι πιθανές λανθασμένες αποφάσεις σχετικά με την αλλαγή της τρέχουσας ροής βίντεο. Οι γειτονικοί ρυθμοί bit πρέπει να διαφέρουν στην ταχύτητα κατά 1,5 - 2 φορές.
  • Ροές μόνο ήχου.Ο κωδικοποιητής ήχου HE-AAC είναι σημαντικά πιο αποδοτικός και υποστηρίζεται από τις περισσότερες συσκευές. Η παράδοση καναλιών μόνο ήχου συνιστάται να υλοποιείται με χρήση MPEG Elementary Stream και όχι MPEG Transport Stream (σημαντικά μικρότερη επιβάρυνση).

Καθώς αναπτύσσετε το πρόγραμμα αναπαραγωγής βίντεο, μπορείτε να λαμβάνετε χρήσιμες πληροφορίες από το αρχείο καταγραφής ζωντανής ροής HTTP (accessLog). Περιέχει πληροφορίες για το τι συνέβη αυτόματη εναλλαγή, ποιοι ρυθμοί bit χρησιμοποιήθηκαν κ.λπ. Λεπτομέρειες σχετικά με τις πληροφορίες που είναι διαθέσιμες στο αρχείο καταγραφής. Με βάση αυτά τα δεδομένα, μπορείτε να συλλέξετε δεδομένα ανάλυσης βίντεο για τους χρήστες σας.

Πρόσθετες συστάσεις
Στην περίπτωση διαδικτυακών εκπομπών βίντεο, η προσωρινή αποθήκευση είναι επίσης δυνατή λόγω καθυστερήσεων στο CDN, καθώς και σε περιπτώσεις όπου ο χρόνος ενημέρωσης της λίστας αναπαραγωγής είναι πολύ μικρός και ο διακομιστής δεν έχει χρόνο να δημιουργήσει τμήματα εγκαίρως. Για τη βελτιστοποίηση του μηχανισμού επανατύλιξης, συνιστάται η χρήση μη ακέραιων (πραγματικών) τιμών διάρκειας τμήματος: διαφορετικά μπορεί να συσσωρευτεί σφάλμα.

Εάν η αίτησή σας προορίζεται να χρησιμοποιηθεί σε διαφορετικές συσκευές, στη λίστα μπορείτε να καθορίσετε διαφορετική ποιότητα βίντεο σε διαφορετικές αναλύσεις οθόνης. Με αυτόν τον τρόπο, μπορείτε να εξάγετε διαφορετικά βίντεο σε ένα iPad με οθόνη Retina και σε ένα σχετικά παλιό iPhone.

Το πρωτόκολλο HTTP Live Streaming παρέχει επίσης μηχανισμούς για τη διασφάλιση της ανοχής σφαλμάτων (καθορίζοντας τις πηγές εφεδρικού βίντεο). Αυτή η δυνατότητα μπορεί να είναι χρήσιμη για τη βελτίωση της αξιοπιστίας των υπηρεσιών σας.

Πηγές γνώσης
Μια σύντομη λίστα υλικών σχετικά με τη χρήση της Ζωντανής ροής HTTP σε εφαρμογές βίντεο:
Πρόχειρο Ζωντανής ροής HTTP
Συχνές ερωτήσεις για ζωντανή ροή HTTP
Βέλτιστες πρακτικές για το HLS

Τέλος, αξίζει να σημειωθεί ότι δωρεάν τεχνικά βίντεοσυνεδρίες από το WWDC 2012, όπου υπήρχαν επίσης πολλά χρήσιμες πληροφορίες, ειδικότερα - σχετικά με την εργασία με βίντεο και τη χρήση ζωντανής ροής HTTP.