fix: loudnorm out of range (#1371)

This commit is contained in:
My-Responsitories
2025-09-29 14:02:37 +08:00
committed by GitHub
parent 2817c8f5b1
commit 05636b33c0
2 changed files with 24 additions and 5 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:math' show max, min;
import 'package:PiliPlus/models/common/video/audio_quality.dart';
import 'package:PiliPlus/models/common/video/video_quality.dart';
import 'package:PiliPlus/utils/extension.dart';
@@ -341,9 +343,18 @@ class Volume {
);
}
@override
String toString() =>
'measured_I=$measuredI:measured_LRA=$measuredLra:measured_TP=$measuredTp:measured_thresh=$measuredThreshold';
String format(Map<String, num> config) {
final lra = max(config['lra'] ?? 11, measuredLra);
num i = config['i'] ?? targetI;
final tp = min(config['tp'] ?? targetTp, measuredTp);
final offset = config['offset'] ?? targetOffset;
num measuredI = this.measuredI;
if (measuredI > 0) {
i -= measuredI;
measuredI = 0;
}
return 'LRA=$lra:I=$i:TP=$tp:offset=$offset:linear=true:measured_I=$measuredI:measured_LRA=$measuredLra:measured_TP=$measuredTp:measured_thresh=$measuredThreshold';
}
bool get isNotEmpty =>
measuredI != 0 ||

View File

@@ -747,7 +747,7 @@ class PlPlayerController {
}
}
static final loudnormRegExp = RegExp('loudnorm=[^,]+');
static final loudnormRegExp = RegExp('loudnorm=([^,]+)');
// 配置播放器
Future<Player> _createVideoController(
@@ -845,7 +845,15 @@ class PlPlayerController {
if (volume != null && volume.isNotEmpty) {
audioNormalization = audioNormalization.replaceFirstMapped(
loudnormRegExp,
(i) => '${i[0]}:$volume',
(i) =>
'loudnorm=${volume.format(
Map.fromEntries(
i.group(1)!.split(':').map((item) {
final parts = item.split('=');
return MapEntry(parts[0].toLowerCase(), num.parse(parts[1]));
}),
),
)}',
);
} else {
audioNormalization = audioNormalization.replaceFirst(