Merge branch 'main' into feature-danmaku

This commit is contained in:
guozhigq
2023-08-27 22:01:29 +08:00
4 changed files with 71 additions and 54 deletions

View File

@ -41,7 +41,6 @@ class VideoDetailController extends GetxController
late VideoQuality currentVideoQa;
AudioQuality? currentAudioQa;
late VideoDecodeFormats currentDecodeFormats;
// PlPlayerController plPlayerController = PlPlayerController();
// 是否开始自动播放 存在多p的情况下第二p需要为true
RxBool autoPlay = true.obs;
// 视频资源是否有效
@ -183,7 +182,6 @@ class VideoDetailController extends GetxController
),
// 硬解
enableHA: enableHA.value,
autoplay: autoPlay.value,
seekTo: seekToTime ?? defaultST,
duration: duration ?? Duration(milliseconds: data.timeLength ?? 0),
// 宽>高 水平 否则 垂直
@ -198,11 +196,6 @@ class VideoDetailController extends GetxController
);
}
// 手动点击播放
handlePlay() {
plPlayerController.togglePlay();
}
// 视频链接
Future queryVideoUrl() async {
var result = await VideoHttp.videoUrl(cid: cid, bvid: bvid);
@ -292,7 +285,9 @@ class VideoDetailController extends GetxController
currentAudioQa = AudioQualityCode.fromCode(firstAudio.id!)!;
}
defaultST = Duration(milliseconds: data.lastPlayTime!);
await playerInit();
if (autoPlay.value) {
await playerInit();
}
} else {
if (result['code'] == -404) {
isShowCover.value = false;

View File

@ -53,20 +53,29 @@ class _VideoDetailPageState extends State<VideoDetailPage>
@override
void initState() {
super.initState();
plPlayerController = videoDetailController.plPlayerController;
playerListener();
statusBarHeight = localCache.get('statusBarHeight');
videoSourceInit();
appbarStreamListen();
}
// 获取视频资源,初始化播放器
Future<void> videoSourceInit() async {
_futureBuilderFuture = videoDetailController.queryVideoUrl();
if (videoDetailController.autoPlay.value) {
plPlayerController = videoDetailController.plPlayerController;
playerListener();
}
}
// 流
appbarStreamListen() {
appbarStream = StreamController<double>();
_extendNestCtr.addListener(
() {
double offset = _extendNestCtr.position.pixels;
appbarStream.add(offset);
},
);
statusBarHeight = localCache.get('statusBarHeight');
_futureBuilderFuture = videoDetailController.queryVideoUrl();
}
// 播放器状态监听
@ -96,6 +105,14 @@ class _VideoDetailPageState extends State<VideoDetailPage>
plPlayerController!.play();
}
Future<void> handlePlay() async {
await videoDetailController.playerInit();
plPlayerController = videoDetailController.plPlayerController;
videoDetailController.autoPlay.value = true;
videoDetailController.isShowCover.value = false;
playerListener();
}
@override
void dispose() {
plPlayerController!.dispose();
@ -179,13 +196,20 @@ class _VideoDetailPageState extends State<VideoDetailPage>
builder: ((context, snapshot) {
if (snapshot.hasData &&
snapshot.data['status']) {
return PLVideoPlayer(
controller: plPlayerController!,
headerControl: HeaderControl(
controller: plPlayerController,
videoDetailCtr:
videoDetailController,
),
return Obx(
() => videoDetailController
.autoPlay.value
? PLVideoPlayer(
controller:
plPlayerController!,
headerControl: HeaderControl(
controller:
plPlayerController,
videoDetailCtr:
videoDetailController,
),
)
: const SizedBox(),
);
} else {
return const SizedBox();
@ -228,28 +252,31 @@ class _VideoDetailPageState extends State<VideoDetailPage>
right: 0,
child: AppBar(
primary: false,
foregroundColor: Colors.white,
backgroundColor:
Colors.transparent,
actions: [
IconButton(
tooltip: '稍后再看',
onPressed: () async {
var res = await UserHttp
.toViewLater(
bvid:
videoDetailController
.bvid);
SmartDialog.showToast(
res['msg']);
},
icon: const Icon(Icons
.history_outlined))
tooltip: '稍后再看',
onPressed: () async {
var res = await UserHttp
.toViewLater(
bvid:
videoDetailController
.bvid);
SmartDialog.showToast(
res['msg']);
},
icon: const Icon(
Icons.history_outlined),
),
const SizedBox(width: 14)
],
),
),
Positioned(
right: 12,
bottom: 6,
bottom: 10,
child: TextButton.icon(
style: ButtonStyle(
backgroundColor:
@ -261,9 +288,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
.primaryContainer;
}),
),
onPressed: () =>
videoDetailController
.handlePlay(),
onPressed: () => handlePlay(),
icon: const Icon(
Icons.play_circle_outline,
size: 20,

View File

@ -726,7 +726,7 @@ packages:
source: hosted
version: "1.1.6"
media_kit_libs_android_video:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_libs_android_video
sha256: "498a5062bc5f000bd23ada3be788ea886ab32c52f7a8252dde1264ca019b819b"
@ -734,7 +734,7 @@ packages:
source: hosted
version: "1.3.3"
media_kit_libs_ios_video:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_libs_ios_video
sha256: fed403dc9d54462e51ee80e0cb23c12a53fadea9a8fa18aca2de9054176d1159
@ -742,7 +742,7 @@ packages:
source: hosted
version: "1.1.3"
media_kit_libs_linux:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_libs_linux
sha256: "3b7c272179639a914dc8a50bf8a3f2df0e9a503bd727c88fab499dbdf6cb1eb8"
@ -750,23 +750,15 @@ packages:
source: hosted
version: "1.1.2"
media_kit_libs_macos_video:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_libs_macos_video
sha256: c06e831f3c22a45296d375788d9bc07871b448f8e9ec98d77b11e5e118a83fb2
url: "https://pub.dev"
source: hosted
version: "1.1.3"
media_kit_libs_video:
dependency: "direct main"
description:
name: media_kit_libs_video
sha256: "48c8ace458f340e6b930c89c48141ea727b80aa0878f7a01904d7d439865f162"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
media_kit_libs_windows_video:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_libs_windows_video
sha256: "923f068344d7d200184e0aaa2597f3de6c05982a3b1f18035d842ab53f2a1350"
@ -774,7 +766,7 @@ packages:
source: hosted
version: "1.0.8"
media_kit_native_event_loop:
dependency: transitive
dependency: "direct main"
description:
name: media_kit_native_event_loop
sha256: e37ce6fb5fa71b8cf513c6a6cd591367743a342a385e7da621a047dd8ef6f4a4

View File

@ -84,9 +84,14 @@ dependencies:
crypto: ^3.0.3
# 视频播放器
media_kit: ^1.1.6
media_kit_video: ^1.1.7
media_kit_libs_video: ^1.0.0
media_kit: ^1.1.4 # Primary package.
media_kit_video: ^1.1.5 # For video rendering.
media_kit_native_event_loop: ^1.0.7 # Support for higher number of concurrent instances & better performance.
media_kit_libs_android_video: ^1.3.2 # Android package for video native libraries.
media_kit_libs_ios_video: ^1.1.3 # iOS package for video native libraries.
media_kit_libs_macos_video: ^1.1.3 # macOS package for video native libraries.
media_kit_libs_windows_video: ^1.0.7 # Windows package for video native libraries.
media_kit_libs_linux: ^1.1.1
# 音量、亮度、屏幕控制
flutter_volume_controller: ^1.2.7