在Android上使用MediaPlayer流式传输经过身份验证的视频

时间:2014-02-20 11:42:48

标签: android

我正在尝试流式传输在我的Android设备browser / Media Player /VideoView中播放具有基本身份验证(用户名/密码)的SharePoint服务器网址中的视频 但是我得到了

错误

 sorry this video can’t be played. 

网址内的auth参数(用户名/密码)也不起作用(例如:http://username:password@www.hostname.com/test.mp4

但是我可以使用带有身份验证的Android HTTP下载类下载并播放它。

有人可以建议如何为VideoView类设置身份验证流媒体视频

先谢谢!!

2 个答案:

答案 0 :(得分:1)

如果有人还在寻找答案这是一种在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方法是隐藏的。您可以看到this answer

如果您使用Google 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", "...");

答案 1 :(得分:0)

我的带有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)
}