Skip to content

Add loopRange option for seamless region looping#910

Open
iossocket wants to merge 1 commit into
kingslay:mainfrom
iossocket:feature/sentence-loop-range
Open

Add loopRange option for seamless region looping#910
iossocket wants to merge 1 commit into
kingslay:mainfrom
iossocket:feature/sentence-loop-range

Conversation

@iossocket
Copy link
Copy Markdown

What:加 KSOptions.loopRange: ClosedRange?,复用现有 loopPacketQueue 双缓冲机制做"区间无缝循环",避开 isAccurateSeek = true 时每圈 decode-forward 的 CPU 重活

Why:句子级循环当前需要每圈 mePlayer.seek 回起点,accurate seek 在 mkv H.264/HEVC(GOP 5-10s)上每圈静默解码 + 丢帧 ~150ms,肉眼可见卡顿;并且越界检测不固定 50-300ms

Mechanism:MEPlayerItem.reading() 在 packet PTS > upperBound 时设 isLoopModel=true + av_seek_frame 回 lowerBound;codecDidFinished() 在 swap 时不调 delegate?.sourceDidFinished()、设 track.seekTime 让 decoder 丢掉关键帧到 lowerBound 的预滚帧

Backward compat:默认 loopRange = nil,旧行为完全不变;与 isLoopPlay 互斥(同时设置以 isLoopPlay 为准)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant