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

Πρόκειται για μια υπάρχουσα σελίδα ASP.NET που αναπαράγει πηγή HLS όπως http://10.5.5.9:8080/live/stream.m3u8, που είναι μια ενδεικτική ιδιωτική διεύθυνση. Δύο διατάξεις δουλεύουν· μία από αυτές πιθανότατα δεν είναι αυτή που φτιάξατε.

Μύθος: μια σελίδα που φορτώνει αποδεικνύει τη διαδρομή των μέσων

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

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

Τι ζητά η λίστα αναπαραγωγής στη συνέχεια

Το RFC 8216 διαχωρίζει τις λίστες αναπαραγωγής μέσων, που απαριθμούν τμήματα, από τις κύριες λίστες αναπαραγωγής, που απαριθμούν άλλες λίστες, και επιλύει τα σχετικά URI ως προς το URI της λίστας που τα περιέχει. Αυτός ο κανόνας είναι το μέρος που οι άνθρωποι προσπερνούν. Η επιτυχής λήψη ενός αρχείου .m3u8 δεν είναι δοκιμή αναπαραγωγής, γιατί το αρχείο που κατεβάσατε είναι ευρετήριο, όχι τα μέσα.

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

Άμεση θέαση: ο θεατής χρειάζεται τη διαδρομή

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

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

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

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

Περιορίστε την πηγή και τις επιτρεπόμενες διαδρομές σε αυτό το μέτωπο. Ένα αυθαίρετο URL που δίνει ο χρήστης μετατρέπει έναν χρήσιμο μεσολαβητή σε απεριόριστο ανακτητή του εσωτερικού σας δικτύου, που είναι πολύ χειρότερο πρόβλημα από μια ροή που δεν παίζει. Βάλτε την προέλευση και το πρόθεμα διαδρομής σε λίστα επιτρεπομένων αντί να επικυρώνετε τη συμβολοσειρά εκ των υστέρων.

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

Ελέγξτε την αλυσίδα, όχι το URL

Εκτελέστε τους ελέγχους από το συστατικό που θα κάνει πραγματικά κάθε αίτημα και αντιμετωπίστε κάθε βήμα ως δικό του αποτέλεσμα:

curl -s http://10.5.5.9:8080/live/stream.m3u8
curl -s -o /dev/null -w '%{http_code}\n' http://10.5.5.9:8080/live/segment-000123.ts

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

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

Σχετικά άρθρα