用户名和密码在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_URL[?param1=val1[¶m2=val2]...[¶mN=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