Skip to content

Commit deae72a

Browse files
authored
Merge pull request #36 from nini22P/dev
v1.4.1
2 parents 6517829 + c80aba3 commit deae72a

10 files changed

Lines changed: 1876 additions & 445 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
# Create a directory to hold the files
3434
mkdir IRIS
3535
# Copy the build output to the IRIS directory
36-
Copy-Item -Path "build\windows\x64\runner\Release\*" -Destination "IRIS" -Force
36+
Copy-Item -Path "build\windows\x64\runner\Release\*" -Destination "IRIS" -Recurse -Force
3737
# Create a ZIP file
3838
Compress-Archive -Path "IRIS" -DestinationPath "IRIS-windows.zip"
3939
- name: Upload artifact
@@ -133,7 +133,7 @@ jobs:
133133
id: tag_name
134134
run: |
135135
VERSION="${{ steps.yq.outputs.result }}"
136-
TAG_NAME="v${VERSION}"
136+
TAG_NAME="v${VERSION%%+*}"
137137
echo "TAG_NAME=$TAG_NAME" >> "$GITHUB_OUTPUT"
138138
- name: Check tag
139139
uses: mukunku/tag-exists-action@v1.6.0

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## v1.4.1
2+
3+
### Changelog
4+
5+
* Dynamic FTP streaming url
6+
7+
### 更新日志
8+
9+
* FTP 串流使用动态 url
10+
111
## v1.4.0
212

313
### Changelog

inno.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
33

44
#define MyAppName "IRIS"
5-
#define MyAppVersion "1.4.0"
5+
#define MyAppVersion "1.4.1"
66
#define MyAppPublisher "nini22P"
77
#define MyAppURL "https://github.com/nini22P/iris"
88
#define MyAppExeName "iris.exe"

lib/hooks/use_fvp_player.dart

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:iris/globals.dart' as globals;
77
import 'package:iris/models/file.dart';
88
import 'package:iris/models/player.dart';
99
import 'package:iris/models/progress.dart';
10+
import 'package:iris/models/storages/storage.dart';
1011
import 'package:iris/models/store/app_state.dart';
1112
import 'package:iris/store/use_app_store.dart';
1213
import 'package:iris/store/use_history_store.dart';
@@ -15,6 +16,7 @@ import 'package:iris/store/use_storage_store.dart';
1516
import 'package:iris/utils/check_data_source_type.dart';
1617
import 'package:iris/utils/logger.dart';
1718
import 'package:iris/utils/platform.dart';
19+
import 'package:media_stream/media_stream.dart';
1820
import 'package:saf_util/saf_util.dart';
1921
import 'package:video_player/video_player.dart';
2022
import 'package:wakelock_plus/wakelock_plus.dart';
@@ -60,6 +62,9 @@ FvpPlayer useFvpPlayer(BuildContext context) {
6062

6163
Future<void> init() async => initValue.value = true;
6264

65+
MediaStream mediaStream = MediaStream();
66+
final streamUrl = mediaStream.url;
67+
6368
final controllerFuture = useMemoized(() async {
6469
if (file == null) return VideoPlayerController.networkUrl(Uri.parse(''));
6570
isInitializing.value = true;
@@ -79,7 +84,9 @@ FvpPlayer useFvpPlayer(BuildContext context) {
7984
);
8085
default:
8186
return VideoPlayerController.networkUrl(
82-
Uri.parse(file.uri),
87+
Uri.parse(file.storageType == StorageType.ftp
88+
? '$streamUrl/${file.uri}'
89+
: file.uri),
8390
httpHeaders: auth != null ? {'authorization': auth} : {},
8491
);
8592
}
@@ -167,17 +174,21 @@ FvpPlayer useFvpPlayer(BuildContext context) {
167174
} else if (externalSubtitle.value! < externalSubtitles.length) {
168175
bool isExists = true;
169176

177+
final uri = file?.storageType == StorageType.ftp
178+
? '$streamUrl/${externalSubtitles[currentExternalSubtitle].uri}'
179+
: externalSubtitles[currentExternalSubtitle].uri;
180+
181+
logger('External subtitle uri: $uri');
182+
170183
if (Platform.isAndroid &&
171184
externalSubtitles[currentExternalSubtitle]
172185
.uri
173186
.startsWith('content://')) {
174-
isExists = await SafUtil()
175-
.exists(externalSubtitles[currentExternalSubtitle].uri, false);
187+
isExists = await SafUtil().exists(uri, false);
176188
}
177189

178190
if (isExists) {
179-
controller.setExternalSubtitle(
180-
externalSubtitles[currentExternalSubtitle].uri);
191+
controller.setExternalSubtitle(uri);
181192
} else {
182193
externalSubtitle.value = null;
183194
}

lib/hooks/use_media_kit_player.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:iris/globals.dart' as globals;
77
import 'package:iris/models/file.dart';
88
import 'package:iris/models/player.dart';
99
import 'package:iris/models/progress.dart';
10+
import 'package:iris/models/storages/storage.dart';
1011
import 'package:iris/models/store/app_state.dart';
1112
import 'package:iris/store/use_app_store.dart';
1213
import 'package:iris/store/use_history_store.dart';
@@ -16,6 +17,7 @@ import 'package:iris/utils/logger.dart';
1617
import 'package:iris/utils/platform.dart';
1718
import 'package:media_kit/media_kit.dart';
1819
import 'package:media_kit_video/media_kit_video.dart';
20+
import 'package:media_stream/media_stream.dart';
1921
import 'package:path_provider/path_provider.dart';
2022

2123
MediaKitPlayer useMediaKitPlayer(BuildContext context) {
@@ -130,6 +132,9 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
130132

131133
final isInitializing = useState(false);
132134

135+
MediaStream mediaStream = MediaStream();
136+
final streamUrl = mediaStream.url;
137+
133138
Future<void> init(FileItem file) async {
134139
if (file.uri == '') return;
135140
isInitializing.value = true;
@@ -140,7 +145,9 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
140145
logger('Open file: $file');
141146
await player.open(
142147
Media(
143-
file.uri,
148+
file.storageType == StorageType.ftp
149+
? '$streamUrl/${file.uri}'
150+
: file.uri,
144151
httpHeaders: auth != null ? {'authorization': auth} : {},
145152
),
146153
play: autoPlay,
@@ -202,9 +209,13 @@ MediaKitPlayer useMediaKitPlayer(BuildContext context) {
202209
// 设置字幕
203210
if (externalSubtitles!.isNotEmpty) {
204211
logger('Set external subtitle: ${externalSubtitles[0]}');
212+
final uri = file?.storageType == StorageType.ftp
213+
? '$streamUrl/${externalSubtitles[0].uri}'
214+
: externalSubtitles[0].uri;
215+
logger('External subtitle uri: $uri');
205216
await player.setSubtitleTrack(
206217
SubtitleTrack.uri(
207-
externalSubtitles[0].uri,
218+
uri,
208219
title: externalSubtitles[0].name,
209220
),
210221
);

lib/models/storages/ftp.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Future<List<FileItem>> getFTPFiles(
3333
await client.disconnect();
3434

3535
final baseUri =
36-
'http://localhost:8760/ftp?host=${storage.host}&port=${storage.port}&path=${path.join('/').replaceFirst('//', '/')}';
36+
'ftp?host=${storage.host}&port=${storage.port}&path=${path.join('/').replaceFirst('//', '/')}';
3737

3838
return await Future.wait(files.map(
3939
(file) async => FileItem(

0 commit comments

Comments
 (0)