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