opt: only play audio

Closes #519

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-03-25 18:25:08 +08:00
parent d4e4813c78
commit cd3385be63
2 changed files with 28 additions and 18 deletions

View File

@@ -318,7 +318,18 @@ class _HeaderControlState extends State<HeaderControl> {
2 => Obx( 2 => Obx(
() => ActionRowLineItem( () => ActionRowLineItem(
iconData: Icons.headphones, iconData: Icons.headphones,
onTap: widget.controller.setOnlyPlayAudio, onTap: () {
widget.controller.onlyPlayAudio.value =
!widget.controller.onlyPlayAudio.value;
if (widget.controller.onlyPlayAudio.value) {
widget.videoDetailCtr.playerInit(
video: widget.videoDetailCtr.audioUrl ?? '',
audio: '',
);
} else {
widget.videoDetailCtr.playerInit();
}
},
text: " 听视频 ", text: " 听视频 ",
selectStatus: widget.controller.onlyPlayAudio.value, selectStatus: widget.controller.onlyPlayAudio.value,
), ),

View File

@@ -90,8 +90,6 @@ class PlPlayerController {
/// 后台播放 /// 后台播放
late final Rx<bool> _continuePlayInBackground = false.obs; late final Rx<bool> _continuePlayInBackground = false.obs;
late final Rx<bool> _onlyPlayAudio = false.obs;
late final Rx<bool> _flipX = false.obs; late final Rx<bool> _flipX = false.obs;
late final Rx<bool> _flipY = false.obs; late final Rx<bool> _flipY = false.obs;
@@ -226,7 +224,7 @@ class PlPlayerController {
Rx<bool> get continuePlayInBackground => _continuePlayInBackground; Rx<bool> get continuePlayInBackground => _continuePlayInBackground;
/// 听视频 /// 听视频
Rx<bool> get onlyPlayAudio => _onlyPlayAudio; late final Rx<bool> onlyPlayAudio = false.obs;
/// 镜像 /// 镜像
Rx<bool> get flipX => _flipX; Rx<bool> get flipX => _flipX;
@@ -713,7 +711,7 @@ class PlPlayerController {
AudioTrack.auto(), AudioTrack.auto(),
); );
// 音轨 // 音轨
if (dataSource.audioSource?.isNotEmpty ?? false) { if (dataSource.audioSource?.isNotEmpty == true) {
await pp.setProperty( await pp.setProperty(
'audio-files', 'audio-files',
UniversalPlatform.isWindows UniversalPlatform.isWindows
@@ -721,10 +719,7 @@ class PlPlayerController {
: dataSource.audioSource!.replaceAll(':', '\\:'), : dataSource.audioSource!.replaceAll(':', '\\:'),
); );
} else { } else {
await pp.setProperty( await pp.setProperty('audio-files', '');
'audio-files',
'',
);
} }
// 字幕 // 字幕
@@ -778,11 +773,11 @@ class PlPlayerController {
SmartDialog.showToast('视频播放器为空,请重新进入本页面'); SmartDialog.showToast('视频播放器为空,请重新进入本页面');
return false; return false;
} }
if (dataSource.videoSource?.isEmpty ?? true) { if (dataSource.videoSource.isNullOrEmpty) {
SmartDialog.showToast('视频源为空,请重新进入本页面'); SmartDialog.showToast('视频源为空,请重新进入本页面');
return false; return false;
} }
if (dataSource.audioSource?.isEmpty ?? true) { if (dataSource.audioSource.isNullOrEmpty) {
SmartDialog.showToast('音频源为空'); SmartDialog.showToast('音频源为空');
} else { } else {
await (_videoPlayerController!.platform as NativePlayer).setProperty( await (_videoPlayerController!.platform as NativePlayer).setProperty(
@@ -947,12 +942,16 @@ class PlPlayerController {
} else if (event.startsWith('Could not open codec')) { } else if (event.startsWith('Could not open codec')) {
SmartDialog.showToast('无法加载解码器, $event,可能会切换至软解'); SmartDialog.showToast('无法加载解码器, $event,可能会切换至软解');
return; return;
} else if (event.startsWith("Failed to open .") ||
event.startsWith("Cannot open file ''")) {
SmartDialog.showToast('视频源为空');
} else { } else {
SmartDialog.showToast('视频加载错误, $event'); if (onlyPlayAudio.value.not) {
debugPrint('视频加载错误, $event'); if (event.startsWith("Failed to open .") ||
event.startsWith("Cannot open file ''")) {
SmartDialog.showToast('视频源为空');
} else {
SmartDialog.showToast('视频加载错误, $event');
debugPrint('视频加载错误, $event');
}
}
} }
}), }),
// videoPlayerController!.stream.volume.listen((event) { // videoPlayerController!.stream.volume.listen((event) {
@@ -1609,9 +1608,9 @@ class PlPlayerController {
} }
void setOnlyPlayAudio() { void setOnlyPlayAudio() {
_onlyPlayAudio.value = !_onlyPlayAudio.value; onlyPlayAudio.value = !onlyPlayAudio.value;
videoPlayerController?.setVideoTrack( videoPlayerController?.setVideoTrack(
_onlyPlayAudio.value ? VideoTrack.no() : VideoTrack.auto()); onlyPlayAudio.value ? VideoTrack.no() : VideoTrack.auto());
} }
late final showSeekPreview = GStorage.showSeekPreview; late final showSeekPreview = GStorage.showSeekPreview;