mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-29 14:56:29 +08:00
refa player (#1848)
* tweak
* Reapply "opt: audio uri" (#1833)
This reverts commit 8e726f49b2.
* opt: player
* opt: player
* refa: create player
* refa: player
* opt: UaType
* fix: sb seek preview
* opt: setSub
* fix: screenshot
* opt: unnecessary final player state
* opt: player track
* opt FileSource constructor [skip ci]
* fixes
* fix: dispose player
* fix: quote
* update
* fix: multi ua & remove unused loop
* remove unneeded check [skip ci]
---------
Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
committed by
GitHub
parent
6782bee11a
commit
7276cde48a
@@ -1,4 +1,5 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:math' show min;
|
||||
import 'dart:ui';
|
||||
|
||||
@@ -7,11 +8,9 @@ import 'package:PiliPlus/common/widgets/pair.dart';
|
||||
import 'package:PiliPlus/common/widgets/progress_bar/segment_progress_bar.dart';
|
||||
import 'package:PiliPlus/grpc/bilibili/app/listener/v1.pbenum.dart'
|
||||
show PlaylistSource;
|
||||
import 'package:PiliPlus/http/constants.dart';
|
||||
import 'package:PiliPlus/http/fav.dart';
|
||||
import 'package:PiliPlus/http/init.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/http/ua_type.dart';
|
||||
import 'package:PiliPlus/http/user.dart';
|
||||
import 'package:PiliPlus/http/video.dart';
|
||||
import 'package:PiliPlus/main.dart';
|
||||
@@ -55,10 +54,12 @@ import 'package:PiliPlus/plugin/pl_player/models/play_status.dart';
|
||||
import 'package:PiliPlus/services/download/download_service.dart';
|
||||
import 'package:PiliPlus/utils/accounts.dart';
|
||||
import 'package:PiliPlus/utils/extension/context_ext.dart';
|
||||
import 'package:PiliPlus/utils/extension/file_ext.dart';
|
||||
import 'package:PiliPlus/utils/extension/iterable_ext.dart';
|
||||
import 'package:PiliPlus/utils/extension/num_ext.dart';
|
||||
import 'package:PiliPlus/utils/extension/size_ext.dart';
|
||||
import 'package:PiliPlus/utils/page_utils.dart';
|
||||
import 'package:PiliPlus/utils/path_utils.dart';
|
||||
import 'package:PiliPlus/utils/platform_utils.dart';
|
||||
import 'package:PiliPlus/utils/storage.dart';
|
||||
import 'package:PiliPlus/utils/storage_pref.dart';
|
||||
@@ -71,7 +72,8 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:media_kit/media_kit.dart' hide Subtitle;
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
class VideoDetailController extends GetxController
|
||||
with GetTickerProviderStateMixin, BlockMixin {
|
||||
@@ -675,27 +677,21 @@ class VideoDetailController extends GetxController
|
||||
bool? autoplay,
|
||||
Volume? volume,
|
||||
}) async {
|
||||
final onlyPlayAudio = plPlayerController.onlyPlayAudio.value;
|
||||
Duration? seek = seekToTime ?? defaultST ?? playedTime;
|
||||
if (seek == null || seek == Duration.zero) {
|
||||
seek = getFirstSegment();
|
||||
}
|
||||
await plPlayerController.setDataSource(
|
||||
DataSource(
|
||||
videoSource: isFileSource
|
||||
? null
|
||||
: onlyPlayAudio
|
||||
? audio ?? audioUrl
|
||||
: video ?? videoUrl,
|
||||
audioSource: isFileSource || onlyPlayAudio ? null : audio ?? audioUrl,
|
||||
type: isFileSource ? DataSourceType.file : DataSourceType.network,
|
||||
httpHeaders: isFileSource
|
||||
? null
|
||||
: {
|
||||
'user-agent': UaType.pc.ua,
|
||||
'referer': HttpString.baseUrl,
|
||||
},
|
||||
),
|
||||
isFileSource
|
||||
? FileSource(
|
||||
dir: args['dirPath'],
|
||||
typeTag: entry.typeTag!,
|
||||
isMp4: entry.mediaType == 1,
|
||||
)
|
||||
: NetworkSource(
|
||||
videoSource: video ?? videoUrl!,
|
||||
audioSource: audio ?? audioUrl,
|
||||
),
|
||||
seekTo: seek,
|
||||
duration:
|
||||
duration ??
|
||||
@@ -720,9 +716,6 @@ class VideoDetailController extends GetxController
|
||||
width: firstVideo.width,
|
||||
height: firstVideo.height,
|
||||
volume: volume ?? this.volume,
|
||||
dirPath: isFileSource ? args['dirPath'] : null,
|
||||
typeTag: isFileSource ? entry.typeTag : null,
|
||||
mediaType: isFileSource ? entry.mediaType : null,
|
||||
);
|
||||
|
||||
if (isClosed) return;
|
||||
@@ -1013,14 +1006,24 @@ class VideoDetailController extends GetxController
|
||||
|
||||
Future<void> setSub(({bool isData, String id}) subtitle) async {
|
||||
final sub = subtitles[index - 1];
|
||||
|
||||
String subUri = subtitle.id;
|
||||
File? file;
|
||||
if (subtitle.isData) {
|
||||
subUri = path.join(tmpDirPath, '${cid.value}-${sub.lan}.vtt');
|
||||
file = File(subUri);
|
||||
if (!file.existsSync()) {
|
||||
await file.writeAsString(subtitle.id);
|
||||
if (plPlayerController.videoPlayerController?.disposed == false) {
|
||||
plPlayerController.videoPlayerController!.release.add(file.tryDel);
|
||||
} else {
|
||||
file.tryDel();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
await plPlayerController.videoPlayerController?.setSubtitleTrack(
|
||||
SubtitleTrack(
|
||||
subtitle.id,
|
||||
sub.lanDoc,
|
||||
sub.lan,
|
||||
uri: !subtitle.isData,
|
||||
data: subtitle.isData,
|
||||
),
|
||||
SubtitleTrack(subUri, sub.lanDoc, sub.lan, uri: true),
|
||||
);
|
||||
vttSubtitlesIndex.value = index;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user