1
This commit is contained in:
@@ -3,6 +3,7 @@ import 'dart:async';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:media_kit_video/media_kit_video.dart';
|
||||
|
||||
import '../log/action_logger.dart';
|
||||
import '../media/local_media_server.dart';
|
||||
|
||||
/// 一个播放槽位:Player + 视图控制器 + 当前绑定的视频
|
||||
@@ -192,6 +193,10 @@ class FeedPlayerPool {
|
||||
/// 只有 stop 能可靠断开下载;位置存到 _resumePosition,恢复时 rebind
|
||||
/// 重新 open + seek 续播(分片走本地代理磁盘缓存,零流量)
|
||||
void suspend() {
|
||||
ActionLogger.I.log('player_suspend', page: 'feed_pool', detail: {
|
||||
'generation': _generation,
|
||||
'currentIndex': _currentIndex,
|
||||
});
|
||||
_suspended = true;
|
||||
// 使在途 bindWindow 过期:其 open 完成后不得再 play
|
||||
_generation++;
|
||||
@@ -213,6 +218,11 @@ class FeedPlayerPool {
|
||||
/// 挂起并 play。_suspended 必须在 await 之后才解除——否则等待期间 completed
|
||||
/// listener 的 auto-loop 会因为看到 _suspended=false 而提前 play
|
||||
Future<void> resume() async {
|
||||
ActionLogger.I.log('player_resume', page: 'feed_pool', detail: {
|
||||
'generation': _generation,
|
||||
'currentIndex': _currentIndex,
|
||||
'suspended': _suspended,
|
||||
});
|
||||
final pending = _pendingBind;
|
||||
if (pending != null) {
|
||||
try {
|
||||
@@ -274,6 +284,11 @@ class FeedPlayerPool {
|
||||
/// 与 pause 不同,stop 后缓存下载断开,且槽内无媒体不会幽灵出声。
|
||||
/// 返回 Feed 后需重新 bindWindow 恢复当前页。
|
||||
void stopAll() {
|
||||
ActionLogger.I.log('player_stopall', page: 'feed_pool', detail: {
|
||||
'generation': _generation,
|
||||
'currentIndex': _currentIndex,
|
||||
'slots': [for (final s in _slots) s.videoId],
|
||||
});
|
||||
// 使所有进行中的 bindWindow 过期(其 await 恢复后不会再 play)
|
||||
_generation++;
|
||||
// stopAll 后通常跟着 rebind 重新播放(如从登录页返回),解除挂起态
|
||||
|
||||
Reference in New Issue
Block a user