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_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()

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.

参考Authentication-enabled

我刚找到 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