Stream mit Apache bereitstellen

Alles, was den Apache betrifft, kann hier besprochen werden.

Stream mit Apache bereitstellen

Postby mode » 30. June 2008 10:11

Hallo,

ich habe in meinem LAN eine Webcamera die ihr Bild als Stream bereit stellt. Dieses kann ich mit wget von der Kamera laden. Nun möchte ich, dass mein Apache der auch vom Internet aus erreichbar ist bei Bedarf diesen Stream abholt und dem User von aussen weiterleitet. Direkten Zugriff auf die WebCamera möchte ich vermeiden.

Mit welchen MItteln ist dies möglich??

VG
mode
 
Posts: 9
Joined: 11. September 2006 16:03

Postby Nobbie » 30. June 2008 13:01

Was für ein Protokoll ist das denn?
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Postby mode » 30. June 2008 20:15

Ganz normal HTTP. Die Adresse kann man auch mit
wget http://ipdercam/img/main_fs.htm

ansprechen.

Viele Gruesse
mode
 
Posts: 9
Joined: 11. September 2006 16:03

Postby Nobbie » 01. July 2008 11:14

Das hilft nun nicht viel: bekommst Du dann direkt den Stream (via HTTP??) oder siehst Du dann ein HTML Fenster mit einem Multimediaobjekt darin?
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Postby mode » 04. July 2008 18:04

Hallo,

bin schon deutlich weitergekommen

Mein CGI Script sieht so aus: (test.asf)

Code: Select all
!/bin/bash

echo  -e "Content-type: application/octet-stream
Accept-Ranges: bytes
Connection: close\n"

wget cam.tld/img/video.asf -O -



Dies funktioniert auch schon.

Also ein
Code: Select all
wget server.tld/cgi-bin/test.asf
liefert mir den Livestream der Cam in eine Datei.
Ebenso wie es ein
Code: Select all
wget cam.tld/img/video.asf
tun wuerde.

Das ist schön!

ABER:
Wenn ich einem Mediaplayer die URL vom Server gebe (die ja mit wget das gleiche liefert die die Kamera) dann spielt dieser kein Video ab. Mit Wireshark konnte ich beobachten wie der Player immer wieder das File von der Kamera angefordert hat, aber dann nach wenigen Sekunden die Verbindung abgebaut (RST) und wieder neu aufgebaut. Es erscheint kein Bild.

Fehlerquelle:
- Durch den Apache Server wird der Stream irgenwie verfaelscht so dass der Streamplayer damit nicht mehr klar kommt.


Daher habe ich auf dem Server mit netcat gespielt:
Code: Select all
erver:/netz # netcat localhost 80 > log.txt
GET /cgi-bin/test.asf HTTP/1.1
Host: localhost

^C punt!



Der Inhalt der Logdatei sieht so aus:
Code: Select all
HTTP/1.1 200 OK
Date: Fri, 04 Jul 2008 16:27:13 GMT
Server: Apache/2.2.8 (Linux/SUSE)
Accept-Ranges: bytes
Connection: close
Transfer-Encoding: chunked
Content-Type: application/octet-stream

179
0&²uŽfϦ٠ª bÎlG         ¡Ü«ŒG©ÏŽä À Seh       #Eg‰«Íï        ÿÿÿÿ            ÿÿÿÿ    ÿÿÿÿ    ÿÿÿ                Ð  Р  »
<< weitere Bin Daten >>


Hier sieht man immer die Zahl 179 vor den Binaerdaten.
Und genau diese 179 erscheint NICHT wenn man den Stream direkt von der Cam abholt. Siehe Log von Netcat direkt von der Cam:

Code: Select all
HTTP/1.1 200 OK
Server: thttpd/2.20b 10oct00
Content-type: application/octet-stream
Date: Fri, 04 Jul 2008 17:45:31 GMT
Last-modified: Fri, 04 Jul 2008 17:45:31 GMT
Accept-Ranges: bytes
Connection: close

0&²uŽfϦ٠ª bÎlG         ¡Ü«ŒG©ÏŽä À Seh       #Eg‰«Íï        ÿÿÿÿ            ÿÿÿÿ    ÿÿÿÿ    ÿÿÿ                Ð  Р
<< weitere Bin Daten >>


Ein wenig googlen zeigte mir dass die 179 die Groesse des Chunks ist da der Apache automatisch
Code: Select all
Transfer-Encoding: chunked

gesetzt hat. Wie bekomme ich das raus?


Edit:
Sende ich meinem Server einen HTTP 1.0 Request so wird der STream nicht gechunked gesendet. Das will ich!
Leider ist die Playersoftware so doof, dass sie HTTP 1.1 Requests sendet aber mit den Chunks nichts anfangen kann :-(

Gibt es da eine Lösung?



Viele Gruesse

Mode
mode
 
Posts: 9
Joined: 11. September 2006 16:03

Postby Nobbie » 05. July 2008 11:58

>Direkten Zugriff auf die WebCamera möchte ich vermeiden.

Wieso eigentlich? Den Pfadnamen entnehme ich, dass es möglicherweise um eine Linksys Kamera handelt (ich habe auch so eine und die hat dieselben Pfade), die ja auch einen eigenen Webserver besitzt.

Ich würde den Stream direkt von außen zugänglich machen - was ich für mich in der Praxis auch so gemacht habe - was spricht denn dagegen?
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Postby Nobbie » 05. July 2008 13:59

So, ich habe mal herumgespielt, es geht ganz einfach mit einem ReverseProxy.

Beispiel:

Code: Select all
    ProxyPass  /img/video.asf    http://192.168.178.12/img/video.asf
    ProxyPassReverse  /img/video.asf    http://192.168.178.12/img/video.asf


Schreibe das in Deine httpd.conf (oder in die httpd_vhosts.conf - ich habe mir für eine DynDNS Adresse einen vhost eingerichtet), wobei Du 192.168.178.12 durch die lokale IP Deiner Kamera ersetzen mußt (bei mir ist es eben diese IP).

Dann Apache neu starten und dann kannst Du auf jedem Rechner im Windows Mediaplayer eine URL öffnen mit diesem Format:

http://ip.deines.servers/img/video.asf

Funktioniert einwandfrei, setzt natürlich voraus, dass der Videocodec auf dem Rechner vorhanden ist.
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: Peterzzz and 3 guests