From c9c259dc3d3d95a38534e5864cc6cd46d42fe264 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Thu, 25 Aug 2022 07:07:38 +0300 Subject: [PATCH] player: buffer total refactor --- .../controller/PlaybackEngineController.java | 2 +- .../controller/PlayerController.java | 4 -- .../exoplayer/other/ExoPlayerInitializer.java | 49 ++++++++++--------- .../common/prefs/PlayerData.java | 2 +- .../common/utils/AppDialogUtil.java | 2 +- 5 files changed, 28 insertions(+), 31 deletions(-) diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java index acd6019ac..a0d28b8fb 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controller/PlaybackEngineController.java @@ -17,7 +17,7 @@ public interface PlaybackEngineController { int BACKGROUND_MODE_PIP = 2; int BACKGROUND_MODE_PLAY_BEHIND = 3; int BUFFER_LOW = 0; - int BUFFER_MED = 1; + int BUFFER_MEDIUM = 1; int BUFFER_HIGH = 2; int ZOOM_MODE_DEFAULT = AspectRatioFrameLayout.RESIZE_MODE_FIT; int ZOOM_MODE_FIT_WIDTH = AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH; diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/controller/PlayerController.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/controller/PlayerController.java index 2a594ad4e..61689352e 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/controller/PlayerController.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/controller/PlayerController.java @@ -10,10 +10,6 @@ import java.io.InputStream; import java.util.List; public interface PlayerController { - int BUFFER_LOW = 0; - int BUFFER_MED = 1; - int BUFFER_HIGH = 2; - int BUFFER_MAX = 3; void openDash(InputStream dashManifest); void openHlsUrl(String hlsPlaylistUrl); void openDashUrl(String dashManifestUrl); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/other/ExoPlayerInitializer.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/other/ExoPlayerInitializer.java index 645ce0aae..938823aa9 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/other/ExoPlayerInitializer.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/other/ExoPlayerInitializer.java @@ -16,6 +16,7 @@ import com.google.android.exoplayer2.upstream.DefaultAllocator; import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.util.Util; import com.liskovsoft.sharedutils.helpers.Helpers; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.controller.PlaybackEngineController; import com.liskovsoft.smartyoutubetv2.common.exoplayer.controller.PlayerController; import com.liskovsoft.smartyoutubetv2.common.prefs.PlayerData; @@ -72,33 +73,33 @@ public class ExoPlayerInitializer { private DefaultLoadControl createLoadControl() { DefaultLoadControl.Builder baseBuilder = new DefaultLoadControl.Builder(); - //baseBuilder.setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE)) - // .setBufferDurationsMs(2_500, - // 5_000, - // 1_000, - // 2_000) - // .setTargetBufferBytes(C.LENGTH_UNSET) - // .setPrioritizeTimeOverSizeThresholds(true); + // Default values + //DefaultLoadControl.DEFAULT_MIN_BUFFER_MS // 15_000 + //DefaultLoadControl.DEFAULT_MAX_BUFFER_MS // 50_000 + //DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS // 2_500 + //DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS // 5_000 - if (PlayerController.BUFFER_HIGH == mPlayerData.getVideoBufferType()) { - int minBufferMs = 30000; // 30 seconds - int maxBufferMs = 36000000; // technical infinity, recommended here a very high number, the max will be based on setTargetBufferBytes() value - int bufferForPlaybackMs = 500; // half a seconds can be lower as lowe as 250 - int bufferForPlaybackAfterRebufferMs = 3000; // 3 seconds - baseBuilder - .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE)) - .setBufferDurationsMs(minBufferMs, maxBufferMs, bufferForPlaybackMs, bufferForPlaybackAfterRebufferMs) - .setTargetBufferBytes(mDeviceRam); - } else if (PlayerController.BUFFER_LOW == mPlayerData.getVideoBufferType()) { - baseBuilder - .setBufferDurationsMs( - DefaultLoadControl.DEFAULT_MIN_BUFFER_MS / 3, - DefaultLoadControl.DEFAULT_MAX_BUFFER_MS / 3, - DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS / 3, - DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS / 3); + // Medium buffer is default one + int minBufferMs = 20_000; + int maxBufferMs = 20_000; + int bufferForPlaybackMs = 500; + int bufferForPlaybackAfterRebufferMs = 1_000; + + switch (mPlayerData.getVideoBufferType()) { + case PlaybackEngineController.BUFFER_HIGH: + minBufferMs = 30_000; // 30 seconds + maxBufferMs = 36_000_000; // technical infinity, recommended here a very high number, the max will be based on setTargetBufferBytes() value + baseBuilder + .setTargetBufferBytes(mDeviceRam); + break; + case PlaybackEngineController.BUFFER_LOW: + minBufferMs = 10_000; + maxBufferMs = 10_000; + break; } - // Normal buffer is a default one + baseBuilder + .setBufferDurationsMs(minBufferMs, maxBufferMs, bufferForPlaybackMs, bufferForPlaybackAfterRebufferMs); return baseBuilder.createDefaultLoadControl(); } diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerData.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerData.java index 7debc3163..92a06ced9 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerData.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerData.java @@ -542,7 +542,7 @@ public class PlayerData extends DataChangeBase { mVideoFormat = Helpers.firstNonNull(ExoFormatItem.from(Helpers.parseStr(split, 9)), getDefaultVideoFormat()); mAudioFormat = Helpers.firstNonNull(ExoFormatItem.from(Helpers.parseStr(split, 10)), getDefaultAudioFormat()); mSubtitleFormat = ExoFormatItem.from(Helpers.parseStr(split, 11)); - mVideoBufferType = Helpers.parseInt(split, 12, PlaybackEngineController.BUFFER_LOW); + mVideoBufferType = Helpers.parseInt(split, 12, PlaybackEngineController.BUFFER_MEDIUM); mSubtitleStyleIndex = Helpers.parseInt(split, 13, 1); mVideoZoomMode = Helpers.parseInt(split, 14, PlaybackEngineController.ZOOM_MODE_DEFAULT); mSpeed = Helpers.parseFloat(split, 15, 1.0f); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/utils/AppDialogUtil.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/utils/AppDialogUtil.java index 181518450..3f1f96057 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/utils/AppDialogUtil.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/utils/AppDialogUtil.java @@ -226,7 +226,7 @@ public class AppDialogUtil { String videoBufferTitle = context.getString(R.string.video_buffer); List optionItems = new ArrayList<>(); optionItems.add(createVideoBufferOption(context, playerData, R.string.video_buffer_size_low, PlaybackEngineController.BUFFER_LOW, onBufferSelected)); - optionItems.add(createVideoBufferOption(context, playerData, R.string.video_buffer_size_med, PlaybackEngineController.BUFFER_MED, onBufferSelected)); + optionItems.add(createVideoBufferOption(context, playerData, R.string.video_buffer_size_med, PlaybackEngineController.BUFFER_MEDIUM, onBufferSelected)); optionItems.add(createVideoBufferOption(context, playerData, R.string.video_buffer_size_high, PlaybackEngineController.BUFFER_HIGH, onBufferSelected)); return OptionCategory.from(VIDEO_BUFFER_ID, OptionCategory.TYPE_RADIO, videoBufferTitle, optionItems); }