LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /CCTV/Tutorials / Tutorial: Budowanie i sprawdzanie adresów RTSP kamer...
Ten artykuł w innych językach:

Tutorial: Budowanie i sprawdzanie adresów RTSP kamer IP

Tutorial: Budowanie i sprawdzanie adresów RTSP kamer IP
Spis treści
  1. 1. Ustalenie właściwego serwera
  2. 2. Pobranie ścieżki z urządzenia lub dokumentacji
  3. 3. Kodowanie danych logowania nie jest szyfrowaniem
  4. 4. Sprawdzenie metadanych z limitem czasu
  5. 5. Świadomy podział detekcji i nagrywania
  6. Pytania i odpowiedzi
  7. Źródła

Adres RTSP wskazuje usługę multimedialną i żądany strumień. RTSP steruje sesją; obraz jest często przesyłany w pakietach RTP. Obsługa, ścieżki, uwierzytelnianie i transport zależą od modelu oraz oprogramowania. Udane połączenie jest pierwszym sprawdzeniem, a nie dowodem niezawodnego nagrywania.

1. Ustalenie właściwego serwera

Hostem może być kamera, rejestrator, konsola Protect lub serwer przekazujący strumień. Adres musi wskazywać komponent udostępniający dany strumień. Konto kamery nie działa automatycznie na rejestratorze. Port 554 jest typowym portem RTSP, ale rozstrzyga rzeczywista konfiguracja.

RTSP: sprawdzenie każdej warstwy
Kod stanu to wskazówka, nie pełna diagnoza

Poniższy fikcyjny adres pokazuje składniki. Dane logowania w URL są konwencją obsługiwaną przez klienta i wymagają sprawdzenia zgodności. Oddzielne pola logowania są lepszym wyborem, jeśli aplikacja je udostępnia.

rtsp://viewer:Example%402026@192.0.2.10:554/Streaming/Channels/102
schemat | użytkownik:hasło    | host      | port | ścieżka

Host, dane logowania ani port nie są identyczne we wszystkich kamerach. Adres IPv6 wymaga nawiasów kwadratowych, np. rtsp://[2001:db8::10]:554/stream. Ciąg zapytania może wybierać dodatkowe ustawienia. Dokładne znaczenie wynika z dokumentacji urządzenia.

2. Pobranie ścieżki z urządzenia lub dokumentacji

Rodzina urządzeń Przykładowa ścieżka
Hikvision /Streaming/channels/101 · /Streaming/channels/102
Amcrest IP /cam/realmonitor?channel=1&subtype=0
Reolink /Preview_01_main · /Preview_01_sub
Axis /axis-media/media.amp?streamprofile=PROFILE

To przykłady, nie uniwersalne adresy. We wzorcu Hikvision numer kanału poprzedza dwucyfrowe oznaczenie strumienia: kanał 12 i strumień 02 dają 1202. Kanał nie zawsze oznacza fizyczny obiektyw. Parametr rozdzielczości Axis żąda obsługiwanego rozmiaru, a nie automatycznie stałego „podstrumienia”.

W zgodnej usłudze multimedialnej ONVIF GetProfiles wskazuje dostępne profile. GetStreamUri żąda URI dla wybranego profilu i transportu. Nadal wymagają sprawdzenia uwierzytelnianie, osiągalność i zgodność klienta. Zwrócony adres prywatny nie jest automatycznie dostępny z innej sieci.

Oficjalna lista portów Ubiquiti wymienia dla Protect zarówno RTSPS na 7441, jak i RTSP na 7447. Wcześniejsze twierdzenie o stałym odrzucaniu zwykłego RTSP było zbyt szerokie. Skonfigurowany, obsługiwany adres eksportu i wersja konsoli mają pierwszeństwo przed zgadywaniem zmian w URL.

3. Kodowanie danych logowania nie jest szyfrowaniem

Znaki zastrzeżone mogą zmieniać sposób podziału URL. Nazwa użytkownika i hasło wymagają oddzielnego kodowania: @ → %40, / → %2F, # → %23, ? → %3F, % → %25 oraz spacja → %20. Dwukropek zapisany jako %3A usuwa niejednoznaczność, lecz dwukropek wewnątrz informacji o użytkowniku nie zawsze kończy to pole. Wartości już zakodowanej nie należy kodować ponownie.

Kodowanie procentowe jest odwracalne i nie zapewnia poufności. Digest nie przesyła samego hasła otwartym tekstem, ale nie szyfruje obrazu i nie jest gwarantowanym sposobem logowania każdej kamery. Basic bez ochrony transportu ujawnia dane możliwe do odzyskania. RTSPS chroni połączenie sterujące przez TLS; ochrona mediów zależy od uzgodnionego transportu.

Oddzielne konto podglądu ogranicza uprawnienia. Adresy i identyfikatory nadal wymagają ochrony w argumentach procesów, dziennikach i konfiguracji. Lokalne kodowanie pozwala uniknąć wysyłania prawdziwego hasła do internetowego kodera.

4. Sprawdzenie metadanych z limitem czasu

Przykład dla Basha wymaga ffprobe i GNU timeout. Odczytuje URL bez wyświetlania na terminalu, żąda transportu TCP wewnątrz kanału sterującego i zwraca metadane pierwszego strumienia wideo. Wpisany adres nie staje się dosłownym poleceniem historii powłoki. Rozwinięty argument nadal może być widoczny przy uprawnionym sprawdzaniu procesów lub w błędach.

IFS= read -r -s -p 'RTSP URL: ' RTSP_URL
printf '\n'
timeout -k 2s 15s ffprobe -v error \
  -rtsp_transport tcp -timeout 5000000 \
  -select_streams v:0 \
  -show_entries stream=codec_name,width,height,avg_frame_rate \
  -of json "$RTSP_URL"
probe_status=$?
unset RTSP_URL
printf 'Exit status: %s\n' "$probe_status"

-timeout 5000000 ogranicza oczekiwanie na operacje gniazda RTSP do pięciu sekund w sprawdzonej wersji FFmpeg 7.1.5. Zewnętrzne polecenie nakłada osobny limit 15 sekund oraz dalsze dwie sekundy przed wymuszonym zakończeniem. GNU timeout zwykle zwraca kod 124 po przekroczeniu limitu. Poprawnie działająca kamera nie musi odpowiedzieć w dwie sekundy.

Kodek i rozmiar w JSON potwierdzają przydatne metadane, nie ciągły odbiór pakietów ani udane dekodowanie. Brak pozycji wideo nie oznacza zaliczonego testu obrazu. Następnie odtwarzacz i reprezentatywne nagranie powinny sprawdzić rzeczywiste klatki, ruch, zmianę dnia i nocy oraz ponowne połączenie.

401 Unauthorized Uwierzytelnianie jest wymagane albo nie powiodło się. Pierwsze żądanie logowania może być normalne; poprawność ścieżki nie jest dowiedziona.
404 Not Found Nie znaleziono żądanego zasobu. Sam kod nie potwierdza przyjęcia danych logowania.
Connection refused Punkt końcowy lub pośrednik odrzucił połączenie TCP. Sprawdzenia wymagają cel, port, usługa i zapora.
Timeout Połączenie lub odczyt nie zakończył się w terminie. Analizy wymagają etap, transport, trasa, obciążenie i dzienniki.

Przeplatanie TCP pozwala uniknąć osobnych portów UDP dla mediów. Nie naprawia błędnej ścieżki, nieobsługiwanego kodeka, braku uprawnień ani utraty łączności. UDP również może być odpowiednie; utrata pakietów i buforowanie decydują o praktycznej różnicy opóźnienia.

5. Świadomy podział detekcji i nagrywania

Frigate pozwala przypisać wejściom role detect i record. Fragment pokazuje role dla potwierdzonej ścieżki w stylu Hikvision. Pełna konfiguracja wymaga także właściwych ustawień nagrywania i walidacji w zainstalowanej wersji Frigate.

cameras:
  driveway:
    ffmpeg:
      inputs:
        - path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.0.2.10:554/Streaming/Channels/102"
          input_args: preset-rtsp-generic
          roles: [detect]
        - path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.0.2.10:554/Streaming/Channels/101"
          input_args: preset-rtsp-generic
          roles: [record]

Podstawianie zmiennych środowiskowych działa tylko w udokumentowanych polach konfiguracji. Zmienna hasła zawiera tutaj wartość zakodowaną dla URL. Chroniony plik środowiskowy ogranicza przypadkowe udostępnienie; wartości w działającym procesie nie stają się przez to sejfem na sekrety.

Mniejszy strumień detekcji może ograniczyć dekodowanie, ale odległe obiekty mogą być zbyt małe. Przy tym samym kadrze zmiana szerokości z 3840 na 640 pikseli zmniejsza liniową gęstość do jednej szóstej. Jeśli idealizowany obiekt zajmował 172,8 piksela, po skalowaniu zostaje 28,8 piksela. Kadrowanie, perspektywa i kodowanie mogą zmienić wynik praktyczny. To nie gwarancja wykrycia.

Pytania i odpowiedzi

Czy go2rtc zawsze potrzebuje jednego połączenia z kamerą?

Kilku odbiorców może współdzielić jeden strumień wejściowy. Różne źródła strumienia głównego i podstrumienia nadal mogą wymagać osobnych połączeń z kamerą. Limity sesji zależą od modelu; uniwersalna granica dwóch lub czterech sesji jest nieuzasadniona.

Czy rezerwacja DHCP rozwiązuje każdą późniejszą awarię?

Rezerwacja pomaga utrzymać przewidywalny adres. Konflikty adresów, routing, zasilanie, oprogramowanie, ustawienia usług i zmiany kont pozostają możliwe. Restart routera nie musi zmieniać dzierżawy adresu.

Dlaczego strumień urywa się po pewnym czasie?

Dzienniki powinny rozróżniać utratę transportu, wygaśnięcie sesji i restart klienta lub urządzenia. Znaczenie mają obsługiwany mechanizm RTSP keepalive i limit sesji serwera; brak informacji RTCP nie jest jedynym wyjaśnieniem. Automatyczne ponowne łączenie może przywrócić usługę bez ustalenia pierwotnej przyczyny.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innymi kamerami, obiektywami lub rejestratorami oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.