Skip to content

Commit ecbdea7

Browse files
committed
fix(player): restore muted state when re-entering player page
修复了一个问题:点击静音按钮后退出播放页面,再次进入时虽然显示静音图标,但实际播放有声音。 根本原因: - PlayerOrchestrator 在连接 video 控制器时,只同步了 currentTime、playbackRate 和 volume - 缺少对 muted 状态的同步,导致 video 元素的 muted 属性未从 store 恢复 修复内容: - 在 PlaybackContext 接口中添加 muted 字段 - 在 PlayerOrchestrator 初始化和连接时同步 muted 状态 - 在 usePlayerEngine 中从 store 读取 muted 并传递给 orchestrator - 更新所有测试文件中的 createMockContext 函数以包含 muted 字段 影响范围: - src/renderer/src/pages/player/engine/intent/types.ts - src/renderer/src/pages/player/engine/PlayerOrchestrator.ts - src/renderer/src/pages/player/hooks/usePlayerEngine.ts - src/renderer/src/pages/player/engine/intent/__tests__/*.test.ts
1 parent 4c63ac4 commit ecbdea7

7 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/renderer/src/pages/player/engine/PlayerOrchestrator.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export class PlayerOrchestrator {
117117
paused: true,
118118
playbackRate: 1,
119119
volume: 1,
120+
muted: false,
120121
activeCueIndex: -1,
121122
subtitles: [],
122123
loopEnabled: false,
@@ -197,7 +198,14 @@ export class PlayerOrchestrator {
197198
controller.seek(this.context.currentTime)
198199
controller.setPlaybackRate(this.context.playbackRate)
199200
controller.setVolume(this.context.volume)
200-
logger.debug('ClockScheduler started')
201+
controller.setMuted(this.context.muted)
202+
203+
logger.debug('ClockScheduler started and player state initialized', {
204+
currentTime: this.context.currentTime,
205+
playbackRate: this.context.playbackRate,
206+
volume: this.context.volume,
207+
muted: this.context.muted
208+
})
201209
}
202210

203211
/**

src/renderer/src/pages/player/engine/intent/__tests__/AutoPauseStrategy.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function createMockContext(overrides: Partial<PlaybackContext> = {}): PlaybackCo
1111
paused: false,
1212
playbackRate: 1,
1313
volume: 1,
14+
muted: false,
1415
activeCueIndex: -1,
1516
subtitles: [
1617
{ id: '1', startTime: 10, endTime: 15, originalText: 'First subtitle' },

src/renderer/src/pages/player/engine/intent/__tests__/LoopStrategy.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ function createMockContext(overrides: Partial<PlaybackContext> = {}): PlaybackCo
1212
paused: false,
1313
playbackRate: 1,
1414
volume: 1,
15+
muted: false,
1516
activeCueIndex: -1,
1617
subtitles: [
1718
{ id: '1', startTime: 10, endTime: 15, originalText: 'First subtitle' },

src/renderer/src/pages/player/engine/intent/__tests__/SubtitleSyncStrategy.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function createMockContext(overrides: Partial<PlaybackContext> = {}): PlaybackCo
1111
paused: false,
1212
playbackRate: 1,
1313
volume: 1,
14+
muted: false,
1415
activeCueIndex: -1,
1516
subtitles: [
1617
{ id: '1', startTime: 10, endTime: 15, originalText: 'First subtitle' },

src/renderer/src/pages/player/engine/intent/__tests__/reducers.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function createMockContext(overrides: Partial<PlaybackContext> = {}): PlaybackCo
2727
paused: false,
2828
playbackRate: 1,
2929
volume: 1,
30+
muted: false,
3031
activeCueIndex: -1,
3132
subtitles: [],
3233
loopEnabled: true,

src/renderer/src/pages/player/engine/intent/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export interface PlaybackContext {
130130
paused: boolean
131131
playbackRate: number
132132
volume: number
133+
muted: boolean
133134

134135
// 字幕相关
135136
activeCueIndex: number

src/renderer/src/pages/player/hooks/usePlayerEngine.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export function usePlayerEngine() {
103103
const paused = usePlayerStore((s) => s.paused)
104104
const playbackRate = usePlayerStore((s) => s.playbackRate)
105105
const volume = usePlayerStore((s) => s.volume)
106+
const muted = usePlayerStore((s) => s.muted)
106107

107108
// 循环设置
108109
const loopEnabled = usePlayerStore((s) => s.loopEnabled)
@@ -125,6 +126,7 @@ export function usePlayerEngine() {
125126
duration,
126127
paused,
127128
volume,
129+
muted,
128130
playbackRate,
129131
subtitles,
130132
loopEnabled,
@@ -157,6 +159,7 @@ export function usePlayerEngine() {
157159
paused,
158160
playbackRate,
159161
volume,
162+
muted,
160163
subtitles,
161164
loopEnabled,
162165
loopMode,
@@ -174,6 +177,7 @@ export function usePlayerEngine() {
174177
paused,
175178
playbackRate,
176179
volume,
180+
muted,
177181
subtitles,
178182
loopEnabled,
179183
loopMode,

0 commit comments

Comments
 (0)