RTSP потоковое видео с аутентификацией - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь подключиться к стриминговым 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)

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

Какой-нибудь совет, чтобы найти метод работы? Спасибо

EDIT

Я обнаружил, с помощью chrome network analysis, что эта камера использует Digest Authorization. Это способ его генерации?

1 Ответ

0 голосов
/ 30 марта 2019

Библиотека, которую вы используете для потоковой передачи 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)
...