Rtsp视频流与身份验证

问题描述 投票:0回答:1

我正在尝试使用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);

反正不行。所以我在互联网上看到我想要base64 basic auth所以:

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网络分析,这台相机使用了摘要授权。那是生成它的一种方法吗?

java android rtsp android-videoview
1个回答
0
投票

用于流rtsp的库必须支持摘要式身份验证。

它不像添加标题那么简单。

Digest Auth with RTSP

启用摘要的RTSP服务器应使用DESCRIBE 401 unauthorized响应See D.2.2请求,并在WWW-Authenticate标头中返回一个随机数,例如:

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

然后,客户端使用nonce生成可用于身份验证的授权标头,

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)
© www.soinside.com 2019 - 2024. All rights reserved.