IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Erreur lecture flux http et ecriture fichier


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [C#]Erreur lecture flux http et ecriture fichier
    Bonjour,

    je suis actuellement en train de travailler sur des caméra AXIS pour essayer de récupérer le flux MJPG.
    Ils utilisent le protocole push http pour transmettre les images.
    On reçoit en continu un flux de donnée de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --myboundary
    Content-Type: image/jpeg
    Content-Length: 53313
     
    CrHÿØÿþ
    = @ŒkD
    ÿþ
    Cëu¡7
    [etc...]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    --myboundary
    Content-Type: image/jpeg
    Content-Length: 54287
    [etc...]

    Dans le [etc...] il y a les octets correspondant à l'image. Lors de l'appel du flux, on retrouve toujours les 4 premiere ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [--myboundary
    Content-Type: image/jpeg
    Content-Length: 53313
    ]
    J'aimerai récupérer les octets de la premiere image.
    Mon idée est de récupere la taille de l'image et d'écrire dans le fichier les x prochain octets.
    Mais au final je perd des blocks de flux. Quand je regarde avec un éditeur hexadecimal, j'ai l'impression de perdre un block sur 2.

    Quelqu'un sait où j'ai fait une erreur ou as une idée?

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    char[] Caractaire_Separateur = new Char[] { ' ' };
    //cree le separateur de chaine
    System.Net.WebRequest myRequest;
    myRequest = System.Net.WebRequest.Create("http://192.168.200.232/mjpg/video.mjpg");
    //adresse du flux mjpg
    myRequest.Credentials = new System.Net.NetworkCredential("user", "pass");
    //passer le htaccess
    System.Net.WebResponse myResponse;
    myResponse = myRequest.GetResponse();
    System.IO.Stream myStream = myResponse.GetResponseStream() ;
    System.IO.StreamReader streamRead = new System.IO.StreamReader(myStream);
     
    streamRead.ReadLine();
    //enleve le --myboundary
    streamRead.ReadLine();
    //enleve le content-type
    String size = streamRead.ReadLine();
    //recupere le countent-size
    Console.WriteLine(size);
    string[] Result_Separation = size.Split(Caractaire_Separateur);
     //on decoupe
    int value = Convert.ToInt32(Result_Separation[Result_Separation.Length-1]);
    //pour récupere la taille en int
    myBuff = new char[1024];
    int totalByteRead=0;
    int readByte;
     
    System.IO.FileStream fs = new System.IO.FileStream("C:/temp/image.jpg", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
     
    //on ouvre le fichier de destination
    System.IO.StreamWriter ecrire = new System.IO.StreamWriter(fs);
    //on cree le writer
     
    while (totalByteRead < value)//tant qu'on a pas tout lu
    {
    readByte = streamRead.Read(myBuff, 0, 1024);
    //on lit au maximum 1024 caractere
    ecrire.Write(myBuff,0,readByte);
    //on ecrit dans le fichier
    totalByteRead += readByte;
    }
     
    ecrire.Close();
    fs.Close();
    ----------------------------------------

    [edit]En fait, il y a soit le StreamReader ou le StreamWritter qui m'efface des caracteres.
    J'ai remplacer par des BinaryReader et BinaryWritter mais ca n'a rien changé.

    Par exemple, l'entete d'un fichier JPEG commence par OxFFoxD8 et le jpeg se termine par OxFFOxD9. MAis je ne retrouve aucun OxFF dans le fichier créer.

    Peut etre un bout de piste que j'exploite mais je suis preneur si vous avez des solutions.

    f.colo
    [/edit]

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Essaie en remplacant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myBuff = new char[1024];
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myBuff = new byte[1024];
    Avec les chars tu peux te retrouver avec de l'Unicode par défaut, et donc un char = 2 octets, d'ou la perte de la moitié de ton fichier.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci Sthect mais j'ai trouvé mon erreur.

    Il faut faire attention à l'encodage utilisé dans la lecture et l'écriture du stream.
    Dans mon code précédent il faut modifier comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("iso-8859-1");
    System.IO.StreamReader streamRead = new System.IO.StreamReader(myStream, encoding);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.StreamWriter ecrire = new System.IO.StreamWriter(fs,encoding);
    et ça fonctionne nikel. J'arrive bien à récupérer l'image JPG du flux MJPG d'une caméra AXIS 213 PTZ.

    Amicalement.

    f.colo

    ----------------------------------------
    [edit]A y etre, autant donner les correctif au fur et a mesure.
    L'erreur suivante était que j'ecrivais trop de donnée dans mon fichier (l'image suivnate en fait).
    Donc il faut tester si, au dernier coup, je ne vais pas lire trop de donnée pour n'écrire que les données interessantes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    while (totalByteRead < value)
    {
    if (totalByteRead + BUFFSIZE > value)
    {
    readByte = streamRead.Read(myBuff, 0, value - totalByteRead);
    }
    else
    {
    readByte = streamRead.Read(myBuff, 0, BUFFSIZE);
    }
    ecrire.Write(myBuff, 0, readByte);
    totalByteRead += readByte;
    Console.WriteLine(totalByteRead);
    }
    [/edit]

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Quelle valeur faut il mettre à BUFFSIZE ? Car j'ai mis ce programme dans une class Button_click et au bout de 3 click, le programme plante, j'ai mis une valeur de 256, quelqu'un peut m'aider ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Il faudrait aussi epnser à fermer le stream !!!! pour que ça marche !!


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des erreurs lecture/ecriture des fichiers
    Par darkwalker dans le forum ANT
    Réponses: 1
    Dernier message: 07/07/2012, 18h56
  2. Erreur sur lecture/ecriture fichier
    Par HeB91 dans le forum SharePoint
    Réponses: 2
    Dernier message: 26/01/2010, 09h29
  3. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  4. [LG]Lecture-ecriture fichier
    Par arno15 dans le forum Langage
    Réponses: 19
    Dernier message: 03/02/2005, 22h25
  5. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo