Потоковое видео Rtsp с аутентификацией

Я пытаюсь подключиться к стриминговым IP-камерам с IP-адресом. Я пытался подключиться с помощью:

rtsp://username:password@ip_camera

но просмотр видео не нравится. Я пробовал с картой, например:

Uri source = Uri.parse("rtsp://ipcamera");
headers = new HashMap<String, String>();
headers.put("Username", "user");
headers.put("Password", "password");
videoView.setVideoURI(source, headers);

все равно не работает. Итак, я прочитал в Интернете, что ему нужна базовая аутентификация base_64, поэтому:

String authHeader = "Basic " + Base64.encodeToString("username:password".getBytes(),Base64.URL_SAFE | Base64.NO_WRAP);
headers.put("Authorization", authHeader);
Uri source = Uri.parse("rtsp://ipcamera");
videoView.setVideoURI(source, headers);

ничего. Та же ошибка

E/MediaPlayerNative: error (1, -2147483648)

что это означает неизвестную ошибку (?)

Любые советы, чтобы найти рабочий метод? Спасибо

РЕДАКТИРОВАТЬ

С помощью анализа сети Chrome я обнаружил, что эта камера использует дайджест-авторизацию. Это способ его генерировать?

ты уверен что ключ Username

Manoj Perumarath 27.03.2019 15:49

Я не. Tring с именем пользователя, те же результаты.

Matteo Sausto 27.03.2019 16:00

вы пробовали этот URL в VLC Player

Manoj Perumarath 27.03.2019 16:02

Да, URL вида rtsp://user:pass@ip работает

Matteo Sausto 27.03.2019 16:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
7 855
1

Ответы 1

Библиотека, которую вы используете для потоковой передачи rtsp, должна поддерживать дайджест-аутентификацию.

Это не так просто, как добавить заголовок.

Дайджест-аутентификация с RTSP

Сервер RTSP с поддержкой дайджеста должен отвечать на запрос DESCRIBE с помощью 401 unauthorizedСм. D.2.2., возвращая одноразовый номер в заголовке WWW-Authenticate, например.

WWW-Authenticate: Digest realm = "GStreamer RTSP Server", nonce = "1c91a068811f1029"

Затем клиент использует одноразовый номер для создания заголовка авторизации, который можно использовать для аутентификации.

Authorization: Digest username = "admin", realm = "GStreamer RTSP Server", nonce = "1c91a068811f1029", uri = "rtsp://0.0.0.0:8554/live.sdp", response = "ef18317f111b1446dc4c6a11b4f4ebf3"

Приведенное выше значение ответа снова генерируется для каждого запроса RTSP путем хеширования некоторой информации следующим образом.

HA1 = MD5(username:realm:password)
HA2 = MD5(method:digestURI)
response = MD5(HA1:nonce:HA2)

Спасибо за ответ, завтра проверю. Один вопрос: как мне сгенерировать HA1 и HA2? Я импортировал губчатый замок, но не знаю, правильный ли это путь. Студия Android предлагает следующую статическую строку: import static org.spongycastle.bcpg.HashAlgorithmTags.MD5;

Matteo Sausto 01.04.2019 14:44

Другие вопросы по теме