[C++] Problem mit Stream von IP - CAM

xglass

Grünschnabel
Hallo Liebe User,

ich habe folgnedes Problem. Ich bin im Besitz einer Ip - Cam auf der ein Webserver läuft und welche ich über ip/port/HTTP (GET etc) anspreche.
Ich habe das mit sockets gelöst und connecte zur Kamera und sende meinen Header an die Video.cgi und bekomme einen Stream wieder. Um mal zu schauen was da drin steht, gebe ich das erstmal als Text aus.

Code:
HTTP/1.0 401 Authorization Required
WWW-Authenticate: BASIC realm="Administrator or User"

Password Error. 
Content-length: 12230
Content-type: image/jpeg 
und ne meneg bytes ... ÿØÿâ VVL HH     ÿÛ „ 

-

danach kommen dann die Bilder
Code:
--video boundary--
Content-length: 12262
Content-type: image/jpeg 
...ne menge bytes
das wiederholt sich dann ... (mehrere Bilder^^)

Wie gehts jetzt weiter? Ich habe für die Ausgabe eine Funktion GetLine die Zeichen für Zeichen die Antwort ließt und die bei einem \n returnt.
Code:
void GetLine(int socket, std::stringstream& line){
    for(char c; recv(socket, &c, 1, 0) > 0; line << c){ 
        if(c == '\n'){ 
            return; 
        } 
    }
    throw CreateSocketError(); 
}

Nun soll das Ganze aber als Bild wiedergegeben werden.
Kann mir da wer helfen!

Thx xs
 
Zuletzt bearbeitet:
damit das nach dem Empfang auch ein Bild ist, musst du die empfangenen Daten noch
bearbeiten: Leerzeichen,Tabs,CRLF etc müssen entfernt werden - danach sollte das so .

Was den Header Video.cgi angeht: steht ja drin, dass der eine Authentifizierung benötigt,
aber das hast du ja offensichtlich hinbekommen, sonst bekommst du ja keine Bildchen :D

LG
Andy
 
Danke für deinen Typ. Das mit der Auth. hat unsere Pool-Betreuerin für die das Prog. ist,erledigt.Es soll dann noch ein PWD Schutz mit implementiert werden. Aber das kommt später. Das ist ein Hochschul-Projekt im Fach Betriebssysteme und es wird an verschiedenen Lösungen gearbeitet welche die Kamera NICHT bereits als Software mitliefert. Ein kleines Problem ist der Codec : mjpeg. So bekommen wir von der CGI ständig Bilder und müssen die ( in dem wir im Header --video boundary-- suchen) filtern und interpretieren.

Und ich bekomm schon Bilder^^

Code:
fstream fout("test_localhost.jpg",ios::binary | ios::out);

hilft nach dem man --video boundary-- gefunden hat. Nun muss das ganze ständig an die Image Box. :confused: :confused:
 
hm, klingt interessant Euer Projekt - habe dazu viell. eine Idee:
Hat man auf die Software der Cam vollen zugriff, wäre evtl. FTP eine bessere Lösung *denk* - ist doch etwas flexibler, und die Daten kommen binär und nicht erst Base64.
Ausserdem erspart man sich, den ganzen Header zu zerpflücken :D

LG
Andy
 
Zurück