我正在尝试流式传输在我的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类设置身份验证流媒体视频
先谢谢!!
答案 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)
}