parent
5c29b48747
commit
c2a14240ad
@ -12,10 +12,9 @@ import java.io.File
|
||||
object RNVSimpleCache {
|
||||
// TODO: when to release? how to check if cache is released?
|
||||
private var simpleCache: SimpleCache? = null
|
||||
var cacheDataSourceFactory: DataSource.Factory? = null
|
||||
|
||||
fun setSimpleCache(context: Context, cacheSize: Int, factory: HttpDataSource.Factory) {
|
||||
if (cacheDataSourceFactory != null || cacheSize <= 0) return
|
||||
fun setSimpleCache(context: Context, cacheSize: Int) {
|
||||
if (simpleCache != null || cacheSize <= 0) return
|
||||
simpleCache = SimpleCache(
|
||||
File(context.cacheDir, "RNVCache"),
|
||||
LeastRecentlyUsedCacheEvictor(
|
||||
@ -23,9 +22,12 @@ object RNVSimpleCache {
|
||||
),
|
||||
StandaloneDatabaseProvider(context)
|
||||
)
|
||||
cacheDataSourceFactory =
|
||||
CacheDataSource.Factory()
|
||||
.setCache(simpleCache!!)
|
||||
.setUpstreamDataSourceFactory(factory)
|
||||
}
|
||||
|
||||
fun getCacheFactory(factory: HttpDataSource.Factory): DataSource.Factory {
|
||||
if (simpleCache == null) return factory
|
||||
return CacheDataSource.Factory()
|
||||
.setCache(simpleCache!!)
|
||||
.setUpstreamDataSourceFactory(factory)
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
private boolean selectTrackWhenReady = false;
|
||||
private Handler mainHandler;
|
||||
private Runnable mainRunnable;
|
||||
private DataSource.Factory cacheDataSourceFactory;
|
||||
private boolean useCache = false;
|
||||
private ControlsConfig controlsConfig = new ControlsConfig();
|
||||
|
||||
// Props from React
|
||||
@ -709,8 +709,8 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
.setAdErrorListener(this)
|
||||
.build();
|
||||
DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(mediaDataSourceFactory);
|
||||
if (cacheDataSourceFactory != null) {
|
||||
mediaSourceFactory.setDataSourceFactory(cacheDataSourceFactory);
|
||||
if (useCache) {
|
||||
mediaSourceFactory.setDataSourceFactory(RNVSimpleCache.INSTANCE.getCacheFactory(buildHttpDataSourceFactory(true)));
|
||||
}
|
||||
|
||||
if (adsLoader != null) {
|
||||
@ -1016,13 +1016,13 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
throw new IllegalStateException("cannot open input file" + srcUri);
|
||||
}
|
||||
} else if ("file".equals(srcUri.getScheme()) ||
|
||||
cacheDataSourceFactory == null) {
|
||||
!useCache) {
|
||||
mediaSourceFactory = new ProgressiveMediaSource.Factory(
|
||||
mediaDataSourceFactory
|
||||
);
|
||||
} else {
|
||||
mediaSourceFactory = new ProgressiveMediaSource.Factory(
|
||||
cacheDataSourceFactory
|
||||
RNVSimpleCache.INSTANCE.getCacheFactory(buildHttpDataSourceFactory(true))
|
||||
);
|
||||
|
||||
}
|
||||
@ -2241,12 +2241,11 @@ public class ReactExoplayerView extends FrameLayout implements
|
||||
if (bufferConfig.getCacheSize() > 0) {
|
||||
RNVSimpleCache.INSTANCE.setSimpleCache(
|
||||
this.getContext(),
|
||||
bufferConfig.getCacheSize(),
|
||||
buildHttpDataSourceFactory(false)
|
||||
bufferConfig.getCacheSize()
|
||||
);
|
||||
cacheDataSourceFactory = RNVSimpleCache.INSTANCE.getCacheDataSourceFactory();
|
||||
useCache = true;
|
||||
} else {
|
||||
cacheDataSourceFactory = null;
|
||||
useCache = false;
|
||||
}
|
||||
releasePlayer();
|
||||
initializePlayer();
|
||||
|
@ -180,6 +180,7 @@ class VideoPlayer extends Component {
|
||||
{
|
||||
description: 'another bunny (can be saved)',
|
||||
uri: 'https://rawgit.com/mediaelement/mediaelement-files/master/big_buck_bunny.mp4',
|
||||
headers: {referer: 'www.github.com', 'User-Agent': 'react.native.video'},
|
||||
},
|
||||
{
|
||||
description: 'sintel with subtitles',
|
||||
|
Loading…
Reference in New Issue
Block a user