【问题标题】:RTSP stream in android with username and passwordandroid中带有用户名和密码的RTSP流
【发布时间】:2017-07-23 05:33:39
【问题描述】:


我的任务是在 android 中创建一个 android 应用程序来检查城市的一些 IP 摄像机。使用现有的 RTSP 网址,即 rtsp://admin:pms7112@xxx.xx.xx.xxx:554/cam/realmonitor?channel=1&subtype=0 我可以在 VLC 播放器中获取流,但在 android 中没有运气。我试过 videoview 原生播放器和media player
几乎每个解决方案都给了我

MediaPlayer:setDataSource IOException 发生: java.io.FileNotFoundException:没有内容提供者:rtsp://...

是否应该因为用户名和密码在string 中而出现此问题?您如何将用户名和密码添加为查询string

编辑
媒体播放器版本
媒体播放器 mediaPlayer = new MediaPlayer();

    try
    {
        mediaPlayer.setDataSource("rtsp://admin:pms7112@iphere:554/cam/realmonitor?channel=1&subtype=0");
        mediaPlayer.prepare();
        mediaPlayer.start();
    }
    catch (IOException ex)
    {
        ex.printStackTrace();
    } 


更新:
所以...看来这是我可以使用 url 的唯一方法...我无法以其他方式验证用户。拥有相机并为城市设置的公司不允许我们使用其他格式。他们说,vlc 浏览器插件玩得很好,他们不会改变任何东西......那么有没有任何库可以实现带有身份验证的 rtsp 流。我听说客户端和服务器之间进行了握手

【问题讨论】:

  • 贴出setDataSource()的代码?
  • 您确定您的流可以播放吗?例如,您是否在 VLC 中对其进行过测试?
  • 是的,VLC 玩得很好
  • 我很关心 url 的结构。还有其他方法可以发送用户名和密码吗?
  • @Coder 你正在使用这种格式 rtsp://[username[:password]@]ip_address[:rtsp_port]/server_URL[?param1=val1[&param2=val2]...[&paramN= valN]]

标签: java android android-videoview rtsp ip-camera


【解决方案1】:

我建议使用这个库,它的播放时间限制为 2 分钟,但对我而言这不是问题。

https://github.com/VideoExpertsGroup/MediaPlayerSDK

我已经测试了多个 android 库,这个库似乎在 android 中运行得最好。我测试过的其他一些播放时断断续续或非常延迟。还有一个测试应用程序,您可以确认它可以与您的信息流一起使用。

https://play.google.com/store/apps/details?id=org.rtspplr.app

【讨论】:

  • 限制为 2 分钟?什么?
【解决方案2】:

我刚刚找到了thisgithub项目,它使用vlc库打开rtsp流。这解决了我的问题解决了我的问题

【讨论】:

    【解决方案3】:

    格式为rtsp://[username[:password]@]ip_address[:rtsp_port]/server_U‌​RL[?param1=val1[&par‌​am2=val2]...[&paramN‌​=valN]]

    另外一种发送用户名和密码的方式:

    Uri source = Uri.parse("rtsp://iphere:554/cam/realmonitor");
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("SERVER_KEY_TO_PARSE_USER_NAME", "admin");
    headers.put("SERVER_KEY_TO_PARSE_PASSWORD", "pms7112");
    mediaPlayer.setDataSource(context, source, headers)
    

    只是一个建议和可选的尝试调用mediaplayer.prepareAsync()而不是mediaplayer.prepare()

    为了从需要的 RTSP 服务器访问媒体演示 身份验证,客户端必须另外能够执行 下列的: * 识别401状态码; * 解析并包含 WWW-Authenticate 标头; * 实现基本认证和摘要认证。

    参考Authentication-enabled

    【讨论】:

    • @Coder 你检查过上面的吗?
    • 目前我无法访问服务器来检查服务器密钥,但我使用“admin”和“password”进行了测试,但没有成功。我记录了 vlc 请求并获得了 Authentication 标头。这足以进行身份​​验证吗?
    • @Coder 是的,但在这种情况下,您从 vlc 收到的身份验证标头是什么?
    • 发送请求:PLAY rtsp://iphere:554/cam/realmonitor?channel=1&subtype =0 RTSP/1.0 CSeq:9 授权:基本 YWRtaW46cG1zNzExMg== User-Agent:LibVLC/2.2.4 (LIVE555 流媒体 v2016.02.22)会话:295295060303 范围:npt=0.000-
    • @Coder 直到您无权访问服务器。尝试仅在标题中添加 headers.put("Authorization:", "Basic YWRtaW46cG1zNzExMg==");
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2015-05-18
    • 2011-02-05
    • 2019-07-30
    • 2021-03-10
    • 2013-08-26
    相关资源
    最近更新 更多