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