Kaameravoo avaldamine: RTSP ja HLS ei ole sama serv
RTSP seansijuhtimine ja HLS-edastus vajavad erinevaid avalikke servi, isegi kui mõlemad jõuavad VPN-i kaudu sama kaamerani. Vali esmalt vaatajamudel.
Sa avad ühe kaamerapordi, suunad mängija selle poole ja eeldad, et internetiprobleem on lahendatud. Siis ei saa telefon seda esitada, brauser ei saa seda esitada, ja kaamera haldusleht asub avalikust servast vaid ühe valesti trükitud tee kaugusel. Valitud edastusmudel, RTSP või HLS, otsustab suurema osa sellest enne, kui ükski tulemüürireegel on kirjutatud. VPN annab ainult privaatse lõigu.
VPN parandab allika tee, mitte vaataja teed
VPS, mis on tunneliga kaamera kohtvõrku ühendatud, pääseb kaamerale ligi selle privaatse aadressi kaudu, ja see on tõesti kasulik. See tähendab, et kaamera ei vaja oma sissetulevat porti ja koduruuter jääb suletuks. See ei ütle sulle, mida vaataja räägib. Töölauamängija, brauser, telefon ja nutiteler toetavad erinevaid protokolle ning igaühel on oma ootused TLS-i, autentimise ja koodekite suhtes.
Siin on eeldus, mille võib kõrvale heita: avaldamine tähendaks allika kättesaadavaks tegemist. Avaldamine tähendab tegelikult seda, et määratletud publik saab toetatud viisi meediumi tarbimiseks. Avaldatud voog edastamisel on vorming, publik ja volitus; kättesaadaval kaameral pole ühtegi neist. Kättesaadavus on see osa, mille tunnel lahendab, ja vaataja sisenemispunkt on see osa, mille pead veel kavandama.
RTSP on läbirääkimine, mitte üks port
RTSP kannab seansi juhtimist: klient küsib kirjeldust, seab üles ühe või mitu meediarada ja esitab seejärel. Meediumi enda transport lepitakse kokku selle seadistuse käigus, mistõttu ei kirjelda protokolli hästi üks edastatud TCP-port. See läbirääkimine on osa, mille inimesed jätavad tähelepanuta, kui nad tulemüürireegleid võrdlevad.
Sõltuvalt otspunktidest võib RTP saabuda eraldi UDP-portidele või olla juhtimisühendusse põimitud. Relee, mis edastab ainult 554 ja eeldab, et ülejäänu hakkab tööle, tekitab tavaliselt seansi, mis ühendub, teatab raja ja ei näita seejärel midagi. Kontrolli transporti, mille üle sinu kaamera tegelikult läbi räägib, enne kui kirjutad sellele reeglid. Salvestus privaatsel poolel vastab sellele minutiga ja oletamine maksab õhtu.
Väikesele, teadaolevale publikule ühilduvate mängijatega võib teadlikult konfigureeritud RTSP-relee olla õige vastus. Piira, millist allikat see tõmmata tohib, ja nõua relees autentimist. Kirjuta üles mängijad, mida testisid, sest RTSP-voog, mis töötab VLC-s, võib brauseris siiski ebaõnnestuda.
HLS on esitusloend ja ressursid
HLS-vaataja toob esitusloendi ja seejärel need meediasegmendid, mille esitusloend nimetab. HLS-spetsifikatsioon määratleb selle ressursimudeli, ja oluline operatiivne detail on see, et esitusloendid viitavad teistele URL-idele. Suhtelised viited lahendatakse esitusloendi asukoha suhtes, seega pihi ümber kirjutav puhverserver peab need järjekindlalt ümber kirjutama.
Kui kaamera pakub juba kasutatavat HLS-i, saab avalik frontend need esitusloendi- ja segmendipäringud tunneli kaudu edasi saata. Jälgi võtmeid, ümbersuunamisi ja rakenduse loodud URL-e. Iga absoluutne URL, mis osutab privaatsele hostile, puruneb hetkel, mil väljaspool kohtvõrku olev vaataja seda järgib. Suhtelised teed on need, mis peavad vastu puhverserveri ümberkirjutusele, seega eelista neid kõikjal, kus kontrollid loodavat väljundit.
Kui kaamera räägib ainult RTSP-d, peab miski allika vaataja vormingusse teisendama. Ümberpakendamine ja transkodeerimine on erinevad tööd: ümberpakendamine säilitab koodeki, samas kui transkodeerimine kodeerib selle ühilduvuse huvides uuesti, ja ainult teine maksab tõsiselt protsessoriarvutust. Kumbki ei muutu vajalikuks ainult sellepärast, et VPN on teel.
Kavanda üleslink lähtuvalt sellest, kus levitamine toimub. Üks privaatne sisend, mis toidab avalikku meediateenust, käitub väga erinevalt igast vaatajast, kes tõmbab oma voo läbi tunneli. Teine muster lõpeb tavaliselt küllastunud koduuhenduse ja kaameraga, mis näib ebaõnnestuvat juhuslikult.
Pange autentimine sinna serva, mida avaldate
TLS, vaatajate autentimine ja juurdepääsu logimine kuuluvad avalikku sisenemispunkti, mitte kaamerale. See hoiab kaamera volitused voo volitustest eraldi. See annab sulle ka ühe koha, kus juurdepääs tühistada, kui publikuliige lahkub. Nende juhtimiste panemine kaamerale tähendab seevastu, et iga publiku muudatus muutub haldusmuudatuseks seadmel, mis ei peaks kunagi avalikult kättesaadav olema.
Hoia VPN ja kaamera haldusõigused avaldamisteest eraldi. VPS, mis pääseb kaamera veebiliidesele ligi voo tõmbamiseks, ei peaks olema ka masin, mis seda liidest avab. Publik ei peaks kunagi kaamera aadressi teada saama.
Seejärel kontrolli neid kahte otsa, mille sa tegelikult ehitasid, selle asemel et eeldada, et kett töötab:
$ 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
Privaatse allika edukas sondeerimine ja esitusloendi edukas toomine avalikus servas tõestavad projekti erinevaid pooli. Testi neid eraldi. Taasesitus sama tüüpi kliendist, mida sinu publik kasutab, on ainus test, mis katab kogu keti.
Lõpuks on sul kett, mille igal lülil on eesmärk: privaatne allikas, piiratud sisend, valitud pakendamine, volitatud vaataja sisenemine. Ükski neist lülidest pole valikuline ja ükski ei teki pordi avamisega.