RTSP Stream im Browser anzeigen

  • Hallo,


    ich möchte einen RTSP Stream einer Überwachungskamera mittels Browserplugin auf einer Website darstellen. Technisch funktioniert dies bereits, allerdings habe ich einen Zeitversatz von 1,4 Sekunden zum Livebild. Wenn ich den RTSP Stream über die GUI des VLC Players aufrufe habe ich nach ein paar Einstellungen das Bild mit einem Versatz von nur 0,8 Sekunden dargestellt bekommen.


    Folgende Einstellungen habe ich vorgenommen:


    Video-> Ausgabemodule -> Videoausgabe-Modul=Direct3D
    Input/Codecs -> Cache Wert für Netzwerk = 500 ms
    Input/Codecs -> Videocodes -> FFmpeg -> Hardware Dekodierung = aktiviert


    Leider funktionieren diese nur wenn ich über die GUI gehe. Mein HTML aufruf sieht wie folgt aus:


    <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
    codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab"
    width="640" height="480" id="vlc" events="True">
    <param name="Options" value=":network-caching=300" />
    <param name="Options" value=":ffmpeg-hw" />
    <param name="Options" value=":sout-transcode-venc=Direct3D" />
    <param name="Src" value="rtsp://root:pass@192.168.23.230:544/Camera122/LiveView" />
    <param name="ShowDisplay" value="True" />
    <param name="AutoLoop" value="False" />
    <param name="AutoPlay" value="True" />
    <embed id="vlcEmb" type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" loop="no" width="640" height="480"
    target="rtsp://root:pass@192.168.23.230:544/Camera122/LiveView" ></embed>
    </OBJECT>


    Kann mir jemand helfen, wie ich den Zeitversatz über das Plugin reduzieren kann?


    Gruss Holger

  • Hallo Holger,


    willkommen im Forum.


    Zu Deiner Frage, wie Du den Zeitversatz über das Plugin reduzieren kannst, kann ich Dir aus eigener Erfahrung leider nicht helfen, aber
    Exilant, unser Forenmitglied und Moderator, hat ein kleines Tutorial zum Webcam Streaming geschrieben. Er verwendet dabei allerdings nicht das RTSP- sondern das HTTP-Protokoll. Der von ihm angegebene Zeitversatz liegt weit über dem Deinen. Vielleicht fällt dem Exilant zu Deiner Frage etwas ein.


    Ich persönlich meine ja, dass Dein "Aufbau" perfekt und der Zeitversatz in beiden Fällen, GUI und Website, ausgesprochen gering ist. Du könntest gut und gerne über Dein Vorgehen ein kleines Tutorial mit dem Titel "Von der Webcam zur Website streamen" hier unter "Informationen und Hinweise" für dieses Forum schreiben.


    Jetzt wirst Du Dir natürlich denken, da stellt man eine Frage und bekommt statt der gewünschten Antwort das Angebot, ein Tutorial zu schreiben. Das wäre aber ganz im Sinne dieses Forums: User helfen User. Ich selbst bin auch nur ein User und versuche, so gut es mir möglich ist, zu helfen.


    Jetzt habe ich aber auch noch einige Fragen in Deiner Sache:

    • Welches Plugin verwendest Du eigentlich?
    • Wo ist die Website, auf der Du den Stream darstellen möchtest, im Internet?
    • Hast Du für die Videoausgabe auch schon andere Module als Direct3D ausprobiert?
    • Hast Du für FFmpeg schon einmal die Fehlerbelastbarkeit auf 0 gesetzt?
    • Hast Du es für FFmpeg schon einmal ausprobiert, Bild überspringen auf 1 zu setzen?

    Im Abschnitt FFmpeg gäbe es noch einige weitere Einstellungen, die man einfach einmal ausprobieren sollte. Die siehst Du aber selbst, die brauche ich nicht alle aufzählen.


    Mit freundlichem Gruß,


    kodela

  • Hallo Kodela,


    danke für deine Antwort, das Tutorial von Exilant ist leider ein ganz anderer Fall, da er hier einen eigenen Stream erzeugt, den er einfach veröffentlicht. In meinem Fall habe ich folgendes vor:


    Ich habe eine/mehrere IP Kamera(s) die bereits ein RTSP Stream im Netz zur Verfügung stellt. Diesen RTSP Stream möchte ich auf eine Webapplikation im internen LAN verwenden. Es handelt sich hier um mehrere Überwachungskameras die ich in einem Sicherheitsleitstand abbilden möchte. Somit ist ein Zeitversatz für eine Echtzeitüberwachung von einer 1 Sekunde schon recht viel...


    Zu deinen Fragen:
    - Andere Module als direct 3D brachten schlechtere Ergebnisse
    - Mit den Einstellungen habe ich auch schon diverse Versuche gemacht, allerdings kann ich diese über mein Script irgendwie nicht so aktivieren, deshalb habe ich ja das Problem, dass ich über den Player ein besseres Ergebniss bekomme wie wenn ich über meinen HTML Code (siehe unten) gehe.


    Übrigens ich verwende das VLC Plugin 2.0 aus der aktuellsten Version.


    Wegen dem Tutorial muss ich mal am Wochenende schauen, wenn ich etwas mehr Zeit habe...


    Gruss
    Holger

  • Hallo Holger,


    dass Dir mit dem Tutorial von Exilant nicht viel geholfen ist, habe ich befürchtet. Trotzdem wollte ich darauf hinweisen.


    Obwohl ich heute in Deiner Sache sehr viel gesucht habe, fand ich nichts, was ich Dir weitergeben könnte.


    Eine Frage hätte ich allerdings noch: Hast Du, vorausgesetzt Du arbeitest unter Windows, für den VLC den Systemdienst eingerichtet. Ich habe keine Ahnung, ob das etwas an Deinem Problem ändern würde, aber man könnte es ja versuche.


    MfG, kodela

  • Hallo Holger,


    ich habe noch eine Frage: Hast Du während der Wiedergabe auf der Website auch das VLC-Interface geöffnet?


    Entschuldige, wenn Dir meine Fragen als dumm erscheinen, aber wenn man nichts weiß, dann kommen eben auch einmal dumme Gedanken auf.


    MfG, kodela

  • Hallo Holger,


    Du schreibst:


    Quote

    ... Mit den Einstellungen habe ich auch schon diverse Versuche gemacht,
    allerdings kann ich diese über mein Script irgendwie nicht so
    aktivieren, deshalb habe ich ja das Problem ...


    Versuche es doch einmal mit folgenden Erweiterungen Deines Script:


    <param name="Options" value=":ffmpeg-error-resilience=0" />
    <param name="Options" value=":ffmpeg-skip-frame=1" />
    <param name="Options" value=":ffmpeg-skip-idct=2" />
    <param name="Options" value=":ffmpeg-fast=1" />
    <param name="Options" value=":ffmpeg-hw=1" />
    <param name="Options" value=":
    vout=direct3d" />


    Das soll Dir nur helfen, Einstellungsänderungen für den VLC in das Script zu übernehmen. Um herauszufinden, welche Einstellungen wie zu übernehmen sind, empfehle ich folgendes Vorgehen:

    • Von der Konfigurationsdatei vlcrc eine Kopie machen.
    • Im VLC die zu testenden Änderungen vornehmen und speichern.
    • Die vlcrc und deren Kopie über WinMerge untersuchen und die Unterschiede notieren.
    • Die vlcrc löschen und ihre Kopie in vlcrc umbenennen.

    Danach kannst Du nach obigen Beispiel die Änderungen für das Script einbauen.


    Mit den Beispielen habe ich für Einstellungen - Alle - Input/Codecs - Videocodecs - FFmpeg die

    • Fehlerbelastbarkeit von 1 auf 0,
    • Fehler umgehen von 0 auf 1,
    • Bild überspringen von 0 auf 2,
    • Erlaube Geschwindigkeitstricks von 0 auf 1 (Häkchen gesetzt),
    • Hardware Dekodierung von 0 auf 1 (Häkchen gesetzt) und
    • Videoausgabe-Modul auf Direct3D

    geändert.


    Ob die jeweiligen Werte sinnvoll sind, wurde nicht berücksichtigt, die unterschiedlichen Werte sollten nur helfen, die richtigen Variablen zu finden.


    Genau so, wie hier beschrieben, kannst Du natürlich für alle sonstigen Einstellmöglichkeiten vorgehen.


    MfG, kodela

  • Hi Holger,


    öhm.. wegen dem Zeitversatz... sowas kommt Zustande, da ja der Stream im System ankommt, dann von dem Rechner aufgegriffen wird, der das Bild darstellt und dann es in ein anderes Format umwandelt. Jetzt hast du also mehrere Streams (davon gehe ich jetzt mal aus) und die werden alle auf einer Webseite angezeigt. Also muss der Rechner, der die Streams darstellt, die umkodierung für mehr als nur einen Stream erledigen. Das ist ganz schön was an Rechenleistung die da verlangt wird.
    Somit schliesse ich darauf, dass das Problem mit der Zeitverzögerung daran liegt, wie leistungsstark der Rechner ist, der die Streams darstellt. Du hast ja keinen Rechner dazuwischen, der als Webserver die Streams aufgreift und das Webinterface dazu bereitstellt.


    Der Exilant


  • Vielen Dank, die Anpassung der Werte hat eine Verbesserung von 1,4 Sek auf 1,2 Sek Versatz gebracht, zwar nicht ganz den Wert wie in der Programmoberfläche aber immerhin.
    :)

  • Hi Holger,


    öhm.. wegen dem Zeitversatz... sowas kommt Zustande, da ja der Stream im System ankommt, dann von dem Rechner aufgegriffen wird, der das Bild darstellt und dann es in ein anderes Format umwandelt. Jetzt hast du also mehrere Streams (davon gehe ich jetzt mal aus) und die werden alle auf einer Webseite angezeigt. Also muss der Rechner, der die Streams darstellt, die umkodierung für mehr als nur einen Stream erledigen. Das ist ganz schön was an Rechenleistung die da verlangt wird.
    Somit schliesse ich darauf, dass das Problem mit der Zeitverzögerung daran liegt, wie leistungsstark der Rechner ist, der die Streams darstellt. Du hast ja keinen Rechner dazuwischen, der als Webserver die Streams aufgreift und das Webinterface dazu bereitstellt.


    Der Exilant


    Hallo Exilant,


    ich habe einen reinen RTSP Stream und dieser wird vom VLC konvertiert, damit er auf der Website dargestellt werden kann. Sicherlich muss hier der Rechner etwas umrechnen, habe aber einen Leistungsfähigen I7 mit genügend Ressourchen, ich denke das sollte normalerweise kein Problem sein. Was ich noch nicht so ganz verstehe, wenn ich auf die HTML Verwaltungsseite der Kamera gehe und über ein ActiveX das Bild im Browser anschauen, habe ich keinen Zeitversatz (Echtzeit mit 0.0 Sek.). Von derm her kann es kein Hardwareproblem sondern eher die Konstellation der Software / Medienformat sein. Ich bin mittlerweile der Meinung, dass für mein Vorhaben vermutlich das RTSP Protokoll einfach nicht ganz das richtige ist.


    Gruss
    Holger

  • Hallo Holger,

    ... die Anpassung der Werte hat eine Verbesserung von 1,4 Sek auf 1,2 Sek Versatz gebracht, zwar nicht ganz den Wert wie in der Programmoberfläche aber immerhin. ...


    Meine "Vorschläge" für die Anpassung bezogen sich eigentlich nur auf die einzelnen Optionen, nicht auf die dafür zu setzenden Werte. Da habe ich einfach für das Herausfinden der entsprechenden Variablen-Bezeichner die Werte so gesetzt, dass ich in der Konfigurationsdatei die zugehören Bezeichner gefunden habe.


    Du musst auch nicht alle setzten. Das sind lediglich von mir gesehene Möglichkeiten, die man einzeln für sich mit verschiedenen Werten durchprobieren muss. Das kann ich natürlich nicht machen.


    Quote

    ... Ich bin mittlerweile der Meinung, dass für mein Vorhaben vermutlich das RTSP Protokoll einfach nicht ganz das richtige ist. ...


    Kannst Du denn auch von den Cameras aus ein anderes Protokoll verwenden?



    MfG, kodela

  • Kannst Du denn auch von den Cameras aus ein anderes Protokoll verwenden?

    Das muss ich noch klären, vermutlich nicht und werde deshalb einen Video Server für die Streamkonvertierung dazwischen schalten. Wenn natürlich der Zeitversatz schon im RTSP Stream der Kamera drin ist, wird es natürlich schwer hier eine Verbesserung herbeizuführen. Ich werde dies heute nochmals probieren und mein Ergebnis melden...

  • Hallo Zusammen,


    erstmal vielen Dank für die guten Tips und Anregungen. :thumbup:


    Ich habe das Thema nun wie folgt einigermaßen in den Griff bekommen. Wie schon oben beschrieben, habe ich einen Zeitversatz von 1,2 Sekunden. Eine Arbeitskollegin hat mich dann darauf hingewiesen, dass es zwei verschiedene Plugins geben muss. Ich habe immer das Google Plugin verwendet und sobald ich das original VLC Plugin verwende, bekomme ich einen Zeitversatz von 0,6 Sekunden, was dann schon ganz in Ordnung ist.


    Hier der Aufrufparameter mit dem Google Plugin:


    <embed id="vlcEmb" type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" loop="no" width="640" height="480"
    target="rtsp://root:pass@ipadress/Camera123/LiveView" ></embed>


    und nun das schnellere VLC Plugin:


    <embed id="streamip" marginwidth="1" type="application/x-vlc-plugin" src="rtsp://root:pass@ipadress/Camera123/LiveView" progid="VideoLAN.VLCPlugin.2" marginheight="1" style="top: 30px; left: 30px; display: inline; width: 704px; height: 576px; margin: 0px; visibility: visible;"
    pluginspage="http://www.videolan.org" toolbar="true" name="streamip"/>


    Kleines Tutorial folgt und sobald es neue Erkenntnisse gibt ebenfalls :)