当前位置: 首页 > 知识库问答 >
问题:

在Android上使用MediaPlayer播放经过身份验证的视频

宋铭
2023-03-14

我在尝试流媒体

错误

 sorry this video can’t be played. 

此外,URL中的身份验证参数(用户名/密码)不起作用(例如:http://username:password@www.hostname。com/test。mp4)

但是我可以下载并使用Android HTTP下载类进行身份验证。

有人能建议如何将身份验证设置为视频流视频的视频视图类吗

感谢提前!

共有2个答案

苏波涛
2023-03-14

使用DefaultHttpDataSourceFactory的我的版本

private fun buildMediaSource(url: String): MediaSource {
    val uri = Uri.parse(url)
    val auth =
        "Basic " + Base64.encodeToString(uri.userInfo?.toByteArray(), URL_SAFE or NO_WRAP)
    val defaultHttpDataSourceFactory = DefaultHttpDataSourceFactory("exoplayer-codelab").apply {
        defaultRequestProperties.set("Authorization", auth)
        defaultRequestProperties.set("Accept", "...")
    }
    return ProgressiveMediaSource.Factory(defaultHttpDataSourceFactory).createMediaSource(uri)
}
任繁
2023-03-14

如果有人仍在寻找答案,这里有一种在videoview中设置身份验证的方法。

Map<String, String> header= new HashMap<String, String>(1);
final String cred = "your_username" + ":" + "your_password";
final String auth = "Basic "+ Base64.encodeToString(cred.getBytes(),Base64.URL_SAFE|Base64.NO_WRAP);
header.put("Authorization", auth);
videoView.setVideoURI(Uri.parse("your url"),header);
videoView.start();

但是对于较低的api setVdeoUri方法是隐藏的。你可以看到这个答案

如果你正在使用谷歌ExoPlayer,你将不得不设置这样的数据源。

    final String cred = "username" + ":" + "password";
    final String auth = "Basic "+ Base64.encodeToString(cred.getBytes(),Base64.URL_SAFE|Base64.NO_WRAP);
    DefaultHttpDataSource dataSource = new DefaultHttpDataSource(userAgent, null);
    dataSource.setRequestProperty("Authorization", auth);
    dataSource.setRequestProperty("Accept", "...");
 类似资料:
  • 我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B

  • RTSP视频可以在Android MediaPlayer中播放吗?如果是,怎么做?我得到的服务器死亡错误(100,0)这是我的编码部分包com的错误。实例样本媒体; 这是我的Logcat结果,我得到的结果是07-09 12:17:05.484:E/MediaPlayer(3990):error(1,-2147483648)07-09 12:17:05.484:W/System。err(3990):

  • 我已经正确地实现了Firebase电子邮件和Google登录,它在iOS和Android上都运行良好。然后我试着实现通过电话的身份验证,首先它在iPhone上不起作用,但后来我做了一些研究,似乎我必须上传一些APN,最后我正确地设置了它,现在它在iPhone上起作用了,但当我尝试向Android发送短信时,它没有接收到它,而是发送给我一条消息,表明代码是在iPhone上发送的,就像在iPhone上

  • 一切都一直在工作,只是今天我开始得到一个错误消息,我甚至不能从Android工作室“同步项目与Gradle文件”。我唯一改变的是...办公室:D

  • 问题内容: 我有一个RESTful API,我正尝试通过Android和RestTemplate与之连接。通过设置HttpEntity的标头,然后使用RestTemplate的方法,对HTTP的所有请求均通过HTTP身份验证进行身份验证。 所有GET请求都可以通过这种方式很好地工作,但是我无法弄清楚如何完成经过身份验证的POST请求。和处理POST,但没有简单的方法来设置Authenticatio

  • 我有一些用于测试认证的Mifare Ultralight C标签。 我第一次使用应用程序NXP TagInfo阅读它时,我可以看到以下信息: 页面2C - 2F意味着它有默认的键“BREAKMEIFYOUCAN!”(< code > 425245414 b4d 454946594 f 5543414 e 21 )。 然后我运行我的Android应用程序,它基本上是这样做的: > 写入从第2C页到第