import 'package:audio_service/audio_service.dart'; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; class MediaPlayback extends BaseAudioHandler { Player? _player; VideoController? _controller; Player? get player => _player; VideoController? get controller => _controller; Player setPlayer(Player player) => _player = player; VideoController setController(VideoController player) => _controller = player; Future setVolume(double volume) async => _player?.setVolume(volume); Future setSubtitleTrack(SubtitleTrack track) async => _player?.setSubtitleTrack(track); List get subTracks => _player?.state.tracks.subtitle ?? []; SubtitleTrack get subtitleTrack => _player?.state.track.subtitle ?? SubtitleTrack.no(); Future setAudioTrack(AudioTrack track) async => _player?.setAudioTrack(track); List get audioTracks => _player?.state.tracks.audio ?? []; AudioTrack get audioTrack => _player?.state.track.audio ?? AudioTrack.no(); @override Future seek(Duration position) async => player?.seek(position); @override Future play() async { await player?.play(); return super.play(); } Future open( Playable playable, { bool play = true, }) async { return player?.open(playable, play: play); } @override Future fastForward() async { if (player != null) { await player!.seek(player!.state.position + const Duration(seconds: 30)); } return super.fastForward(); } @override Future rewind() async { if (player != null) { await player?.seek(player!.state.position - const Duration(seconds: 10)); } return super.rewind(); } @override Future setSpeed(double speed) async { await player?.setRate(speed); return super.setSpeed(speed); } @override Future pause() async { playbackState.add(playbackState.value.copyWith( playing: false, controls: [MediaControl.play], )); await player?.pause(); return super.pause(); } }