2017-01-23 2 views
1

Tout d'abord, je suis un nouveau http et mjpeg-stream, donc il est très possible que je n'ai qu'un problème de compréhension. Peut-être que quelqu'un peut m'aider ici de toute façon.Qui reçoit le flux mjpeg de la caméra ip dans uwp avec Fluent HTTP

J'ai eu un problème pour obtenir le flux mjpeg de ma caméra IP. Le lien pour appeler le flux fonctionne très bien dans le navigateur et je peux regarder le livestream. (par exemple http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password, où xx.xx et utilisateur, mot de passe sont des espaces réservés)

Si j'essaie de me connecter dans une application uwp à la caméra IP, je n'obtiens aucun flux. J'essaye tellement de solutions mais personne ne travaille pour moi. (Ce sont quelques-unes des solutions essayant:

  • MjpegProcessor
  • OZEKI SDK Camera
  • IP Camera Viewer
  • ONVIF Camera Viewer) Je lis aussi tant d'articles utiles ici, mais maintenant on a la bonne réponse.

Mon sourcecode ressemble comme suit:

 var newParams = new[] 
     { 
      new KeyValuePair<string, string>("-chn", "11") 
     }; 

     var baseUrl = new Url("http://192.168.xx.xx:8081"); 
     Debug.WriteLine(baseUrl); 

     using (var fc = new FlurlClient(baseUrl).EnableCookies()) 
     { 
      // login on page 
      var loginResponse = await baseUrl 
             .WithClient(fc) 
             .PostUrlEncodedAsync(new 
             { 
              usr = "user", 
              pwd = "password" 
             }); 

      //StatusCode 200 
      if (loginResponse.IsSuccessStatusCode) 
      { 
       try 
       { 
        // get mjepg stream from page 
        var streamResult = await baseUrl 
               .AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" }) 
               .SetQueryParams(newParams) 
               .WithClient(fc) 
               .GetStreamAsync(); 

        var memNewStream = new MemoryStream(); 
        await streamResult.CopyToAsync(memNewStream); 
        memNewStream.Position = 0; 
        mediaElement.SetSource(memNewStream.AsRandomAccessStream(), "multipart/alternative"); 
       } 
       catch (FlurlHttpException ex) 
       { 
        Debug.WriteLine(ex); 
       } 

      } 
     } 

et je me suis toujours: Flurl.Http.FlurlHttpException: Demande de http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password échoué avec le code d'état 401 (non autorisée) sur var streamResult = await baseUrl .AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" }) .SetQueryParams(newParams).WithClient(fc).GetStreamAsync();.

si je change la baseURL en var baseUrl = new Url("http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password"); et essayer de se connecter i eu le même code d'état 401.

un grand merci à l'avance!

Mise à jour: Le lien pour appeler le flux dans le htp du navigateur: //192.168.xx.xx: 8081/cgi-bin/hi3510/mjpegstream.cgi -CHN = 11 & -usr = user & -pwd = mot de passe. ->OK

Dans l'exemple Sourcecode au-dessus du premier appel avec var loginResponse = await baseUrl.WithClient(fc).PostUrlEncodedAsync(new { usr = "user", pwd = "password" }); ->OKUrl http://192.168.xx.xx:8081

Dans l'exemple Sourcode ci-dessus, le deuxième appel avec var streamResult = await baseUrl.AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" }).SetQueryParams(newParams).WithClient(fc).GetStreamAsync(); ->ExceptionFlurl.Http.FlurlHttpException: Request to http://192.168.178.35:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11 failed with status code 401 (Unauthorized).

Url http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11 

C'est ce que vous voulez?

+0

S'il vous plaît pouvez-vous ajouter des tests à la description du problème? Vous vous connectez 2x vers la caméra IP. Au début c'est OK, 2ème échoue. S'il vous plaît entrer les deux URL et les résultats de votre navigateur avec exactement les mêmes URL. Les navigateurs veulent-ils quoi que ce soit lorsqu'ils accèdent au site? Sur quelle requête existe-t-il une fenêtre de connexion/connexion? – Tatranskymedved

+0

sur 'Url http: //192.168.xx.xx: 8081' le navigateur veut un login. Aussi bien sur 'Url http: //192.168.xx.xx: 8081/cgi-bin/hi3510/mjpegstream.cgi? -chn = 11' il n'y a pas de login avec le' & -usr = utilisateur & -pwd = mot de passe' – CoolRunnings

+0

1er Vous devriez vous familiariser un peu avec HTTP. Il y a plusieurs options pour s'authentifier et cela dépend peu du serveur comment cela vous permet de le faire. L'une des options est d'envoyer une requête HTTP (ex: GET HTTP/1,1 index.php) avec les options Auth incluses dans l'en-tête HTTP (c'est-à-dire le premier login réussi). Cependant, il semble que Votre serveur HTTP (caméra IP) n'autorise pas la connexion via une connexion URL. Vous devriez essayer de trouver un moyen, comment ajouter des informations d'identification d'authentification à la requête HTTP du 2ème type (Stream). Est-ce clair? – Tatranskymedved

Répondre

0

Code 401 (Unathorized) parle pour lui-même: Vous avez un problème avec une authentification:

  • Le problème est peut-être que la came IP Vous ne pouvez pas autorisés par les pouvoirs dans l'URL.

  • (ou) Vous pourriez avoir une faute de frappe ailleurs dans les informations d'identification. (Ou) Pour une connexion à distance n'utilisant pas le navigateur, la caméra IP peut nécessiter l'utilisation d'une autre base d'authentification. Par exemple. certains navigateurs l'envoient via un en-tête HTTP.

  • Avez-vous parcouru la fiche technique pour les communications IP? Il peut exiger une authentification pour chaque fois que vous essayez de vous connecter, ce qui pourrait nécessiter d'envoyer les informations d'identification lors de flux Openning:

  • Je viens de vérifier link in comments, et ils précisent des exemples lettres de créance comme:

http://IP-Address:Port/tmpfs/snap.jpg?usr=admin&pwd=instar: : Snapshot (720p/1280x720 Pixel)

Veuillez noter qu'il n'y a pas de '-' devant "usr" ou "pwd".

+0

Merci pour votre réponse. – CoolRunnings

+0

A-t-il résolu le problème? – Tatranskymedved

+0

Non, eu des problèmes avec la commande de retour dans ce commentaire ;-) Merci pour votre réponse. Oui, je le sais, mais je ne peux pas aller plus loin avec cette erreur. J'utilise le docu d'appareil photo sur http://www.instar.com/faq_cgi_hd pour cette information. Votre exemple n'a pas fonctionné, car 'Task n'a pas de méthode .AppendPathSegments'. Donc, dans mon exemple ci-dessus, j'ai divisé l'action en deux étapes. Mais je pense aussi que j'ai besoin d'une "deuxième" validation ou d'un seul appel avec le bon chemin vers la destination cgi. Mais comment je fais ça? – CoolRunnings