Skip to content

Commit

Permalink
Merge pull request #23 from nini22P/dev
Browse files Browse the repository at this point in the history
v1.3.4
  • Loading branch information
nini22P authored Feb 23, 2025
2 parents d89f8ac + f1c20f9 commit cafefd4
Show file tree
Hide file tree
Showing 25 changed files with 700 additions and 335 deletions.
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## v1.3.4

### Changelog

* The Android version allows you to set the screen orientation.
* Add playback speed button.
* Add hotkeys: Step forward `+`, Step backward `-`.

### 更新日志

* 安卓版本可以设置屏幕方向。
* 添加播放速度按钮。
* 添加快捷键:帧进 `+`,帧退 `-`


## v1.3.3

### Changelog
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ English | [中文](./README_CN.md)
| `Ctrl + C` | Close currently media file |
| `Ctrl + H` | Play history |
| `Ctrl + P` | Settings |
| `+` | Step forward |
| `-` | Step backward |
| `Enter` | Enter full screen / Exit full screen / Select file |
| `F11` | Enter full screen / Exit full screen |
| `Esc` | Exit current Menu / Go back / Exit full screen |
Expand Down
2 changes: 2 additions & 0 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
| `Ctrl + C` | 关闭当前媒体文件 |
| `Ctrl + H` | 播放历史 |
| `Ctrl + P` | 设置 |
| `+` | 帧进 |
| `-` | 帧退 |
| `Enter` | 进入全屏 / 退出全屏 / 选择文件 |
| `F11` | 进入全屏 / 退出全屏 |
| `Esc` | 退出当前菜单 / 返回上一级 / 关闭全屏 |
Expand Down
2 changes: 2 additions & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ gradle-wrapper.jar
/local.properties
GeneratedPluginRegistrant.java

.cxx

# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
Expand Down
25 changes: 21 additions & 4 deletions lib/hooks/use_fvp_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import 'package:wakelock_plus/wakelock_plus.dart';

FvpPlayer useFvpPlayer(BuildContext context) {
final autoPlay = useAppStore().select(context, (state) => state.autoPlay);
final rate = useAppStore().select(context, (state) => state.rate);
final volume = useAppStore().select(context, (state) => state.volume);
final isMuted = useAppStore().select(context, (state) => state.isMuted);
final repeat = useAppStore().select(context, (state) => state.repeat);
Expand Down Expand Up @@ -91,6 +92,7 @@ FvpPlayer useFvpPlayer(BuildContext context) {
try {
await controller.initialize();
await controller.setLooping(repeat == Repeat.one ? true : false);
await controller.setPlaybackSpeed(rate);
await controller.setVolume(isMuted ? 0 : volume / 100);
} catch (e) {
logger('Error initializing player: $e');
Expand All @@ -115,8 +117,6 @@ FvpPlayer useFvpPlayer(BuildContext context) {
useListenableSelector(controller, () => controller.value.position);
final buffered =
useListenableSelector(controller, () => controller.value.buffered);
final playbackSpeed =
useListenableSelector(controller, () => controller.value.playbackSpeed);
final size = useListenableSelector(controller, () => controller.value.size);
final isCompleted =
useListenableSelector(controller, () => controller.value.isCompleted);
Expand Down Expand Up @@ -187,6 +187,13 @@ FvpPlayer useFvpPlayer(BuildContext context) {
return;
}, [isCompleted]);

useEffect(() {
if (controller.value.isInitialized) {
controller.setPlaybackSpeed(rate);
}
return;
}, [rate]);

useEffect(() {
if (controller.value.isInitialized) {
controller.setVolume(isMuted ? 0 : volume / 100);
Expand Down Expand Up @@ -257,6 +264,16 @@ FvpPlayer useFvpPlayer(BuildContext context) {
: await controller.seekTo(newPosition);
}

Future<void> stepBackward() async {
await controller.step(frames: -1);
logger('Step backward');
}

Future<void> stepForward() async {
await controller.step(frames: 1);
logger('Step forward');
}

Future<void> saveProgress() async {
if (file != null && duration != Duration.zero) {
if (Platform.isAndroid && file.uri.startsWith('content://')) {
Expand Down Expand Up @@ -289,14 +306,14 @@ FvpPlayer useFvpPlayer(BuildContext context) {
aspect: aspect,
width: size.width,
height: size.height,
rate: playbackSpeed,
play: play,
pause: pause,
backward: (seconds) =>
seekTo(Duration(seconds: position.inSeconds - seconds)),
forward: (seconds) =>
seekTo(Duration(seconds: position.inSeconds + seconds)),
updateRate: (value) => controller.setPlaybackSpeed(value),
stepBackward: stepBackward,
stepForward: stepForward,
seekTo: seekTo,
saveProgress: saveProgress,
seeking: seeking.value,
Expand Down
30 changes: 25 additions & 5 deletions lib/hooks/use_media_kit_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {

final controller = useMemoized(() => VideoController(player));

final rate = useAppStore().select(context, (state) => state.rate);
final volume = useAppStore().select(context, (state) => state.volume);
final isMuted = useAppStore().select(context, (state) => state.isMuted);

useEffect(() {
() async {
player.setSubtitleTrack(SubtitleTrack.no());
player.setRate(rate);
player.setVolume(isMuted ? 0 : volume.toDouble());

if (Platform.isAndroid) {
Expand Down Expand Up @@ -95,7 +97,7 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
Duration duration = useStream(player.stream.duration).data ?? Duration.zero;
Duration buffer = useStream(player.stream.buffer).data ?? Duration.zero;
bool completed = useStream(player.stream.completed).data ?? false;
double rate = useStream(player.stream.rate).data ?? 1.0;
// double rate = useStream(player.stream.rate).data ?? 1.0;

Track? track = useStream(player.stream.track).data;
AudioTrack audio =
Expand Down Expand Up @@ -227,6 +229,11 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
return null;
}, [completed, repeat]);

useEffect(() {
player.setRate(rate);
return;
}, [rate]);

useEffect(() {
player.setVolume(isMuted ? 0 : volume.toDouble());
return;
Expand Down Expand Up @@ -293,8 +300,21 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
await seekTo(Duration(seconds: position.value.inSeconds + seconds));
}

Future<void> updateRate(double value) async =>
player.state.rate == value ? null : await player.setRate(value);
Future<void> stepBackward() async {
final nativePlayer = player.platform;
if (nativePlayer is NativePlayer) {
await nativePlayer.command(['frame-back-step']);
logger('Step backward');
}
}

Future<void> stepForward() async {
final nativePlayer = player.platform;
if (nativePlayer is NativePlayer) {
await nativePlayer.command(['frame-step']);
logger('Step forward');
}
}

return MediaKitPlayer(
player: player,
Expand All @@ -310,7 +330,6 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
duration: duration,
buffer: duration == Duration.zero ? Duration.zero : buffer,
seeking: seeking.value,
rate: rate,
aspect: videoParams?.aspect,
width: videoParams?.w?.toDouble(),
height: videoParams?.h?.toDouble(),
Expand All @@ -321,7 +340,8 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
pause: pause,
backward: backward,
forward: forward,
updateRate: updateRate,
stepBackward: stepBackward,
stepForward: stepForward,
seekTo: seekTo,
);
}
46 changes: 46 additions & 0 deletions lib/hooks/use_orientation.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_zustand/flutter_zustand.dart';
import 'package:iris/models/player.dart';
import 'package:iris/models/store/app_state.dart';
import 'package:iris/store/use_app_store.dart';

void useOrientation(BuildContext context, MediaPlayer player) {
final orientation =
useAppStore().select(context, (state) => state.orientation);

setOrientation(ScreenOrientation orientation, double? aspect) {
if (Platform.isAndroid || Platform.isIOS) {
switch (orientation) {
case ScreenOrientation.device:
SystemChrome.setPreferredOrientations([]);
break;
case ScreenOrientation.landscape:
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
break;
case ScreenOrientation.portrait:
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
break;
}
}
}

useEffect(() {
setOrientation(orientation, player.aspect);
return () => SystemChrome.setPreferredOrientations([]);
}, []);

useEffect(() {
setOrientation(orientation, player.aspect);
return;
}, [orientation, player.aspect]);
}
5 changes: 5 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"confirmUpdate": "Confirm update",
"crop": "Crop",
"dark": "Datk",
"device": "Device",
"download": "Download",
"download_and_update": "Download and update",
"download_error": "Download error",
Expand All @@ -43,6 +44,7 @@
"history": "History",
"home": "Home",
"host": "Host",
"landscape": "Landscape",
"language": "Language",
"last_modified": "Last modified",
"libraries": "Libraries",
Expand All @@ -65,8 +67,10 @@
"pause": "Pause",
"play": "Play",
"play_queue": "Play queue",
"playback_speed": "Playback speed",
"player_backend": "Player backend",
"port": "Port",
"portrait": "Portrait",
"previous": "Previous",
"refresh": "Refresh",
"releasePage": "Release page",
Expand All @@ -77,6 +81,7 @@
"repeat_one": "Repeat: One",
"retry": "Retry",
"save": "Save",
"screen_orientation": "ScreenOrientation",
"select_language": "Select language",
"settings": "Settings",
"shuffle": "Shuffle",
Expand Down
5 changes: 5 additions & 0 deletions lib/l10n/app_zh.arb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"confirmUpdate": "确认更新",
"crop": "裁切",
"dark": "暗色",
"device": "设备",
"download": "下载",
"download_and_update": "下载并更新",
"download_error": "下载错误",
Expand All @@ -43,6 +44,7 @@
"history": "历史",
"home": "主页",
"host": "主机",
"landscape": "横向",
"language": "语言",
"last_modified": "最后修改",
"libraries": "开源库",
Expand All @@ -65,8 +67,10 @@
"pause": "暂停",
"play": "播放",
"play_queue": "播放队列",
"playback_speed": "播放速度",
"player_backend": "播放器后端",
"port": "端口",
"portrait": "纵向",
"previous": "上一个",
"refresh": "刷新",
"releasePage": "发布页面",
Expand All @@ -77,6 +81,7 @@
"repeat_one": "重复: 当前文件",
"retry": "重试",
"save": "保存",
"screen_orientation": "屏幕方向",
"select_language": "选择语言",
"settings": "设置",
"shuffle": "随机",
Expand Down
16 changes: 8 additions & 8 deletions lib/models/player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ class MediaPlayer {
final Duration duration;
final Duration buffer;
final bool seeking;
final double rate;
final double? aspect;
final double? width;
final double? height;
Expand All @@ -23,7 +22,8 @@ class MediaPlayer {
final Future<void> Function() pause;
final Future<void> Function(int) backward;
final Future<void> Function(int) forward;
final Future<void> Function(double) updateRate;
final Future<void> Function() stepBackward;
final Future<void> Function() stepForward;
final Future<void> Function(Duration) seekTo;

MediaPlayer({
Expand All @@ -34,7 +34,6 @@ class MediaPlayer {
required this.duration,
required this.buffer,
required this.seeking,
required this.rate,
required this.aspect,
required this.width,
required this.height,
Expand All @@ -45,7 +44,8 @@ class MediaPlayer {
required this.pause,
required this.backward,
required this.forward,
required this.updateRate,
required this.stepBackward,
required this.stepForward,
required this.seekTo,
});
}
Expand All @@ -72,7 +72,6 @@ class MediaKitPlayer extends MediaPlayer {
required super.duration,
required super.buffer,
required super.seeking,
required super.rate,
required super.aspect,
required super.width,
required super.height,
Expand All @@ -83,7 +82,8 @@ class MediaKitPlayer extends MediaPlayer {
required super.pause,
required super.backward,
required super.forward,
required super.updateRate,
required super.stepBackward,
required super.stepForward,
required super.seekTo,
});
}
Expand All @@ -102,7 +102,6 @@ class FvpPlayer extends MediaPlayer {
required super.duration,
required super.buffer,
required super.seeking,
required super.rate,
required super.aspect,
required super.width,
required super.height,
Expand All @@ -113,7 +112,8 @@ class FvpPlayer extends MediaPlayer {
required super.pause,
required super.backward,
required super.forward,
required super.updateRate,
required super.stepBackward,
required super.stepForward,
required super.seekTo,
});
}
Loading

0 comments on commit cafefd4

Please sign in to comment.