From cc32224daf5c2304999d1dfe0952b6b41395c924 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Mon, 24 Jun 2024 23:43:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9F=B3=E9=A2=91=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/models/video/play/ao_output.dart | 6 ++++++ lib/pages/setting/play_setting.dart | 29 ++++++++++++++++++++++++++++ lib/plugin/pl_player/controller.dart | 9 ++++++++- lib/utils/storage.dart | 2 ++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 lib/models/video/play/ao_output.dart diff --git a/lib/models/video/play/ao_output.dart b/lib/models/video/play/ao_output.dart new file mode 100644 index 00000000..170a78c5 --- /dev/null +++ b/lib/models/video/play/ao_output.dart @@ -0,0 +1,6 @@ +final List aoOutputList = [ + {'title': 'audiotrack,opensles', 'value': '0'}, + {'title': 'opensles,audiotrack', 'value': '1'}, + {'title': 'audiotrack', 'value': '2'}, + {'title': 'opensles', 'value': '3'}, +]; diff --git a/lib/pages/setting/play_setting.dart b/lib/pages/setting/play_setting.dart index 4a8495e5..0f7dcdc3 100644 --- a/lib/pages/setting/play_setting.dart +++ b/lib/pages/setting/play_setting.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; +import 'package:pilipala/models/video/play/ao_output.dart'; import 'package:pilipala/models/video/play/quality.dart'; import 'package:pilipala/pages/setting/widgets/select_dialog.dart'; import 'package:pilipala/plugin/pl_player/index.dart'; @@ -28,6 +29,7 @@ class _PlaySettingState extends State { late dynamic defaultDecode; late int defaultFullScreenMode; late int defaultBtmProgressBehavior; + late String defaultAoOutput; @override void initState() { @@ -44,6 +46,8 @@ class _PlaySettingState extends State { defaultValue: FullScreenMode.values.first.code); defaultBtmProgressBehavior = setting.get(SettingBoxKey.btmProgressBehavior, defaultValue: BtmProgresBehavior.values.first.code); + defaultAoOutput = + setting.get(SettingBoxKey.defaultAoOutput, defaultValue: '0'); } @override @@ -263,6 +267,31 @@ class _PlaySettingState extends State { } }, ), + ListTile( + dense: false, + title: Text('音频输出方式', style: titleStyle), + subtitle: Text( + '当前输出方式 ${aoOutputList.firstWhere((element) => element['value'] == defaultAoOutput)['title']}', + style: subTitleStyle, + ), + onTap: () async { + String? result = await showDialog( + context: context, + builder: (context) { + return SelectDialog( + title: '音频输出方式', + value: defaultAoOutput, + values: aoOutputList, + ); + }, + ); + if (result != null) { + defaultAoOutput = result; + setting.put(SettingBoxKey.defaultAoOutput, result); + setState(() {}); + } + }, + ), ListTile( dense: false, title: Text('默认全屏方式', style: titleStyle), diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 2865a117..a614d75d 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -13,6 +13,7 @@ import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; import 'package:ns_danmaku/ns_danmaku.dart'; import 'package:pilipala/http/video.dart'; +import 'package:pilipala/models/video/play/ao_output.dart'; import 'package:pilipala/plugin/pl_player/index.dart'; import 'package:pilipala/plugin/pl_player/models/play_repeat.dart'; import 'package:pilipala/services/service_locator.dart'; @@ -453,7 +454,13 @@ class PlPlayerController { // 音量不一致 if (Platform.isAndroid) { await pp.setProperty("volume-max", "100"); - await pp.setProperty("ao", "audiotrack,opensles"); + String defaultAoOutput = + setting.get(SettingBoxKey.defaultAoOutput, defaultValue: '0'); + await pp.setProperty( + "ao", + aoOutputList + .where((e) => e['value'] == defaultAoOutput) + .first['title']); } await player.setAudioTrack( diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 4a163446..bf9074e3 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -102,6 +102,8 @@ class SettingBoxKey { autoPiP = 'autoPiP', enableAutoLongPressSpeed = 'enableAutoLongPressSpeed', enablePlayerControlAnimation = 'enablePlayerControlAnimation', + // 默认音频输出方式 + defaultAoOutput = 'defaultAoOutput', // youtube 双击快进快退 enableQuickDouble = 'enableQuickDouble',