有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带身份验证的java Rtsp视频流

我想用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 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 network analyze,我发现这款相机使用摘要授权。这是产生它的一种方式吗


共 (1) 个答案

  1. # 1 楼答案

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

    这并不像添加标题那么简单

    用RTSP

    启用摘要功能的RTSP服务器应使用401 unauthorized{a1}响应DESCRIBE请求,在WWW-Authenticate头中返回一个nonce,例如

    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)