Transmisja strumieniowa UDP RTSP GStreamer & Poprawka opóźnienia dla kamer termowizyjnych

Przesyłanie strumieniowe RTSP za pomocą GStreamera – prawdziwy klient Q&Sprawa (UDP kontra TCP)

Ten artykuł dokumentuje prawdziwą rozmowę z obsługą klienta dotyczącą przesyłania strumieniowego RTSP z naszego kamery termowizyjne używając Gstreamer.
Udostępniamy go w Q&Format dialogowy aby inni klienci borykający się z podobnymi problemami mogli szybko śledzić proces rozwiązywania problemów.


1. Adres strumienia RTSP

Klient:
cześć, otrzymaliśmy Wasze kamery termowizyjne, wszystko działa dobrze, Dziękuję, ale nie możemy znaleźć adresu strumienia RTSP. Co to jest /stream/sub?

Wsparcie:
Adres URL strumienia RTSP naszej kamery to:

rtsp://192.168.2.254:554/live

2. Problem z opóźnieniami RTSP

Klient:
Przetestowaliśmy strumień RTSP i zauważyliśmy znaczne opóźnienia w porównaniu z podglądem panelu zarządzania.

Wsparcie:
Jest to oczekiwane zachowanie. Wersja zapoznawcza zarządzania siecią wykorzystuje wewnętrznie zoptymalizowany potok, podczas gdy RTSP zależy od warunków sieciowych i buforowania klienta.


3. Wymagania dotyczące przesyłania strumieniowego UDP

Klient:
Strumień RTSP również nie działa na moim odtwarzaczu, który oczekuje UDP. Jak mogę uzyskać strumień UDP?

Wsparcie:
Mogę wiedzieć, jakiego odtwarzacza używasz? VLC?

Klient:
Mój odtwarzacz to GStreamer zintegrowany z aplikacją na Androida.


4. UDP Unicast kontra UDP Multicast

Wsparcie:
Jeśli klient GStreamer uzyskuje dostęp do urządzenia za pomocą UDP Multicast, to jest obecnie nieobsługiwane.
Musimy wyjaśnić, czy używasz Transmisja pojedyncza UDP lub UDP Multicast.

Klient:
Mój potok GStreamera używa rtspsrc z udp ustawić w protocols parametr.
Nie korzystałem z udp-mcast wartość, więc powinno to być UDP unicast.


5. Wyjaśnienie platformy

Wsparcie:
Czy ten GStreamer działa w systemie Windows?, Linux, lub Androida?
Nasz inżynier oprogramowania chciałby przeprowadzić testy po naszej stronie.

Klient:
Moja aplikacja korzysta z GStreamera na Androidzie, ale rtspsrc można również przetestować na Linuksie.


6. Znany problem z Linuxem GStreamer (Sprawa referencyjna)

Wsparcie:
Znaleźliśmy podobny problem omawiany na chińskim forum technicznym.

Rozwiązanie:
Odinstaluj następującą wtyczkę:

sudo apt-get remove gstreamer1.0-plugins-ugly

Ta wtyczka może wysyłać nagłówki RTSP, których niektóre kamery nie mogą rozpoznać, co powoduje błąd odmowy usługi.

RTSP GStreamer UDP Streaming & Latency Fix for Thermal Cameras 1

Odniesienie:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14

Czy mógłbyś podać swoje rtspsrc rurociąg (Preferowany Linux)? Do testów dopuszczalna jest także wersja aplikacji.


7. RTSP OPISZ kompatybilność nagłówka

Wsparcie:
Inną możliwą przyczyną jest to, że jeśli plik RTSP OPISAĆ żądanie nie zawiera:

application/sdp

urządzenie może odmówić wykonania usługi.

Ta logika walidacji może być zbyt rygorystyczna, i planujemy złagodzić ten warunek w przyszłych aktualizacjach oprogramowania sprzętowego.


8. Potwierdzenie wersji Androida GStreamer

Klient:
Na Androidzie, używam:

  • gstreamer-1.0-Android-Universal-1.26.8

Nie zawiera brzydkich wtyczek. Mój plik Makefile zawiera:

GSTREAMER_PLUGINS := \
    coreelements \
    playback \
    typefindfunctions \
    rtsp \
    rtp \
    rtpmanager \
    udp \
    tcp \
    videoparsersbad \
    androidmedia \
    opengl

9. Sugerowane parametry wykonawcze GStreamera

Wsparcie:
Zalecamy spróbować short-header=true w rtspsrc.

Klient:
Czy to nagłówek dla UDP?

Wsparcie:
Jest to opcja nagłówka RTSP, która często poprawia kompatybilność.

Przykłady:

gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> short-header=true
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> do-rtcp=false short-header=true

10. Wyniki testów wewnętrznych (Linux)

Wsparcie:
Nasz inżynier przetestował strumień RTSP za pomocą Gstreamer 1.0 na Linuksie, i zadziałało poprawnie.

GStream-1 test on linux
Test GStream-1 na Linuksie
GStream-1 test on linux working well
Test GStream-1 na Linuksie działa dobrze

Przykład TCP:

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
  protocols=tcp \
src. \
  ! decodebin \
  ! autovideosink

Przykład UDP (usunąć protocols=tcp):

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
src. \
  ! decodebin \
  ! autovideosink

Wewnętrzna logika pomiędzy Linuksem i Androidem GStreamer jest taka sama, dlatego zachowanie powinno być spójne na wszystkich platformach.


11. Wniosek

Ten przypadek podkreśla kilka ważnych punktów podczas używania RTSP z GStreamerem:

  • Adres URL RTSP: rtsp://<camera_ip>:554/live
  • UDP jednostkowe jest obsługiwany; Multicast UDP nie
  • Unikaj problematycznych wtyczek (Tylko Linux)
  • Próbować short-header=true dla lepszej kompatybilności
  • Wyniki testów systemu Linux można ogólnie zastosować w systemie Android

Jeśli napotkasz podobne problemy, proszę podać swoje Potok GStreamer lub klient testowy, a nasz zespół inżynierów będzie Ci dalej pomagać.

Zadać pytanie

← Wstecz

Twoja wiadomość została wysłana