Frames und Stream einer LAN-Kamera abrufen macht Probleme



  • Hi,

    Ich habe eine Digitus DN-16003 LAN-Kamera, wer sie kennt weis das es nichts besonderes ist, mich stört bei der Kamera die Tatsache das sie kein Standard Stream Protokoll unterstützt sondern einsehr simples eigenes.

    Durch Network Sniffing und das Decompilen des Java Applets hab ich den Ablauf in C mit Winsock nachgebildet.

    Ablauf:

    Client sendet "0110"
    Kamera sendet Frame
    Client sendet "0110"
    Kamera sendet entweder Frame oder \x00\x00\x01\x00 oder \x00\x00\x02\x00
    Client sendet "0110"
    Kamera sendet Frame

    also wirklich sehr einfach 🙂
    Es handelt sich dabei um einen MJPEG-Stream der aus einzelnen JFIF v1.1 Bildern besteht (sagt zumindest JPEGsnoop)

    Ich muss von einem Empfangenem Frame die ersten 4 Bytes überspringen damit jeder Bildbetrachter damit zurecht kommt.

    Gut soweit funktioniert alles, aber was mich sehr stört, das Java Applet, die mitgelieferte Windows Software und VisionGS arbeiten alle gleich was ich in Wireshark überprüft habe und jedes Programm erhält einen sauberen Stream.

    Wenn ich die Daten abrufe und mir die Bilder ansehe enthalten die Frames Artefakte und fehlerhafte Pixeldaten, der Stream ist gar nicht zu gebrauchen.

    Ich vermute das der Fehler in meinem Code liegt, oder die JFIF Kompression sehr speziell ist, kenne mich mit dem Format nicht besonders aus.

    Würde mich sehr freuen wenn mir dabei jemand behilflich sein könnte.

    Anbei ein Frame, ein 100 Frames langer Stream und der Sourcecode vom Java Applet.

    Mein Code ist noch sehr unschön und überprüft viele Situationen nicht, ich weis das und es wird auch noch weiter ausgebaut, aber erst wenn die Grundfunktion erledigt ist.

    Mein Code http://pastebin.com/3uhBxD7z

    Frame: http://2ds.eu/digitus/frame.jpg
    Stream: http://2ds.eu/digitus/stream.mjpg
    Java Code: http://2ds.eu/digitus/java_video.class.txt

    Der Stream besteht bloß aus mehreren Frames die hintereinander in die Datei geschrieben wurden. VLC und SMPlayer spielten den Stream ab, hatte aber nichts mehr mit den Frames zu tun 🙂

    greets



  • fopen:
    In order to open a file as a binary file, a "b" character has to be included in the mode string.

    Dummheit... klarerweise funktionierts jetzt.


Anmelden zum Antworten