From 5969115062e5270839184d251af7df9768df7da3 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Tue, 4 Oct 2022 12:00:37 -0700 Subject: [PATCH 1/4] first step --- .../s3manager/CacheDataSourceFactory.java | 41 +++++++++++++++++++ .../asgardius/page/s3manager/VideoPlayer.java | 8 ++++ 2 files changed, 49 insertions(+) create mode 100644 app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java 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..e6aa575 --- /dev/null +++ b/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java @@ -0,0 +1,41 @@ +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, maxCacheSize; + //DatabaseProvider databaseProvider = ExoDatabaseProvider(this); + + public CacheDataSourceFactory(Context context, long maxCacheSize, long maxFileSize) { + super(); + this.context = context; + 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 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..5be7957 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,6 +14,9 @@ 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; @@ -43,6 +47,8 @@ public class VideoPlayer extends AppCompatActivity { playerView = findViewById(R.id.player_view); // creating a variable for exoplayer player = new ExoPlayer.Builder(this).build(); + //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); @@ -50,6 +56,8 @@ public class VideoPlayer extends AppCompatActivity { // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. + player.setPlayWhenReady(true); + //player.setMediaSource(audioSource); player.prepare(); // Start the playback. player.play(); From 1ca6c42e87958f917e4f28edc2a01f7f420650f5 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Tue, 4 Oct 2022 12:30:51 -0700 Subject: [PATCH 2/4] cache implementation --- .../main/java/asgardius/page/s3manager/VideoPlayer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java index 5be7957..155f529 100644 --- a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java +++ b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java @@ -47,17 +47,19 @@ public class VideoPlayer extends AppCompatActivity { playerView = findViewById(R.id.player_view); // creating a variable for exoplayer player = new ExoPlayer.Builder(this).build(); + MediaSource mediaSource = new ProgressiveMediaSource.Factory(new CacheDataSourceFactory(this, 100 * 1024 * 1024, 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(audioSource); + player.setMediaSource(mediaSource); player.prepare(); // Start the playback. player.play(); From 71dcf59650aa958cc9506a6c722d0031ef4d39d6 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Tue, 4 Oct 2022 18:45:54 -0700 Subject: [PATCH 3/4] cache release --- .../page/s3manager/CacheDataSourceFactory.java | 12 +++++++----- .../asgardius/page/s3manager/VideoPlayer.java | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java b/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java index e6aa575..c932f1d 100644 --- a/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java +++ b/app/src/main/java/asgardius/page/s3manager/CacheDataSourceFactory.java @@ -17,13 +17,15 @@ import java.io.File; public class CacheDataSourceFactory implements DataSource.Factory { private final Context context; private final DefaultDataSource.Factory defaultDatasourceFactory; - private final long maxFileSize, maxCacheSize; + private final long maxFileSize; + SimpleCache simpleCache; //DatabaseProvider databaseProvider = ExoDatabaseProvider(this); - public CacheDataSourceFactory(Context context, long maxCacheSize, long maxFileSize) { + public CacheDataSourceFactory(Context context, SimpleCache simpleCache, long maxFileSize) { super(); this.context = context; - this.maxCacheSize = maxCacheSize; + this.simpleCache = simpleCache; + //this.maxCacheSize = maxCacheSize; this.maxFileSize = maxFileSize; String userAgent = Util.getUserAgent(context, context.getString(R.string.app_name)); //DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); @@ -32,8 +34,8 @@ public class CacheDataSourceFactory implements DataSource.Factory { @Override public DataSource createDataSource() { - LeastRecentlyUsedCacheEvictor evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize); - SimpleCache simpleCache = new SimpleCache(new File(context.getCacheDir(), "media"), evictor); + //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); diff --git a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java index 155f529..7b8f20c 100644 --- a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java +++ b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java @@ -19,6 +19,10 @@ 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. @@ -31,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; @@ -47,7 +53,9 @@ public class VideoPlayer extends AppCompatActivity { playerView = findViewById(R.id.player_view); // creating a variable for exoplayer player = new ExoPlayer.Builder(this).build(); - MediaSource mediaSource = new ProgressiveMediaSource.Factory(new CacheDataSourceFactory(this, 100 * 1024 * 1024, 512 * 1024 * 1024)) + 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); @@ -148,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 From f19763c1575e6823377ed3bb07ef2b9a74b390f6 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Tue, 4 Oct 2022 20:19:30 -0700 Subject: [PATCH 4/4] new release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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"