From ce1daec3c579dc2536a752801cfeb5119829b340 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sun, 27 Aug 2023 22:00:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=B3=E9=97=AD=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=92=AD=E6=94=BE=E6=97=B6=E6=92=AD=E6=94=BE=E5=99=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E9=80=BB=E8=BE=91=E3=80=81=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=99=A8=E6=8F=92=E4=BB=B6=E5=9B=9E=E6=BB=9A=EF=BC=88=E9=AB=98?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=A1=B5=E9=9D=A2=E5=9B=9E=E9=80=80=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E8=87=AA=E5=8A=A8=E7=BB=A7=E7=BB=AD=E6=92=AD?= =?UTF-8?q?=E6=94=BE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/video/detail/controller.dart | 11 +--- lib/pages/video/detail/view.dart | 83 +++++++++++++++++--------- pubspec.lock | 20 ++----- pubspec.yaml | 11 +++- 4 files changed, 71 insertions(+), 54 deletions(-) diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index 8fd71b32..53f0e16d 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -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; diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 2bf53cf0..b51510dc 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -53,20 +53,29 @@ class _VideoDetailPageState extends State @override void initState() { super.initState(); - plPlayerController = videoDetailController.plPlayerController; - playerListener(); + statusBarHeight = localCache.get('statusBarHeight'); + videoSourceInit(); + appbarStreamListen(); + } + // 获取视频资源,初始化播放器 + Future videoSourceInit() async { + _futureBuilderFuture = videoDetailController.queryVideoUrl(); + if (videoDetailController.autoPlay.value) { + plPlayerController = videoDetailController.plPlayerController; + playerListener(); + } + } + + // 流 + appbarStreamListen() { appbarStream = StreamController(); - _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 plPlayerController!.play(); } + Future 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 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 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 .primaryContainer; }), ), - onPressed: () => - videoDetailController - .handlePlay(), + onPressed: () => handlePlay(), icon: const Icon( Icons.play_circle_outline, size: 20, diff --git a/pubspec.lock b/pubspec.lock index 396a1635..2cc56af7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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 diff --git a/pubspec.yaml b/pubspec.yaml index fa49cbe1..fc88c47a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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