我开始使用ExoPlayer来播放一些音频。一切都很好,直到我遇到一个有“301永久移动”重定向的URL。ExoPlayer2默认情况下不处理这个问题。
我已经看过这个帖子了:https://github.com/google/ExoPlayer/issues/423
他们说要在HttpDataSource或UriDataSource中添加新的“allowCrossDomainRedirects”标志。
//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);
看看ExtractorMediaSource是如何需要dataSourceFactory而不是DataSource的。事实上,我甚至在ExoPlayer2上找不到HttpDataSource和UriDataSource类。看起来它们已经被删除了。
所以我找不到一个方法来添加帖子上提到的旗帜。有人能帮助我吗?
4条答案
按热度按时间voj3qocg1#
问题中描述的问题是关于跨协议重定向(从http到https或反之亦然)。Exoplayer支持此功能,但您必须将
allowCrossProtocolRedirects
设置为true
。默认情况下支持常规重定向(包括301重定向)。您收到的重定向很可能是跨协议重定向。若要创建正在调用的数据源:
这个建构函式会建立将
allowCrossProtocolRedirects
设定为false
的DefaultHttpDataSourceFactory
。要更改此设置,您需要调用:
并使用您自己的
DefaultHttpDataSourceFactory
,将allowCrossProtocolRedirects
设置为true
作为baseDataSourceFactory
。例如:
如果需要更频繁地执行此操作,还可以创建一个helper方法:
这将允许跨协议重定向。
旁注:“301永久移动”表示客户端需要更新他们的网址到新的。“302找到”是用于常规重定向。如果可能的话,更新返回“301永久移动”的网址。
2mbi3lxu2#
它工作
bkhjykvo3#
试试这个:
对我有用。
8aqjt8rx4#
公认的答案看起来有点过时,因为DefaultHttpDataSource类已被弃用,我们假设将其替换为DefaultHttpDataSource.Factory,see the official documentation。
所以与其
我们本可以
也不要忘记使用如果你必须
最后你猜怎么着:DefaultDataSourceFactory也已过时,我们应该改用DefaultDataSource.Factory。