Tia*_*ago 13 redirect android http exoplayer exoplayer2.x
我开始使用ExoPlayer来传输一些音频.一切顺利,直到我遇到一个"301 Moved Permanently"重定向的URL.默认情况下,ExoPlayer2不处理该问题.
我已经看过这个帖子:https://github.com/google/ExoPlayer/issues/423
他们说在那里将新的"allowCrossDomainRedirects"标志添加到HttpDataSource或UriDataSource.问题是我不使用这些类中的任何一个:
//I am NOT using SimpleExoPlayer because I need a different renderer.
exoPlayer = ExoPlayerFactory.newInstance(renderers, trackSelector, loadControl);
final DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(
context,
Util.getUserAgent(context, applicationInfo.getAppName())
);
// Produces Extractor instances for parsing the media data.
final ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
// This is the MediaSource representing the media to be played.
MediaSource mediaSource = new ExtractorMediaSource(
Uri.parse(media.getUriString()) /* uri */,
dataSourceFactory,
extractorsFactory,
10,
null /* eventHandler */,
null /* eventListener */);
exoPlayer.prepare(mediaSource);
Run Code Online (Sandbox Code Playgroud)
了解ExtractorMediaSource如何需要dataSourceFactory而不是DataSource.实际上我甚至无法在ExoPlayer2上找到类HttpDataSource和UriDataSource.看起来他们已被删除.
因此我找不到添加帖子中提到的标志的方法.有人能帮助我吗?
met*_*kip 36
该问题中描述的问题是关于跨协议重定向(从http到https,反之亦然).Exoplayer支持此功能,但您必须设置allowCrossProtocolRedirects为true.默认情况下支持常规重定向(包括301重定向).您接收的重定向很可能是跨协议重定向.
要创建您正在调用的数据源:
DefaultDataSourceFactory(Context context, String userAgent)
Run Code Online (Sandbox Code Playgroud)
此构造函数创建一个DefaultHttpDataSourceFactory已allowCrossProtocolRedirects设置为false.
要更改此设置,您需要致电:
DefaultDataSourceFactory(Context context, TransferListener<? super DataSource> listener,
DataSource.Factory baseDataSourceFactory)
Run Code Online (Sandbox Code Playgroud)
并使用你自己DefaultHttpDataSourceFactory的allowCrossProtocolRedirects设置true为baseDataSourceFactory.
例如:
String userAgent = Util.getUserAgent(context, applicationInfo.getAppName());
// Default parameters, except allowCrossProtocolRedirects is true
DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(
userAgent,
null /* listener */,
DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
true /* allowCrossProtocolRedirects */
);
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(
context,
null /* listener */,
httpDataSourceFactory
);
Run Code Online (Sandbox Code Playgroud)
如果您需要更频繁地执行此操作,还可以创建辅助方法:
public static DefaultDataSourceFactory createDataSourceFactory(Context context,
String userAgent, TransferListener<? super DataSource> listener) {
// Default parameters, except allowCrossProtocolRedirects is true
DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(
userAgent,
listener,
DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
true /* allowCrossProtocolRedirects */
);
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(
context,
listener,
httpDataSourceFactory
);
return dataSourceFactory;
}
Run Code Online (Sandbox Code Playgroud)
这将允许跨协议重定向.
旁注:"301 Moved Permanently"表示客户需要将其URL更新为新URL."302 Found"用于常规重定向.如果可能,请更新返回"301 Moved Permanently"的URL.