android 中带有用户名和密码的 RTSP 流
RTSP stream in android with username and password
我的任务是在 android 中创建一个 android 应用程序来检查城市的一些 IP 摄像机。使用现有的 RTSP url 即 rtsp://admin:pms7112@xxx.xx.xx.xxx:554/cam/realmonitor?channel= 1&subtype=0 我可以在 VLC 播放器中获取流,但在 android 中没有运气。我试过 videoview 本地播放器和 media player
。
几乎每个解决方案都给了我
MediaPlayer: setDataSource IOException happend :
java.io.FileNotFoundException: No content provider: 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 的唯一方法...我无法通过其他方式对用户进行身份验证。拥有相机并为城市设置的公司不让我们使用其他格式。他们说,vlc 浏览器插件播放得很好,他们不会改变任何东西……那么有没有实现带有身份验证的 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<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()
In order to access media presentations from RTSP servers that require
authentication, the client MUST additionally be able to do the
following:
* recognize the 401 status code;
* parse and include the WWW-Authenticate header;
* implement Basic Authentication and Digest Authentication.
我刚找到 this 使用 vlc 库打开 rtsp 的项目 o github streams.This 解决了我的问题 解决了我的问题
我建议使用这个库,它的播放时间限制为 2 分钟,但对于我来说这不是问题。
https://github.com/VideoExpertsGroup/MediaPlayerSDK
我测试了多个 android 库,这个似乎在 android 中效果最好。我测试过的其他一些播放时断断续续或非常延迟。还有一个测试应用程序,因此您可以确认它是否适用于您的流。
https://play.google.com/store/apps/details?id=org.rtspplr.app
我的任务是在 android 中创建一个 android 应用程序来检查城市的一些 IP 摄像机。使用现有的 RTSP url 即 rtsp://admin:pms7112@xxx.xx.xx.xxx:554/cam/realmonitor?channel= 1&subtype=0 我可以在 VLC 播放器中获取流,但在 android 中没有运气。我试过 videoview 本地播放器和 media player
。
几乎每个解决方案都给了我
MediaPlayer: setDataSource IOException happend : java.io.FileNotFoundException: No content provider: 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 的唯一方法...我无法通过其他方式对用户进行身份验证。拥有相机并为城市设置的公司不让我们使用其他格式。他们说,vlc 浏览器插件播放得很好,他们不会改变任何东西……那么有没有实现带有身份验证的 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<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()
In order to access media presentations from RTSP servers that require authentication, the client MUST additionally be able to do the following: * recognize the 401 status code; * parse and include the WWW-Authenticate header; * implement Basic Authentication and Digest Authentication.
我刚找到 this 使用 vlc 库打开 rtsp 的项目 o github streams.This 解决了我的问题 解决了我的问题
我建议使用这个库,它的播放时间限制为 2 分钟,但对于我来说这不是问题。
https://github.com/VideoExpertsGroup/MediaPlayerSDK
我测试了多个 android 库,这个似乎在 android 中效果最好。我测试过的其他一些播放时断断续续或非常延迟。还有一个测试应用程序,因此您可以确认它是否适用于您的流。
https://play.google.com/store/apps/details?id=org.rtspplr.app