用户名和密码在Android中的RTSP流

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

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

是否应该发生此问题,因为用户名和密码在string ? 你如何添加用户名和密码作为查询string

编辑
媒体播放器版本
MediaPlayer 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的唯一方法……我无法通过其他方式validation用户身份。 拥有相机并为城市设置的公司不允许我们使用其他格式。 他们说,vlc浏览器插件播放得很好,他们不会改变任何东西……所以有没有任何库通过身份validation实现rtsp流。 我听说客户端和服务器之间的握手

格式为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 headers = new HashMap(); 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标头; *实现基本身份validation和摘要式身份validation。

参考 身份validation已启用

我刚刚发现这个项目o github使用vlc库打开rtsp streams.This解决了我的问题解决了我的问题

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

https://github.com/VideoExpertsGroup/MediaPlayerSDK

我测试了多个android libs,这个似乎在android中运行最好。 我测试的其他一些是回放不稳定或非常延迟。 还有一个测试应用程序,因此您可以确认它将适用于您的流。

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