player: buffer total refactor

This commit is contained in:
Yuriy Liskov
2022-08-25 07:07:38 +03:00
parent 8e7971f09e
commit c9c259dc3d
5 changed files with 28 additions and 31 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -226,7 +226,7 @@ public class AppDialogUtil {
String videoBufferTitle = context.getString(R.string.video_buffer);
List<OptionItem> 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);
}