feat: add automatic media normalization, R2 retention cleanup, and seamless playout loops
This commit is contained in:
1 parent
e15d89edfe
commit
06ab5b4655
16 files changed
+1103
-408
No files matched your search
@@ -1,7 +1,10 @@
|
||||
package media
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -201,4 +204,43 @@ func TestUniqueTargetPath(t *testing.T) {
|
||||
if path != expected {
|
||||
t.Errorf("UniqueTargetPath() = %q, want %q", path, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizationArgs(t *testing.T) {
|
||||
args := normalizationArgs("/in/movie.mov", "/out/movie.normalized.mp4")
|
||||
joined := strings.Join(args, " ")
|
||||
for _, want := range []string{
|
||||
"-map 0:v:0",
|
||||
"-map 0:a:0?",
|
||||
"-c:v libx264",
|
||||
"-r 30",
|
||||
"-g 60",
|
||||
"-keyint_min 60",
|
||||
"-pix_fmt yuv420p",
|
||||
"-c:a aac",
|
||||
"-ar 48000",
|
||||
"-ac 2",
|
||||
"-avoid_negative_ts make_zero",
|
||||
"/out/movie.normalized.mp4",
|
||||
} {
|
||||
if !strings.Contains(joined, want) {
|
||||
t.Errorf("normalization args missing %q: %v", want, args)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeVideo_FFmpegError(t *testing.T) {
|
||||
origRun := runCommand
|
||||
t.Cleanup(func() { runCommand = origRun })
|
||||
|
||||
runCommand = func(ctx context.Context, name string, args ...string) error {
|
||||
if name != "ffmpeg" {
|
||||
t.Errorf("runCommand name = %q, want ffmpeg", name)
|
||||
}
|
||||
return fmt.Errorf("simulated ffmpeg failure")
|
||||
}
|
||||
|
||||
if _, _, err := normalizeVideo("/in/a.mov", "/out/a.normalized.mp4"); err == nil {
|
||||
t.Fatal("expected error when ffmpeg fails")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user