feat: 支持其他音频打断视频播放

This commit is contained in:
Riri
2023-10-26 20:43:08 +08:00
parent d8d7ab22c9
commit bf905fa46e
3 changed files with 49 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import 'package:pilipala/models/video_detail_res.dart';
import 'package:get/get.dart';
import 'package:pilipala/plugin/pl_player/index.dart';
import 'package:pilipala/utils/storage.dart';
import 'package:audio_session/audio_session.dart';
Future<VideoPlayerServiceHandler> initAudioService() async {
return await AudioService.init(
@ -26,9 +27,49 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
static final List<MediaItem> _item = [];
Box setting = GStrorage.setting;
bool enableBackgroundPlay = false;
late AudioSession session;
bool _playInterrupted = false; // 暂时无用
VideoPlayerServiceHandler() {
revalidateSetting();
initSession();
}
Future<void> initSession() async {
session = await AudioSession.instance;
session.configure(const AudioSessionConfiguration.speech());
session.interruptionEventStream.listen((event) {
if (event.begin) {
switch (event.type) {
case AudioInterruptionType.duck:
// duck or pause
// break;
case AudioInterruptionType.pause:
case AudioInterruptionType.unknown:
pause();
_playInterrupted = true;
break;
}
} else {
switch (event.type) {
case AudioInterruptionType.duck:
// unduck
// break;
case AudioInterruptionType.pause:
if (_playInterrupted) play();
break;
case AudioInterruptionType.unknown:
break;
}
_playInterrupted = false;
}
});
// 耳机拔出暂停
session.becomingNoisyEventStream.listen((_) {
pause();
});
}
revalidateSetting() {
@ -64,6 +105,12 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
final AudioProcessingState processingState;
final playing = status == PlayerStatus.playing;
if (playing) {
_playInterrupted = false;
session.setActive(true);
} else {
session.setActive(false);
}
if (status == PlayerStatus.completed) {
processingState = AudioProcessingState.completed;
} else if (isBuffering) {

View File

@ -82,7 +82,7 @@ packages:
source: hosted
version: "0.1.1"
audio_session:
dependency: transitive
dependency: "direct main"
description:
name: audio_session
sha256: "8a2bc5e30520e18f3fb0e366793d78057fb64cd5287862c76af0c8771f2a52ad"

View File

@ -90,6 +90,7 @@ dependencies:
# 媒体通知
audio_service: ^0.18.12
audio_session: ^0.1.16
# 音量、亮度、屏幕控制
flutter_volume_controller: ^1.3.0