我的任务是在android中创建一个Android应用程序来检查该城市的一些IP摄像头。使用 rtsp:// admin:pms7112@xxx.xx.xx.xxx:554 / cam / realmonitor?channel = 1& subtype = 0 的现有 RTSP 网址我可以在VLC播放器中获得流,但在android中没有运气。我试过了videoview本地播放器和media player
。
几乎每个解决方案都给了我
MediaPlayer:setDataSource IOException发生: 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();
}
的更新
所以...似乎这是我可以使用网址的唯一方法......我不能以其他方式验证用户。拥有相机并为城市设置的公司不允许我们使用其他格式。他们说,vlc浏览器插件播放得很好,他们不会改变任何东西......所以有没有任何库通过身份验证实现rtsp流。我听说客户端和服务器之间的握手
答案 0 :(得分:0)
格式为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<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标头; *实现基本身份验证和摘要身份验证。
答案 1 :(得分:0)
我刚刚找到this项目o github使用vlc库打开rtsp streams.This解决了我的问题解决了我的问题
答案 2 :(得分:0)
我建议使用这个库,它的播放时间限制为2分钟,但对我来说这不是问题。
https://github.com/VideoExpertsGroup/MediaPlayerSDK
我测试了多个android libs,这个似乎在android中运行最好。我测试的其他一些在播放时非常不稳定或非常延迟。还有一个测试应用程序,因此您可以确认它将适用于您的流。
https://play.google.com/store/apps/details?id=org.rtspplr.app