// lib/services/playback_service.dart import 'package:media_kit/media_kit.dart'; // ============================================================ // PlaybackService - 播放引擎封装 // 职责:管理 Player 生命周期,不涉及业务逻辑 // ============================================================ class PlaybackService { static final PlaybackService _instance = PlaybackService._internal(); factory PlaybackService() => _instance; PlaybackService._internal(); Player? _player; bool _initialized = false; // ---------- Getter ---------- Player get player { if (!_initialized) init(); return _player!; } bool get isInitialized => _initialized; // ---------- 初始化 ---------- void init() { if (_initialized) return; _player = Player(); _initialized = true; // 可以在这里配置初始参数 // _player.setVolume(1.0); } // ---------- 播放 ---------- Future play(String url, {Map? headers}) async { if (!_initialized) init(); final media = (headers != null && headers.isNotEmpty) ? Media(url, httpHeaders: headers) : Media(url); await _player!.open(media); await _player!.play(); } // ---------- 控制 ---------- Future pause() async { if (_initialized && _player != null) { await _player!.pause(); } } Future resume() async { if (_initialized && _player != null) { await _player!.play(); } } Future stop() async { if (_initialized && _player != null) { await _player!.stop(); } } Future seek(Duration position) async { if (_initialized && _player != null) { await _player!.seek(position); } } void setVolume(double volume) { if (_initialized && _player != null) { _player!.setVolume(volume); } } // ---------- 释放 ---------- void dispose() { if (_initialized && _player != null) { _player!.dispose(); _player = null; _initialized = false; } } // ---------- 重新初始化(用于 Hot Restart 场景) ---------- void reinitialize() { dispose(); init(); } }