2017-01-23 19 views
1

Прежде всего, я новый http и mjpeg-поток, поэтому очень возможно, что у меня есть только проблема понимания. Может быть, кто-то может мне помочь здесь.Кто получает поток mjpeg из ip-камеры в uwp с Fluent HTTP

У меня возникла проблема с получением потока mjpeg с моей ip-камеры. Ссылка для вызова потока прекрасно работает в браузере, и я могу наблюдать за живым потоком. (например, http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password, где xx.xx и пользователь, пароль являются заполнителями)

Если я пытаюсь подключиться в приложении uwp к ip-камере, я не получаю поток обратно. Я пытаюсь так много решений, но никто до сих пор не работает для меня. (Вот некоторые из пытаются решения:

  • MjpegProcessor
  • Ozeki SDK камеры
  • IP Camera Viewer
  • Onvif просмотра камеры) Я также читал так много полезных статей здесь, но теперь один имеет правильный ответ.

Мой исходный код выглядит следующим образом:

 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); 
       } 

      } 
     } 

и я всегда получил: Flurl.Http.FlurlHttpException: Запрос на http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password неудачу с кодом состояния 401 (Несанкционированное) на var streamResult = await baseUrl .AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" }) .SetQueryParams(newParams).WithClient(fc).GetStreamAsync();.

если я изменить BaseUrl в var baseUrl = new Url("http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11&-usr=user&-pwd=password"); и попытаться соединить я получил тот же код состояния 401.

большое спасибо заранее!

Обновление: Ссылка для вызова потока в браузере HTP: //192.168.xx.xx: 8081/CGI-BIN/hi3510/mjpegstream.cgi группу -CHN = 11 & -usr = пользователь & -pwd = пароль. ->ОК

В примере SourceCode выше первого вызова с var loginResponse = await baseUrl.WithClient(fc).PostUrlEncodedAsync(new { usr = "user", pwd = "password" }); ->ОКUrl http://192.168.xx.xx:8081

В примере Sourcode выше, второй вызов с var streamResult = await baseUrl.AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" }).SetQueryParams(newParams).WithClient(fc).GetStreamAsync(); ->ИсключениеFlurl.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 

Это то, что вы хотите?

+0

Можете ли вы добавить тесты к описанию проблемы? Вы подключаете 2x к IP-камере. Сначала все нормально, второй не удается. Введите оба URL-адреса и результаты из своего браузера с точно такими же URL-адресами. Нуждаются ли браузеры в доступе к сайту? На каком запросе есть окно регистрации/входа? – Tatranskymedved

+0

на 'Url http: //192.168.xx.xx: 8081' браузеру нужен логин. Также на 'Url http: //192.168.xx.xx: 8081/cgi-bin/hi3510/mjpegstream.cgi? -chn = 11' там нет логина с' & -usr = user & -pwd = password' – CoolRunnings

+0

1st. Вы должны немного ознакомиться с HTTP. Существует несколько вариантов аутентификации, и вряд ли это зависит от того, как он позволяет вам это делать. Один из вариантов - отправить HTTP-запрос (например: GET HTTP/1,1 index.php) с включенными параметрами Auth в заголовке HTTP (это BTW первый успешный логин). Однако кажется, что ваш HTTP-сервер (IP-камера) не разрешает вход через URL-адрес. Вы должны попытаться найти способ, как добавить учетные данные аутентификации в HTTP-запрос 2-го типа (Stream). Это понятно? – Tatranskymedved

ответ

0

401 (Неразрешенное) код говорит сам за себя: У вас есть проблемы с аутентификацией:

  • Проблема может быть, что IP-камера не может уполномочил вас через учетные данные в URL.

  • (or) У вас может быть опечатка в других местах учетных данных.

  • (или) Для удаленного подключения, не использующего браузер, IP-камерам может потребоваться использование другой базы аутентификации. Например. некоторые браузеры отправляют это через HTTP-заголовок.

  • Вы прошли техническое описание для передачи IP? Это может потребовать аутентификации каждый раз, когда вы пытаетесь подключиться, что может возникнуть необходимость отправить данные во время потока открывающимися:

  • Я только что проверил link in comments, и указать учетные данные примеры, как:

http://IP-Address:Port/tmpfs/snap.jpg?usr=admin&pwd=instar: : Снимок (720p/1280x720 пикселей)

Обратите внимание, что перед «usr» или «pwd» нет «-».

+0

Спасибо за ваш ответ. – CoolRunnings

+0

Устранена ли проблема? – Tatranskymedved

+0

Нет, были проблемы с командой возврата в этом комментарии ;-) Спасибо за ваш ответ. Да, я знаю это, но я не могу идти дальше с этой ошибкой. Для этой информации я использую документ камеры на http://www.instar.com/faq_cgi_hd. Ваш образец не работает, потому что 'Task не имеет метода .AppendPathSegments'. Поэтому в моем примере выше я разделил действие в два этапа. Но я также думаю, что мне нужна «вторая» проверка или один вызов с правильным путем для назначения cgi. Но как я это делаю? – CoolRunnings

 Смежные вопросы

  • Нет связанных вопросов^_^