#java #android #rtsp #android-videoview
#java #Android #rtsp #android-видеообзор
Вопрос:
Я пытаюсь подключиться к IP-камерам straming с 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 network analyze я обнаружил, что эта камера использует авторизацию с дайджестом. Это способ его создания?
Комментарии:
1. вы уверены, что ключ
Username
2. Я не такой. Повторяю попытку с именем пользователя, те же результаты.
3. вы пробовали использовать этот URL в VLC Player
4. Да, URL, подобный rtsp://user:pass@ip работа
Ответ №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)
Комментарии:
1. Спасибо за ответ, я протестирую его завтра. Один вопрос: как я могу сгенерировать HA1 и HA2? Я импортировал spongy castle, но я не знаю, правильный ли это путь. Android studio предлагает следующую статическую строку: импортировать статический org.spongycastle.bcpg. HashAlgorithmTags.MD5;