package main import ( "fmt" "log" "time" "git.leaktechnologies.dev/stu/VideoTools/internal/player" ) func main() { fmt.Println("VideoTools VT_Player Demo") fmt.Println("=========================") // Create player configuration config := &player.Config{ Backend: player.BackendAuto, Volume: 50.0, AutoPlay: false, HardwareAccel: true, } // Create factory factory := player.NewFactory(config) // Show available backends backends := factory.GetAvailableBackends() fmt.Printf("Available backends: %v\n", backends) // Create player vtPlayer, err := factory.CreatePlayer() if err != nil { log.Fatalf("Failed to create player: %v", err) } fmt.Printf("Created player with backend: %T\n", vtPlayer) // Set up callbacks vtPlayer.SetTimeCallback(func(t time.Duration) { fmt.Printf("Time: %v\n", t) }) vtPlayer.SetFrameCallback(func(frame int64) { fmt.Printf("Frame: %d\n", frame) }) vtPlayer.SetStateCallback(func(state player.PlayerState) { fmt.Printf("State: %v\n", state) }) // Demo usage fmt.Println("\nPlayer created successfully!") fmt.Println("Player features:") fmt.Println("- Frame-accurate seeking") fmt.Println("- Multiple backend support (MPV, VLC, FFplay)") fmt.Println("- Fyne UI integration") fmt.Println("- Preview mode for trim/upscale modules") fmt.Println("- Microsecond precision timing") // Test player methods fmt.Printf("Current volume: %.1f\n", vtPlayer.GetVolume()) fmt.Printf("Current speed: %.1f\n", vtPlayer.GetSpeed()) fmt.Printf("Preview mode: %v\n", vtPlayer.IsPreviewMode()) // Test video info (empty until file loaded) info := vtPlayer.GetVideoInfo() fmt.Printf("Video info: %+v\n", info) fmt.Println("\nTo use with actual video files:") fmt.Println("1. Load a video: vtPlayer.Load(\"path/to/video.mp4\", 0)") fmt.Println("2. Play: vtPlayer.Play()") fmt.Println("3. Seek to time: vtPlayer.SeekToTime(10 * time.Second)") fmt.Println("4. Seek to frame: vtPlayer.SeekToFrame(300)") fmt.Println("5. Extract frame: vtPlayer.ExtractFrame(5 * time.Second)") // Clean up vtPlayer.Close() fmt.Println("\nPlayer closed successfully!") }