该问题描述的问题是关于跨协议重定向(从 http 到 https 或反之亦然)。 Exoplayer支持这个,但是你必须设置allowCrossProtocolRedirects
to true
。默认支持常规重定向(包括301重定向)。您收到的重定向很可能是跨协议重定向。
要创建您正在调用的数据源:
DefaultDataSourceFactory(Context context, String userAgent)
这个构造函数创建了一个DefaultHttpDataSourceFactory
其中有allowCrossProtocolRedirects
set to false
.
要更改此设置,您需要调用:
DefaultDataSourceFactory(Context context, TransferListener<? super DataSource> listener,
DataSource.Factory baseDataSourceFactory)
并且使用你自己的DefaultHttpDataSourceFactory
with allowCrossProtocolRedirects
set to true
as the 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
);
如果您需要更频繁地执行此操作,您还可以创建一个辅助方法:
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;
}
这将允许跨协议重定向。
旁注:“301 永久移动”意味着客户端需要将其 URL 更新为新的 URL。 “302 Found”用于常规重定向。如果可能,请更新返回“301 永久移动”的 URL。