MJPEG-Stream über Webserver erreichbar machen

  • Hallo zusammen.


    Ich habe ein Problem, über das ich mir schon seit einigen Tagen den Kopf zerbreche:

    Ich nutze einen Raspberry Pi 3 als Webserver (Apache). Im Router ist eine Portweiterleitung für den Port 80 eingerichtet, sodass der Server aus dem Internet erreichbar ist. Das funktioniert soweit auch alles.


    Auf dem Raspberry Pi kann ich über die Adresse http://localhost:8081 auf den MJPEG-Stream einer Überwachungskamera zugreifen. Diesen Stream möchte ich auf meiner bestehenden Website einbinden. Den Stream in html einzubinden habe ich hinbekommen. Allerdings ist er dann ja nur innerhalb des Netzwerks verfügbar, wenn ich als Quelle die interne IP-Adresse des Raspberry angegeben habe.


    Daher habe ich überlegt, ob sich das Ganze mithilfe von php umsetzen lässt, da php ja serverseitig ausgeführt wird und somit Zugriff auf den Stream hätte. Ich bin aber bis jetzt zu keiner funktionierenden Lösung gekommen. Ich möchte ungern den Port 8081 im Router freigeben, da der Stream keinen Login erfordert und somit für jeden erreichbar wäre. Der Stream soll aber nur sichtbar sein, wenn ich mich auf meiner Website angemeldet habe.


    Vielleicht hat ja jemand von euch eine Idee und kann mir helfen ;)

    Edited once, last by jan_sch ().

  • Ich möchte ungern den Port 8081 im Router freigeben, da der Stream keinen Login erfordert und somit für jeden erreichbar wäre.

    Dafür könntest du Apache oder Nginx mit basic-auth als reverse Proxy vorschalten.

    Menschen die keine Ironie verstehen finde ich super!

  • Dafür könntest du Apache oder Nginx mit basic-auth als reverse Proxy vorschalten.

    Danke, Reverse Proxy ist ein gutes Stichwort. Aber wie kann ich den Proxy einrichten? Wenn ich Apache nicht ausschließlich als Proxy-Server, sondern auch noch als normalen Webserver betreiben möchte, muss ich ja auch wieder mehrere Ports verwenden. Oder verstehe ich das falsch?

    Habe einen weiteren Virtual Host angelegt, hat aber nicht funktioniert :conf:

  • Habe einen weiteren Virtual Host angelegt, hat aber nicht funktioniert

    Sollte aber.

    "hat aber nicht funktioniert" ist leider keine Fehlermeldung, mit der irgendwer was anfangen kann. Es bleibt mir also nur, dich auf die Apache-Dokumentation zu verweisen, da ist alles drin erklärt.

    Menschen die keine Ironie verstehen finde ich super!

  • Sollte aber.

    "hat aber nicht funktioniert" ist leider keine Fehlermeldung, mit der irgendwer was anfangen kann. Es bleibt mir also nur, dich auf die Apache-Dokumentation zu verweisen, da ist alles drin erklärt.

    Sorry, das hätte ich vielleicht gleich dazuschreiben sollen:


    Habe folgende Dokumentation genutzt: https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html


    Meine neue Datei proxy-host.conf sieht so aus:

    Code
    <VirtualHost *:80>
        ProxyPass "/cam"  "http://localhost:8081/"
        ProxyPassReverse "/cam"  "http://localhost:8081/"    
    </VirtualHost>

    Habe den Virtual Host dann aktiviert und Apache neu gestartet. Es treten keine Fehler auf. Trotzdem funktioniert es noch nicht. Ansonsten müsste ich unter 'http://<Raspberry-IP-Adresse>/cam' den Stream aufrufen können oder?

    Wahrscheinlich fehlt da noch etwas in der proxy-host.conf oder ich habe das Funktionsprinzip komplett falsch verstanden...

  • Ausserdem solltest du ehrlich zu dir selbst sein: wenn du Schwierigkeiten bei der Einrichtung eines Reverse Proxy hast, bist du in der Lage, einen aus dem Internet erreichbaren Webserver zu administrieren?

    Es geht dabei um ein privates Projekt, bei dem ich mich selbst ein bisschen ausprobieren und dazulernen will. Man kann ja nicht direkt alles wissen und durch ausprobieren kann man lernen. Es geht hier also nicht um irgendwelche sensiblen Daten. ;)

  • Ich habe den Fehler gefunden: Ich hatte nicht an den Cache meines Browsers gedacht, weshalb immer die alte Seite angezeigt wurde :wallbash:


    Es reicht aus, in der Konfiguration des Standard-Virtual-Host folgende Zeile einzufügen:

    Code
    ProxyPass /cam http://localhost:8081/

    Dann kann ich unter 'http://<Raspberry-IP-Adresse>/cam' den Kamera-Stream erreichen. Damit der Stream nicht für jeden zugänglich ist, müsste man die Location /cam noch mit basic_auth sichern.


    Ich habe aber auch noch eine andere Lösung über php gefunden:

    Das php-Skript wird auf dem Server ausgeführt und hat deshalb Zugriff auf den lokalen Stream. Die php-Datei kann dann als Stream in html eingebunden werden:

    Code
    <img src="index.php" width="500" height="auto">

    Somit wird kein Reverse Proxy benötigt. Außerdem kann die bestehende Login-Funktion der Website zur Authentifizierung genutzt werden.


    Damit ist das Thema erledigt :thumbup:

    Danke für eure Hilfe.