Streaming RTSP con GStreamer: un vero cliente D&Un caso (UDP contro TCP)
Questo articolo documenta una conversazione reale con l'assistenza clienti riguardante lo streaming RTSP dal nostro telecamere termiche usando Gstreamer.
Lo condividiamo in a Q&Un formato di dialogo in modo che altri clienti che affrontano problemi simili possano seguire rapidamente il processo di risoluzione dei problemi.
Sommario
1. Indirizzo del flusso RTSP
Cliente:
Ciao, abbiamo ricevuto le vostre termocamere, tutto funziona bene, grazie, ma non riusciamo a trovare l'indirizzo per lo stream RTSP. Cos'è il /stream/sub?
Supporto:
L'URL del flusso RTSP della nostra telecamera è:
rtsp://192.168.2.254:554/live
2. Preoccupazione sulla latenza RTSP
Cliente:
Abbiamo testato lo streaming RTSP e abbiamo notato una notevole latenza rispetto all'anteprima del pannello di gestione.
Supporto:
Questo è il comportamento previsto. L'anteprima della gestione web utilizza una pipeline interna ottimizzata, mentre RTSP dipende dalle condizioni della rete e dal buffering del client.
3. Requisito di streaming UDP
Cliente:
Inoltre, il flusso RTSP non funziona sul mio lettore che prevede UDP. Come posso ottenere un flusso UDP?
Supporto:
Posso sapere che lettore stai utilizzando?? VLC?
Cliente:
Il mio lettore è GStreamer integrato in un'app Android.
4. UDP Unicast e UDP Multicast
Supporto:
Se il client GStreamer accede al dispositivo utilizzando Multicast UDP, questo è attualmente non supportato.
Dobbiamo chiarire se lo stai utilizzando Unicast UDP o Multicast UDP.
Cliente:
La mia pipeline GStreamer utilizza rtspsrc con udp impostato nel protocols parametro.
Non ho usato il udp-mcast valore, quindi dovrebbe essere unicast UDP.
5. Chiarimento sulla piattaforma
Supporto:
Questo GStreamer è in esecuzione su Windows, Linux, o Android?
Il nostro ingegnere del software vorrebbe testare dalla nostra parte.
Cliente:
La mia app utilizza GStreamer su Android, Ma rtspsrc può essere testato anche su Linux.
6. Problema noto di Linux GStreamer (Caso di riferimento)
Supporto:
Abbiamo trovato un problema simile discusso in un forum tecnico cinese.
Soluzione:
Disinstallare il seguente plugin:
sudo apt-get remove gstreamer1.0-plugins-ugly
Questo plugin potrebbe inviare intestazioni RTSP che alcune fotocamere non sono in grado di riconoscere, con conseguente errore di negazione del servizio.

Riferimento:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14
Potresti fornire il tuo rtspsrc conduttura (Preferibile Linux)? Per il test è accettabile anche una versione dell'app.
7. Compatibilità intestazione DESCRIBE RTSP
Supporto:
Un'altra possibile ragione è che se RTSP DESCRIVERE la richiesta non contiene:
application/sdp
il dispositivo potrebbe rifiutare il servizio.
Questa logica di convalida potrebbe essere troppo rigida, e prevediamo di allentare questa condizione nei futuri aggiornamenti del firmware.
8. Conferma della versione di Android GStreamer
Cliente:
Su Android, Sto usando:
- gstreamer-1.0-android-universal-1.26.8
Non include plugin brutti. Il mio Makefile contiene:
GSTREAMER_PLUGINS := \
coreelements \
playback \
typefindfunctions \
rtsp \
rtp \
rtpmanager \
udp \
tcp \
videoparsersbad \
androidmedia \
opengl
9. Parametri di runtime GStreamer suggeriti
Supporto:
Ti consigliamo di provare short-header=true in rtspsrc.
Cliente:
Quella è l'intestazione per UDP?
Supporto:
È un'opzione di intestazione RTSP e spesso migliora la compatibilità.
Esempi:
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. Risultati dei test interni (Linux)
Supporto:
Il nostro ingegnere ha testato il flusso RTSP utilizzando Gstreamer 1.0 su Linux, e ha funzionato correttamente.


Esempio TCP:
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
protocols=tcp \
src. \
! decodebin \
! autovideosink
Esempio dell'UDP (rimuovere protocols=tcp):
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
src. \
! decodebin \
! autovideosink
La logica interna tra Linux e Android GStreamer è la stessa, quindi il comportamento dovrebbe essere coerente su tutte le piattaforme.
11. Conclusione
Questo caso evidenzia diversi punti importanti quando si utilizza RTSP con GStreamer:
- URL RTSP:
rtsp://<camera_ip>:554/live - UDP unicast è supportato; Il multicast UDP non lo è
- Evita plugin problematici (Solo Linux)
- Tentativo
short-header=trueper una migliore compatibilità - I risultati dei test Linux possono generalmente essere applicati ad Android
Se riscontri problemi simili, per favore fornisci il tuo Pipeline GStreamer o client di test, e il nostro team di ingegneri ti assisterà ulteriormente.

Fai una domanda
Grazie per la risposta. ✨