Објављивање стрима камере: RTSP и HLS нису иста ивица
Контрола сесије RTSP и достава HLS-а траже различите јавне ивице, чак и када обоје достигну исту камеру преко VPN-а. Прво изаберите модел гледаоца.
Отворите један порт камере, усмерите плејер на њега и претпоставите да је интернет проблем решен. Затим га телефон не може репродуковати, прегледач га не може репродуковати, а административна страница камере удаљена је само једну погрешно уписану путању од јавне ивице. Изабрани модел доставе, RTSP или HLS, одлучује о већини тога пре него што је написано иједно правило заштитног зида. VPN обезбеђује само приватни део.
VPN поправља пут извора, не пут гледаоца
VPS повезан са LAN-ом камере преко тунела може достићи камеру на њеној приватној адреси, и то је заиста корисно. То значи да камери не треба властити улазни порт и да рутер у дому остаје затворен. То вам не говори којим ће језиком говорити гледалац. Стони плејер, прегледач, телефон и паметни телевизор подржавају различите протоколе, а сваки има своја очекивања о TLS-у, аутентификацији и кодецима.
Ево претпоставке коју вреди одбацити: објављивање би значило учинити извор доступним. Објављивање заправо значи дати дефинисаној публици подржан начин конзумирања медија. Објављени ток има формат, публику и приступне податке; доступна камера нема ништа од тога. Доступност је део који тунел решава, а улазна тачка гледаоца је део који тек треба да осмислите.
RTSP је преговарање, а не један порт
RTSP носи контролу сесије: клијент затражи опис, постави једну или више медијских стаза и затим репродукује. Пренос самог медија преговара се током тог постављања, због чега протокол није добро описан једним прослеђеним TCP портом. То преговарање је део који људи пропуштају када пореде правила заштитног зида.
У зависности од крајњих тачака, RTP може стизати на засебним UDP портовима или бити испреплетан на контролној вези. Посредник који прослеђује само 554 и претпоставља да ће остатак радити обично ствара сесију која се повеже, пријави стазу и затим не прикаже ништа. Проверите пренос о ком ваша камера стварно преговара пре него што за њега напишете правила. Снимак на приватној страни то одговара у минути, а погађање кошта вече.
За малу, познату публику са компатибилним плејерима намерно конфигуриран RTSP посредник може бити прави одговор. Ограничите из ког извора сме да повлачи и захтевајте аутентификацију на посреднику. Запишите плејере које сте тестирали, јер ток RTSP који ради у VLC-у може ипак да закаже у прегледачу.
HLS је плејлиста плус ресурси
Гледалац HLS-а добавља плејлисту, а затим добавља медијске сегменте које та плејлиста именује. Спецификација HLS дефинише тај модел ресурса, а важна оперативна појединост је да плејлисте упућују на друге URL-ове. Релативне референце разрешавају се у односу на локацију плејлисте, па прокси који преписује путање мора да их преписује доследно.
Ако камера већ служи употребљив HLS, јавни фронтенд може да прослеђује те захтеве за плејлистом и сегментима кроз тунел. Пазите на кључеве, преусмеравања и URL-ове које генерише апликација. Сваки апсолутни URL који упућује на приватног хоста сломи се у тренутку када га гледалац изван LAN-а следи. Релативне путање су оне које преживљавају преписивање проксија, па дајте им предност где год контролишете генерисани излаз.
Ако камера говори само 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
Успешна провера приватног извора и успешно добављање плејлисте на јавној ивици доказују различите половине дизајна. Тестирајте их одвојено. Репродукција са исте врсте клијента коју користи ваша публика једини је тест који покрива цео ланац.
Оно што на крају имате је ланац са сврхом у свакој карици: приватни извор, ограничен унос, изабрано паковање, овлашћени улаз гледаоца. Ниједна од тих карика није необавезна и ниједна не настаје отварањем порта.