IP-Webcam Recorder

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Bin ja leider schon mit meinen eigenen Versuchen gescheitert. Den Code verstehe ich im Wesentlichen, habe auch versucht das so zu handhaben: `data += str(content)`, aber dann hängt das Programm wieder. Ich würde nicht fragen, wenn ich es selbst hinbekäme...

Da ich nicht weiß, was genau hinter so einem M-JPEG Stream steckt und wie man ihn zerlegt, wäre ich nie auf die Boundary-Sachen gekommen.

Zur Info: soweit klappt alles, es rieselt Bytes in der Konsole. Nur muss ich jetzt noch die Bilder rausfummeln:

Code: Alles auswählen

# -*- coding: UTF-8 -*-
import urllib.request

def main(url, chunk_size=1024):
    f = urllib.request.urlopen(url)
    while True:
        content = f.read(chunk_size)
        if not content:
            break
        print(content)

if __name__ == "__main__":
    main("http://192.168.0.133/")
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Das lies dir doch einfach mal durch, wie das Protokoll aufgebaut ist. Wikipedia hat da nen Artikel zu. Im Prinzip läuft es darauf hinaus, dass du erst mal die Header liest, und ab dort immer bis zum Ende eines Bildes. Die Position (also an welchem Byte) des Endes weißt du entweder durch irgendwelches Boundary-Geparse oder möglicherweise kommt da auch eine Byteanzahl mit (Stichwort Content-Length).

Wenn ich mich recht entsinne ist das doch Multipart, was da verschickt wird? defnull hat da mal einen wunderprächtigen Parser für geschrieben, laut README kann der auch Parts unbekannter Größe. https://github.com/defnull/multipart/tree/develop Vielleicht bist du damit ja schon fertig, wer weiß :-)
Antworten