Δημοσίευση ροής κάμερας: RTSP και HLS δεν είναι το ίδιο άκρο
Ο έλεγχος συνεδρίας RTSP και η παράδοση HLS χρειάζονται διαφορετικά δημόσια άκρα, ακόμη και όταν και τα δύο φτάνουν στην ίδια κάμερα μέσω VPN. Επιλέξτε πρώτα το μοντέλο θεατή.
Ανοίγετε μία θύρα της κάμερας, στρέφετε ένα πρόγραμμα αναπαραγωγής προς αυτήν και υποθέτετε ότι το πρόβλημα του διαδικτύου λύθηκε. Μετά ένα τηλέφωνο δεν μπορεί να την αναπαραγάγει, ένα πρόγραμμα περιήγησης δεν μπορεί να την αναπαραγάγει, και η σελίδα διαχείρισης της κάμερας απέχει μία λανθασμένα πληκτρολογημένη διαδρομή από το δημόσιο άκρο. Το μοντέλο παράδοσης που επιλέξατε, RTSP ή HLS, καθορίζει το μεγαλύτερο μέρος αυτού πριν γραφτεί κανένας κανόνας τείχους προστασίας. Το VPN παρέχει μόνο το ιδιωτικό σκέλος.
Το VPN διορθώνει τη διαδρομή της πηγής, όχι τη διαδρομή του θεατή
Ένα VPS συνδεδεμένο στο τοπικό δίκτυο της κάμερας μέσω σήραγγας μπορεί να φτάσει την κάμερα στην ιδιωτική διεύθυνσή της, και αυτό είναι πραγματικά χρήσιμο. Σημαίνει ότι η κάμερα δεν χρειάζεται δική της εισερχόμενη θύρα και ότι ο οικιακός δρομολογητής μένει κλειστός. Δεν σας λέει τι γλώσσα θα μιλήσει ένας θεατής. Ένα πρόγραμμα αναπαραγωγής υπολογιστή, ένα πρόγραμμα περιήγησης, ένα τηλέφωνο και μια έξυπνη τηλεόραση υποστηρίζουν διαφορετικά πρωτόκολλα, και το καθένα έχει τις δικές του προσδοκίες για TLS, έλεγχο ταυτότητας και κωδικοποιητές.
Να μια υπόθεση που αξίζει να απορρίψετε: η δημοσίευση θα σήμαινε να κάνετε την πηγή προσβάσιμη. Η δημοσίευση στην πραγματικότητα σημαίνει να δίνετε σε ένα καθορισμένο κοινό έναν υποστηριζόμενο τρόπο να καταναλώνει το μέσο. Μια δημοσιευμένη ροή έχει μορφή, κοινό και διαπιστευτήριο· μια προσβάσιμη κάμερα δεν έχει κανένα από αυτά. Η προσβασιμότητα είναι το κομμάτι που λύνει η σήραγγα, και το σημείο εισόδου του θεατή είναι το κομμάτι που πρέπει ακόμη να σχεδιάσετε.
Το RTSP είναι διαπραγμάτευση, όχι μία θύρα
Το RTSP μεταφέρει τον έλεγχο συνεδρίας: ένας πελάτης ζητά μια περιγραφή, ρυθμίζει ένα ή περισσότερα ίχνη μέσων και μετά αναπαράγει. Η μεταφορά του ίδιου του μέσου διαπραγματεύεται κατά τη διάρκεια αυτής της ρύθμισης, γι' αυτό το πρωτόκολλο δεν περιγράφεται καλά από μία προωθημένη θύρα TCP. Αυτή η διαπραγμάτευση είναι το κομμάτι που οι άνθρωποι παραβλέπουν όταν συγκρίνουν κανόνες τείχους προστασίας.
Ανάλογα με τα τελικά σημεία, το RTP μπορεί να φτάνει σε ξεχωριστές θύρες UDP ή να είναι παρεμβαλλόμενο στη σύνδεση ελέγχου. Ένα ρελέ που προωθεί μόνο 554 και υποθέτει ότι τα υπόλοιπα θα δουλέψουν συνήθως παράγει μια συνεδρία που συνδέεται, αναφέρει ένα ίχνος και μετά δεν δείχνει τίποτα. Ελέγξτε τη μεταφορά που διαπραγματεύεται πραγματικά η κάμερά σας πριν γράψετε κανόνες γι' αυτήν. Μια καταγραφή στην ιδιωτική πλευρά το απαντά σε ένα λεπτό, και το μάντεμα κοστίζει ένα βράδυ.
Για ένα μικρό, γνωστό κοινό με συμβατά προγράμματα αναπαραγωγής, ένα σκόπιμα ρυθμισμένο ρελέ RTSP μπορεί να είναι η σωστή απάντηση. Περιορίστε από ποια πηγή μπορεί να τραβά και απαιτήστε έλεγχο ταυτότητας στο ρελέ. Καταγράψτε τα προγράμματα που δοκιμάσατε, γιατί μια ροή RTSP που λειτουργεί στο VLC μπορεί ακόμη να αποτύχει σε ένα πρόγραμμα περιήγησης.
Το HLS είναι λίστα αναπαραγωγής συν πόρους
Ένας θεατής HLS λαμβάνει μια λίστα αναπαραγωγής και μετά λαμβάνει τα τμήματα μέσων που ονομάζει αυτή η λίστα. Η προδιαγραφή HLS ορίζει αυτό το μοντέλο πόρων, και η σημαντική λειτουργική λεπτομέρεια είναι ότι οι λίστες αναπαραγωγής παραπέμπουν σε άλλα URL. Οι σχετικές αναφορές επιλύονται ως προς τη θέση της λίστας, οπότε ένα διακομιστής μεσολάβησης που ξαναγράφει διαδρομές πρέπει να τις ξαναγράφει με συνέπεια.
Αν η κάμερα σερβίρει ήδη χρησιμοποιήσιμο HLS, ένα δημόσιο frontend μπορεί να προωθεί αυτά τα αιτήματα λίστας και τμημάτων μέσα από τη σήραγγα. Προσέξτε τα κλειδιά, τις ανακατευθύνσεις και τα URL που παράγει η εφαρμογή. Κάθε απόλυτο URL που δείχνει σε ιδιωτικό κεντρικό υπολογιστή σπάει τη στιγμή που ένας θεατής εκτός τοπικού δικτύου το ακολουθεί. Οι σχετικές διαδρομές είναι αυτές που επιβιώνουν από την επανεγγραφή του διακομιστή μεσολάβησης, γι' αυτό προτιμήστε τις όπου ελέγχετε την παραγόμενη έξοδο.
Αν η κάμερα μιλά μόνο RTSP, κάτι πρέπει να μετατρέψει την πηγή στη μορφή του θεατή. Η επανασυσκευασία και η μετακωδικοποίηση είναι διαφορετικές εργασίες: η επανασυσκευασία διατηρεί τον κωδικοποιητή, ενώ η μετακωδικοποίηση τον επανακωδικοποιεί για συμβατότητα, και μόνο η δεύτερη κοστίζει σοβαρή επεξεργαστική ισχύ. Κανένα από τα δύο δεν γίνεται απαραίτητο μόνο και μόνο επειδή υπάρχει VPN στη διαδρομή.
Σχεδιάστε τη ζεύξη ανόδου με βάση το πού γίνεται η διανομή. Μία ιδιωτική λήψη που τροφοδοτεί μια δημόσια υπηρεσία μέσων συμπεριφέρεται πολύ διαφορετικά από κάθε θεατή που τραβά τη δική του ροή μέσα από τη σήραγγα. Το δεύτερο μοτίβο συνήθως καταλήγει σε κορεσμένη οικιακή σύνδεση και σε κάμερα που φαίνεται να αποτυγχάνει τυχαία.
Βάλτε τον έλεγχο ταυτότητας στο άκρο που δημοσιεύετε
Το TLS, ο έλεγχος ταυτότητας θεατών και η καταγραφή πρόσβασης ανήκουν στο δημόσιο σημείο εισόδου, όχι στην κάμερα. Αυτό κρατά τα διαπιστευτήρια της κάμερας χωριστά από τα διαπιστευτήρια της ροής. Σας δίνει επίσης ένα σημείο για ανάκληση πρόσβασης όταν ένα μέλος του κοινού φεύγει. Το να βάλετε αυτούς τους ελέγχους στην κάμερα σημαίνει αντ' αυτού ότι κάθε αλλαγή κοινού γίνεται διαχειριστική αλλαγή σε μια συσκευή που δεν θα έπρεπε ποτέ να είναι δημόσια προσβάσιμη.
Κρατήστε το VPN και τα δικαιώματα διαχείρισης της κάμερας χωριστά από τη διαδρομή δημοσίευσης. Ένα VPS που μπορεί να φτάσει τη διεπαφή ιστού της κάμερας για να τραβήξει ροή δεν θα έπρεπε να είναι και το μηχάνημα που εκθέτει αυτή τη διεπαφή. Το κοινό δεν θα έπρεπε ποτέ να μάθει τη διεύθυνση της κάμερας.
Στη συνέχεια επαληθεύστε τα δύο άκρα που πραγματικά φτιάξατε αντί να υποθέσετε ότι η αλυσίδα λειτουργεί:
$ ffprobe -v error -rtsp_transport tcp rtsp://10.50.0.9:554/stream1
$ curl -sI https://stream.example.net/live/index.m3u8
HTTP/2 200
content-type: application/vnd.apple.mpegurl
Ένας επιτυχημένος έλεγχος της ιδιωτικής πηγής και μια επιτυχημένη λήψη λίστας στο δημόσιο άκρο αποδεικνύουν διαφορετικά μισά του σχεδιασμού. Δοκιμάστε τα χωριστά. Η αναπαραγωγή από τον ίδιο τύπο πελάτη που χρησιμοποιεί το κοινό σας είναι η μόνη δοκιμή που καλύπτει ολόκληρη την αλυσίδα.
Αυτό που καταλήγετε να έχετε είναι μια αλυσίδα με σκοπό σε κάθε κρίκο: ιδιωτική πηγή, περιορισμένη λήψη, επιλεγμένη συσκευασία, εξουσιοδοτημένη είσοδος θεατή. Κανένας από αυτούς τους κρίκους δεν είναι προαιρετικός, και κανένας δεν δημιουργείται ανοίγοντας μια θύρα.