mirror of
https://github.com/yuliskov/SmartTube.git
synced 2026-02-09 08:11:19 -06:00
player: buffer total refactor
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user