Salut,
Quelques suggestions pour ton code:
- pas besoin d'utiliser QString::fromStdString() comme tu le fais. Par exemple, tu peux remplacer ceci :
1 2
| QString qStr(QString::fromStdString("http://192.168.0.32"));
QUrl qurl(qStr); |
par
QUrl qurl("http://192.168.0.32");
et tu peux aussi definir les parametre via QUrl au lieu de les encoder en dur:
1 2 3
| qurl.addQueryItem("resolution", "352x288");
qurl.addQueryItem("compression", "40");
qurl.addQueryItem("fps", "10"); |
En C++, on va éviter de lire carcatère par caractère comme tu le fais avec read(1). On va préférer faire un readAll() et parcourir le résultat obtenu. Tu peux même faire directement une recherche dans le tableau renvoyé :
1 2
| QByteArray data = http->readAll();
int position = data.indexOf( "ton delimiteur d'image" ); |
A part ça, il y a deux problèmes dans ton code :
- tu te connectes à dataReadProgress() qui sert à t'informer de la progression du download() au lieu de te connecter à readyRead() qui t'informe qu'il y a des données à lire. Résultat : tu essayes de lire des données quand il n'y a rien à lire (c'est en progress...) et read() te renvoie -1...
- il y a un problème dans ton algorithme de lecture. En effet, QHttp émet readyRead() une seule fois pour te dire qu'il y a tout un paquet d'octets à lire. Et toi, tu ne lis que un seul octet de ce paquet! Tout le reste est perdu ! En fait, tu perds certainement des dizaines d'images de ta caméra, et c'est simplement quand tu as la chance de lire un délimiteur que "ça marche". Mais il y a une grosse erreur dans le code...
Donc, pour faire simple :
- tu dois te connecter à readyRead() et non pas dataReadProgress()
- tu dois appeler readAll() et non pas read(1)
- tu dois parcourir le "tableau" QByteArray que te renvoie readAll() pour trouver ce que tu recherches
Et ça devrait fonctionner
Partager