diff --git a/app/build.gradle b/app/build.gradle index a7d1f9d..01ca6cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "asgardius.page.s3manager" minSdk 24 targetSdk 33 - versionCode 19 - versionName "0.1.17" + versionCode 20 + versionName "0.1.18" setProperty("archivesBaseName", "s3-manager-$versionName") testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java b/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java new file mode 100644 index 0000000..c932f1d --- /dev/null +++ b/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java @@ -0,0 +1,43 @@ +package asgardius.page.s3manager; + +import android.content.Context; + +import com.google.android.exoplayer2.database.DatabaseProvider; +import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.DefaultDataSource; +import com.google.android.exoplayer2.upstream.FileDataSource; +import com.google.android.exoplayer2.upstream.cache.CacheDataSink; +import com.google.android.exoplayer2.upstream.cache.CacheDataSource; +import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor; +import com.google.android.exoplayer2.upstream.cache.SimpleCache; +import com.google.android.exoplayer2.util.Util; + +import java.io.File; + +public class CacheDataSourceFactory implements DataSource.Factory { + private final Context context; + private final DefaultDataSource.Factory defaultDatasourceFactory; + private final long maxFileSize; + SimpleCache simpleCache; + //DatabaseProvider databaseProvider = ExoDatabaseProvider(this); + + public CacheDataSourceFactory(Context context, SimpleCache simpleCache, long maxFileSize) { + super(); + this.context = context; + this.simpleCache = simpleCache; + //this.maxCacheSize = maxCacheSize; + this.maxFileSize = maxFileSize; + String userAgent = Util.getUserAgent(context, context.getString(R.string.app_name)); + //DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); + defaultDatasourceFactory = new DefaultDataSource.Factory(this.context); + } + + @Override + public DataSource createDataSource() { + //LeastRecentlyUsedCacheEvictor evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize); + //simpleCache = new SimpleCache(new File(context.getCacheDir(), "media"), evictor); + return new CacheDataSource(simpleCache, defaultDatasourceFactory.createDataSource(), + new FileDataSource(), new CacheDataSink(simpleCache, maxFileSize), + CacheDataSource.FLAG_BLOCK_ON_CACHE | CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR, null); + } +} \ No newline at end of file diff --git a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java index 0c83639..7b8f20c 100644 --- a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java +++ b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java @@ -3,6 +3,7 @@ package asgardius.page.s3manager; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; +import android.net.Uri; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.PowerManager; @@ -13,8 +14,15 @@ import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; +import com.google.android.exoplayer2.source.MediaSource; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.ui.StyledPlayerView; import com.google.android.exoplayer2.upstream.HttpDataSource; +import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor; +import com.google.android.exoplayer2.upstream.cache.SimpleCache; + +import java.io.File; /** * An example full-screen activity that shows and hides the system UI (i.e. @@ -27,6 +35,8 @@ public class VideoPlayer extends AppCompatActivity { private WifiManager.WifiLock mWifiLock; private PowerManager.WakeLock mWakeLock; private PowerManager powerManager; + private long maxCacheSize = 100 * 1024 * 1024; + SimpleCache simpleCache; ExoPlayer player; @@ -43,13 +53,21 @@ public class VideoPlayer extends AppCompatActivity { playerView = findViewById(R.id.player_view); // creating a variable for exoplayer player = new ExoPlayer.Builder(this).build(); + LeastRecentlyUsedCacheEvictor evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize); + simpleCache = new SimpleCache(new File(this.getCacheDir(), "media"), evictor); + MediaSource mediaSource = new ProgressiveMediaSource.Factory(new CacheDataSourceFactory(this, simpleCache, 512 * 1024 * 1024)) + .createMediaSource(MediaItem.fromUri(Uri.parse(videoURL))); + //MediaSource audioSource = new ProgressiveMediaSource(Uri.parse("url"), + // new CacheDataSourceFactory(this, 100 * 1024 * 1024, 5 * 1024 * 1024), new DefaultExtractorsFactory(), null, null); // Attach player to the view. playerView.setPlayer(player); - MediaItem mediaItem = MediaItem.fromUri(videoURL); + //MediaItem mediaItem = MediaItem.fromUri(videoURL); // Set the media item to be played. - player.setMediaItem(mediaItem); + //player.setMediaItem(mediaItem); // Prepare the player. + player.setPlayWhenReady(true); + player.setMediaSource(mediaSource); player.prepare(); // Start the playback. player.play(); @@ -138,13 +156,14 @@ public class VideoPlayer extends AppCompatActivity { } public void onDestroy() { + simpleCache.release(); player.release(); super.onDestroy(); } - public void onBackPressed() { + /*public void onBackPressed() { player.release(); finish(); - } + }*/ } \ No newline at end of file