Ich bin derzeit mit einem Problem mit Live555 konfrontiert.Live555 - Korrekter Client Shutdown mit watchVariable
Ich schrieb eine Windows-DLL für mein Projekt, diese DLL offenbaren eine sehr einfache API, um einen RTSP-Client mit Leichtigkeit zu starten. Ein Unity-Programm lädt die DLL und verwendet dann die API, um die Frames zu empfangen.
die beiden Hauptfunktionen ausgesetzt sind:
bool startRTSP(bool isTCP);
bool stopRTSP();
Aufgrund der Natur der Bibliothek LIVE555 zu, ich kann das RTSP in der Einheit Thread nicht gestartet werden. Also habe ich einen neuen Thread erstellt, wenn startRTSP aufgerufen wird, und bei einigen Callbacks werden die Frames an die Einheit gesendet.
Um jedoch den RTSP von einem externen Thread (der Einheits-Thread stopRTSP aufrufen) zu stoppen, verwende ich die EventLoopWatchVariable. Zum Beispiel ist dies, wie die RTSP Ereignisschleife gestartet wird:
env->taskScheduler().doEventLoop(&eventLoopWatchVariable);
Wenn die Stopp-Funktion aufgerufen wird, wird die eventLoopWatchVariable auf 1 gesetzt, aus der Einheit Faden. Event-Schleife beenden.
Gleich nach diesem Ausgang Ereignisschleife der Bereinigungsfunktionen werden genannt:
delete scheduler;
env->reclaim();
I thoose Funktion erwarten das RTSP-Client zu gehen und schließt sie ab. (Senden der TEARDOWN-Befehl an den Server zum Beispiel)
Aber sie tun dies eindeutig nicht, und die Clients werden nie zerstört!
Ich vermute, dass es zu einem Reconexion-Problem im selben Stream führt. (Der SETUP-, DESCRIBE- und PLAY-Befehl wird gesendet und die Antworten werden empfangen, aber keine Daten kommen.) Unter Verwendung von VLC oder mplayer kann ich sehen, dass der Server immer noch streamt, so dass dies kein Serverproblem ist.
Wie kann ich live555 fragen, den RTSPClient und ihre Subsessions zu schließen, wenn die eventLoopWatchVariable auf 1 gesetzt ist?
Ich kann den Befehl TEARDOWN nicht an den Server senden, wenn der EventLoop nicht mehr ausgeführt wird. So bin ich jetzt ein wenig verloren über den besten Weg, es zu tun.
Wenn jemand eine Idee dazu hat, würde ich es gerne hören!
Vielen Dank im Voraus.