feat: 音频输出方式设置
This commit is contained in:
6
lib/models/video/play/ao_output.dart
Normal file
6
lib/models/video/play/ao_output.dart
Normal file
@ -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'},
|
||||||
|
];
|
@ -3,6 +3,7 @@ import 'dart:io';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.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/models/video/play/quality.dart';
|
||||||
import 'package:pilipala/pages/setting/widgets/select_dialog.dart';
|
import 'package:pilipala/pages/setting/widgets/select_dialog.dart';
|
||||||
import 'package:pilipala/plugin/pl_player/index.dart';
|
import 'package:pilipala/plugin/pl_player/index.dart';
|
||||||
@ -28,6 +29,7 @@ class _PlaySettingState extends State<PlaySetting> {
|
|||||||
late dynamic defaultDecode;
|
late dynamic defaultDecode;
|
||||||
late int defaultFullScreenMode;
|
late int defaultFullScreenMode;
|
||||||
late int defaultBtmProgressBehavior;
|
late int defaultBtmProgressBehavior;
|
||||||
|
late String defaultAoOutput;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -44,6 +46,8 @@ class _PlaySettingState extends State<PlaySetting> {
|
|||||||
defaultValue: FullScreenMode.values.first.code);
|
defaultValue: FullScreenMode.values.first.code);
|
||||||
defaultBtmProgressBehavior = setting.get(SettingBoxKey.btmProgressBehavior,
|
defaultBtmProgressBehavior = setting.get(SettingBoxKey.btmProgressBehavior,
|
||||||
defaultValue: BtmProgresBehavior.values.first.code);
|
defaultValue: BtmProgresBehavior.values.first.code);
|
||||||
|
defaultAoOutput =
|
||||||
|
setting.get(SettingBoxKey.defaultAoOutput, defaultValue: '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -263,6 +267,31 @@ class _PlaySettingState extends State<PlaySetting> {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
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<String>(
|
||||||
|
title: '音频输出方式',
|
||||||
|
value: defaultAoOutput,
|
||||||
|
values: aoOutputList,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (result != null) {
|
||||||
|
defaultAoOutput = result;
|
||||||
|
setting.put(SettingBoxKey.defaultAoOutput, result);
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
dense: false,
|
dense: false,
|
||||||
title: Text('默认全屏方式', style: titleStyle),
|
title: Text('默认全屏方式', style: titleStyle),
|
||||||
|
@ -13,6 +13,7 @@ import 'package:media_kit/media_kit.dart';
|
|||||||
import 'package:media_kit_video/media_kit_video.dart';
|
import 'package:media_kit_video/media_kit_video.dart';
|
||||||
import 'package:ns_danmaku/ns_danmaku.dart';
|
import 'package:ns_danmaku/ns_danmaku.dart';
|
||||||
import 'package:pilipala/http/video.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/index.dart';
|
||||||
import 'package:pilipala/plugin/pl_player/models/play_repeat.dart';
|
import 'package:pilipala/plugin/pl_player/models/play_repeat.dart';
|
||||||
import 'package:pilipala/services/service_locator.dart';
|
import 'package:pilipala/services/service_locator.dart';
|
||||||
@ -453,7 +454,13 @@ class PlPlayerController {
|
|||||||
// 音量不一致
|
// 音量不一致
|
||||||
if (Platform.isAndroid) {
|
if (Platform.isAndroid) {
|
||||||
await pp.setProperty("volume-max", "100");
|
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(
|
await player.setAudioTrack(
|
||||||
|
@ -102,6 +102,8 @@ class SettingBoxKey {
|
|||||||
autoPiP = 'autoPiP',
|
autoPiP = 'autoPiP',
|
||||||
enableAutoLongPressSpeed = 'enableAutoLongPressSpeed',
|
enableAutoLongPressSpeed = 'enableAutoLongPressSpeed',
|
||||||
enablePlayerControlAnimation = 'enablePlayerControlAnimation',
|
enablePlayerControlAnimation = 'enablePlayerControlAnimation',
|
||||||
|
// 默认音频输出方式
|
||||||
|
defaultAoOutput = 'defaultAoOutput',
|
||||||
|
|
||||||
// youtube 双击快进快退
|
// youtube 双击快进快退
|
||||||
enableQuickDouble = 'enableQuickDouble',
|
enableQuickDouble = 'enableQuickDouble',
|
||||||
|
Reference in New Issue
Block a user