refactor: remove duplicate audio sessions
This commit is contained in:
@@ -4,7 +4,6 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:media_kit/media_kit.dart';
|
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:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:audio_session/audio_session.dart';
|
|
||||||
import '../models/plex_metadata.dart';
|
import '../models/plex_metadata.dart';
|
||||||
import '../models/plex_user_profile.dart';
|
import '../models/plex_user_profile.dart';
|
||||||
import '../providers/plex_client_provider.dart';
|
import '../providers/plex_client_provider.dart';
|
||||||
@@ -167,9 +166,6 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
|
|||||||
final savedVolume = settingsService.getVolume();
|
final savedVolume = settingsService.getVolume();
|
||||||
player!.setVolume(savedVolume);
|
player!.setVolume(savedVolume);
|
||||||
|
|
||||||
// Initialize audio session for proper OS integration
|
|
||||||
await _initializeAudioSession();
|
|
||||||
|
|
||||||
// Update media service manager with new player
|
// Update media service manager with new player
|
||||||
await _updateMediaService();
|
await _updateMediaService();
|
||||||
|
|
||||||
@@ -237,48 +233,6 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _initializeAudioSession() async {
|
|
||||||
try {
|
|
||||||
final session = await AudioSession.instance;
|
|
||||||
await session.configure(const AudioSessionConfiguration(
|
|
||||||
avAudioSessionCategory: AVAudioSessionCategory.playback,
|
|
||||||
avAudioSessionMode: AVAudioSessionMode.moviePlayback,
|
|
||||||
androidAudioAttributes: AndroidAudioAttributes(
|
|
||||||
contentType: AndroidAudioContentType.movie,
|
|
||||||
usage: AndroidAudioUsage.media,
|
|
||||||
),
|
|
||||||
androidAudioFocusGainType: AndroidAudioFocusGainType.gain,
|
|
||||||
));
|
|
||||||
|
|
||||||
// Handle interruptions (phone calls, other apps, etc.)
|
|
||||||
session.interruptionEventStream.listen((event) {
|
|
||||||
if (event.begin) {
|
|
||||||
// Pause on interruption
|
|
||||||
player?.pause();
|
|
||||||
appLogger.i('Playback paused due to interruption');
|
|
||||||
} else {
|
|
||||||
// Resume after interruption if needed (user can manually play)
|
|
||||||
switch (event.type) {
|
|
||||||
case AudioInterruptionType.pause:
|
|
||||||
case AudioInterruptionType.duck:
|
|
||||||
// Don't auto-resume for these types
|
|
||||||
break;
|
|
||||||
case AudioInterruptionType.unknown:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle audio becoming noisy (headphones unplugged)
|
|
||||||
session.becomingNoisyEventStream.listen((_) {
|
|
||||||
player?.pause();
|
|
||||||
appLogger.i('Playback paused due to audio becoming noisy (headphones unplugged?)');
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
appLogger.w('Failed to configure audio session', error: e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _updateMediaService() async {
|
Future<void> _updateMediaService() async {
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
|
|
||||||
@@ -341,7 +295,9 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
|
|||||||
widget.metadata.ratingKey,
|
widget.metadata.ratingKey,
|
||||||
loopQueue: loopQueue,
|
loopQueue: loopQueue,
|
||||||
);
|
);
|
||||||
previous = playbackState.getPreviousEpisode(widget.metadata.ratingKey);
|
previous = playbackState.getPreviousEpisode(
|
||||||
|
widget.metadata.ratingKey,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// Use chronological order even in shuffle mode
|
// Use chronological order even in shuffle mode
|
||||||
next = await client.findAdjacentEpisode(widget.metadata, 1);
|
next = await client.findAdjacentEpisode(widget.metadata, 1);
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ class MediaServiceManager {
|
|||||||
androidNotificationOngoing: false,
|
androidNotificationOngoing: false,
|
||||||
androidStopForegroundOnPause: true,
|
androidStopForegroundOnPause: true,
|
||||||
androidNotificationIcon: 'drawable/ic_stat_notification',
|
androidNotificationIcon: 'drawable/ic_stat_notification',
|
||||||
|
// Configure audio session for proper media playback
|
||||||
|
preloadArtwork: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+6
-5
@@ -44,10 +44,11 @@ packages:
|
|||||||
audio_service:
|
audio_service:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: audio_service
|
path: audio_service
|
||||||
sha256: cb122c7c2639d2a992421ef96b67948ad88c5221da3365ccef1031393a76e044
|
ref: "4ca42f391183854095188a5a10fa6b59cd641e68"
|
||||||
url: "https://pub.dev"
|
resolved-ref: "4ca42f391183854095188a5a10fa6b59cd641e68"
|
||||||
source: hosted
|
url: "https://github.com/marckornberger/audio_service.git"
|
||||||
|
source: git
|
||||||
version: "0.18.18"
|
version: "0.18.18"
|
||||||
audio_service_platform_interface:
|
audio_service_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
@@ -66,7 +67,7 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.4"
|
version: "0.1.4"
|
||||||
audio_session:
|
audio_session:
|
||||||
dependency: "direct main"
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: audio_session
|
name: audio_session
|
||||||
sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7"
|
sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7"
|
||||||
|
|||||||
+5
-1
@@ -26,7 +26,6 @@ dependencies:
|
|||||||
hotkey_manager: ^0.2.3
|
hotkey_manager: ^0.2.3
|
||||||
flex_color_picker: ^3.6.0
|
flex_color_picker: ^3.6.0
|
||||||
audio_service: ^0.18.18
|
audio_service: ^0.18.18
|
||||||
audio_session: ^0.2.1
|
|
||||||
qr_flutter: ^4.1.0
|
qr_flutter: ^4.1.0
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
@@ -40,6 +39,11 @@ dependency_overrides:
|
|||||||
url: https://github.com/edde746/media-kit
|
url: https://github.com/edde746/media-kit
|
||||||
ref: b6de7e44148043bd26f2569e8062dc8bce4f11b9
|
ref: b6de7e44148043bd26f2569e8062dc8bce4f11b9
|
||||||
path: libs/universal/media_kit_libs_video
|
path: libs/universal/media_kit_libs_video
|
||||||
|
audio_service:
|
||||||
|
git:
|
||||||
|
url: https://github.com/marckornberger/audio_service.git
|
||||||
|
ref: 4ca42f391183854095188a5a10fa6b59cd641e68
|
||||||
|
path: audio_service
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user