mirror of
https://github.com/madari-media/madari-oss.git
synced 2026-03-11 17:15:39 +00:00
feat: added video buffer
This commit is contained in:
parent
f8af47b165
commit
4228607073
5 changed files with 51 additions and 7 deletions
|
|
@ -11,6 +11,7 @@ class PlaybackSettings {
|
|||
double fontSize;
|
||||
bool externalPlayer;
|
||||
String? selectedExternalPlayer;
|
||||
int bufferSize;
|
||||
|
||||
PlaybackSettings({
|
||||
this.autoPlay = true,
|
||||
|
|
@ -23,6 +24,7 @@ class PlaybackSettings {
|
|||
this.fontSize = 16,
|
||||
this.externalPlayer = false,
|
||||
this.selectedExternalPlayer,
|
||||
this.bufferSize = 32,
|
||||
});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
|
@ -32,16 +34,18 @@ class PlaybackSettings {
|
|||
'defaultSubtitleTrack': defaultSubtitleTrack,
|
||||
'subtitleColor': subtitleColor.value,
|
||||
'fontSize': fontSize,
|
||||
'disableSubtitles': disableSubtitles,
|
||||
};
|
||||
|
||||
factory PlaybackSettings.fromJson(Map<String, dynamic> json) {
|
||||
return PlaybackSettings(
|
||||
autoPlay: json['autoPlay'] ?? true,
|
||||
playbackSpeed: json['playbackSpeed'] ?? 1.0,
|
||||
playbackSpeed: (json['playbackSpeed'] ?? 1.0).toDouble(),
|
||||
defaultAudioTrack: json['defaultAudioTrack'] ?? 'eng',
|
||||
defaultSubtitleTrack: json['defaultSubtitleTrack'] ?? 'eng',
|
||||
subtitleColor: Color(json['subtitleColor'] ?? Colors.white.value),
|
||||
fontSize: json['fontSize'] ?? 16,
|
||||
fontSize: (json['fontSize'] ?? 16).toDouble(),
|
||||
disableSubtitles: json['disableSubtitles'] ?? false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -372,6 +372,38 @@ class _PlaybackSettingsPageState extends State<PlaybackSettingsPage> {
|
|||
],
|
||||
],
|
||||
),
|
||||
_buildSection(
|
||||
"Player buffer",
|
||||
[
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text("${settings.bufferSize} MB"),
|
||||
Row(
|
||||
children: [
|
||||
const Text('32 MB'),
|
||||
Expanded(
|
||||
child: Slider(
|
||||
value: settings.bufferSize.toDouble(),
|
||||
min: 32,
|
||||
max: 2024,
|
||||
label: settings.bufferSize.round().toString(),
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
settings.bufferSize = value.toInt();
|
||||
PlaybackSettingsService.instance
|
||||
.saveSettings(settings);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
const Text('2024 MB'),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -40,12 +40,14 @@ class PlaybackSettingsService {
|
|||
'disableHardwareAcceleration': settings.disableHardwareAcceleration,
|
||||
'externalPlayer': settings.externalPlayer,
|
||||
'selectedExternalPlayer': settings.selectedExternalPlayer,
|
||||
'bufferSize': settings.bufferSize,
|
||||
'fontSize': settings.fontSize,
|
||||
};
|
||||
|
||||
await prefs.setString(_localSettingsKey, json.encode(localSettings));
|
||||
await AppPocketBaseService.instance.pb.collection('users').update(
|
||||
AppPocketBaseService.instance.pb.authStore.model.id,
|
||||
body: {'playback_v2': settings.toJson()},
|
||||
AppPocketBaseService.instance.pb.authStore.record!.id,
|
||||
body: {'config': settings.toJson()},
|
||||
);
|
||||
|
||||
_cachedSettings = settings;
|
||||
|
|
@ -65,7 +67,7 @@ class PlaybackSettingsService {
|
|||
);
|
||||
|
||||
final serverSettings = PlaybackSettings.fromJson(
|
||||
record.data['playback_v2'] ?? {},
|
||||
record.data['config'] ?? {},
|
||||
);
|
||||
|
||||
_cachedSettings = PlaybackSettings(
|
||||
|
|
@ -74,11 +76,13 @@ class PlaybackSettingsService {
|
|||
defaultAudioTrack: serverSettings.defaultAudioTrack,
|
||||
defaultSubtitleTrack: serverSettings.defaultSubtitleTrack,
|
||||
subtitleColor: serverSettings.subtitleColor,
|
||||
fontSize: serverSettings.fontSize,
|
||||
fontSize: (localSettings['fontSize'] ?? 16).toDouble(),
|
||||
disableHardwareAcceleration:
|
||||
localSettings['disableHardwareAcceleration'] ?? false,
|
||||
externalPlayer: localSettings['externalPlayer'] ?? false,
|
||||
selectedExternalPlayer: localSettings['selectedExternalPlayer'],
|
||||
disableSubtitles: serverSettings.disableSubtitles,
|
||||
bufferSize: (localSettings['bufferSize'] ?? 32),
|
||||
);
|
||||
|
||||
return _cachedSettings!;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ class VideoPlay extends StatefulWidget {
|
|||
final Meta? meta;
|
||||
final int index;
|
||||
final String stream;
|
||||
final int bufferSize;
|
||||
|
||||
const VideoPlay({
|
||||
super.key,
|
||||
|
|
@ -25,6 +26,7 @@ class VideoPlay extends StatefulWidget {
|
|||
required void Function(String message) onError,
|
||||
required this.index,
|
||||
required this.stream,
|
||||
required this.bufferSize,
|
||||
});
|
||||
|
||||
@override
|
||||
|
|
@ -35,8 +37,9 @@ class _VideoPlayState extends State<VideoPlay> {
|
|||
late String stream = widget.stream;
|
||||
|
||||
late final player = Player(
|
||||
configuration: const PlayerConfiguration(
|
||||
configuration: PlayerConfiguration(
|
||||
title: "Madari",
|
||||
bufferSize: widget.bufferSize * 1024 * 1024,
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -151,6 +151,7 @@ class _VideoPlayerState extends State<VideoPlayer> with WidgetsBindingObserver {
|
|||
body: VideoPlay(
|
||||
stream: widget.stream,
|
||||
meta: widget.meta,
|
||||
bufferSize: state.data?.bufferSize ?? 32,
|
||||
index: index,
|
||||
key: ValueKey('${widget.id}_${widget.selectedIndex}'),
|
||||
enabledHardwareAcceleration:
|
||||
|
|
|
|||
Loading…
Reference in a new issue