渐进式生成播放:fMP4 前 4 个分片就绪即返回播放列表开始起播,后台边转边补 ENDLIST,消除整集封装等待的黑屏缓冲

This commit is contained in:
yvan
2026-09-18 16:06:31 +08:00
parent 3f8c29b7e2
commit f3546ab2db
7 changed files with 170 additions and 57 deletions
+8 -1
View File
@@ -215,7 +215,7 @@ func TestPlaybackGeneratedPreservesLongGOPAndAudioOnlyVideo(t *testing.T) {
}
ctx, stop := context.WithTimeout(parent, 30*time.Second)
defer stop()
if err := app.generatePlayback(ctx, media, processing, "/media/", ""); err != nil {
if err := app.generatePlayback(ctx, media, processing, "/media/", "", 0); err != nil {
media.Close()
t.Fatal(err)
}
@@ -224,6 +224,13 @@ func TestPlaybackGeneratedPreservesLongGOPAndAudioOnlyVideo(t *testing.T) {
if media.generated.ctx.Err() != nil {
t.Fatal("completed media inherited its preparation timeout")
}
completeDeadline := time.Now().Add(20 * time.Second)
for !media.generated.complete.Load() {
if time.Now().After(completeDeadline) {
t.Fatal("background remux did not complete")
}
time.Sleep(20 * time.Millisecond)
}
parts := media.generated.segments
if len(parts) != 4 || parts[0].Duration < 2.99 || parts[0].Duration > 3.01 || parts[1].Start != parts[0].Duration || !strings.Contains(media.generated.playlist, "#EXT-X-TARGETDURATION:3") {
t.Fatalf("invented fixed two-second timeline: %+v", parts)