- Add VTPlayer interface with microsecond precision seeking - Implement MPV controller for frame-accurate playback - Add VLC backend support for cross-platform compatibility - Create FFplay wrapper to bridge existing controller - Add factory pattern for automatic backend selection - Implement Fyne UI wrapper with real-time controls - Add frame extraction capabilities for preview system - Support preview mode for trim/upscale/filter modules - Include working demo and implementation documentation
118 lines
2.2 KiB
Go
118 lines
2.2 KiB
Go
package player
|
|
|
|
import (
|
|
"image"
|
|
"time"
|
|
)
|
|
|
|
// VTPlayer defines the enhanced player interface with frame-accurate capabilities
|
|
type VTPlayer interface {
|
|
// Core playback control
|
|
Load(path string, offset time.Duration) error
|
|
Play() error
|
|
Pause() error
|
|
Stop() error
|
|
Close()
|
|
|
|
// Frame-accurate seeking
|
|
SeekToTime(offset time.Duration) error
|
|
SeekToFrame(frame int64) error
|
|
GetCurrentTime() time.Duration
|
|
GetCurrentFrame() int64
|
|
GetFrameRate() float64
|
|
|
|
// Video properties
|
|
GetDuration() time.Duration
|
|
GetVideoInfo() *VideoInfo
|
|
|
|
// Frame extraction for previews
|
|
ExtractFrame(offset time.Duration) (image.Image, error)
|
|
ExtractCurrentFrame() (image.Image, error)
|
|
|
|
// Window and display control
|
|
SetWindow(x, y, w, h int)
|
|
SetFullScreen(fullscreen bool)
|
|
GetWindowSize() (x, y, w, h int)
|
|
|
|
// Audio control
|
|
SetVolume(level float64) error
|
|
GetVolume() float64
|
|
SetMuted(muted bool)
|
|
IsMuted() bool
|
|
|
|
// Playback speed control
|
|
SetSpeed(speed float64) error
|
|
GetSpeed() float64
|
|
|
|
// Events and callbacks
|
|
SetTimeCallback(callback func(time.Duration))
|
|
SetFrameCallback(callback func(int64))
|
|
SetStateCallback(callback func(PlayerState))
|
|
|
|
// Preview system support
|
|
EnablePreviewMode(enabled bool)
|
|
IsPreviewMode() bool
|
|
}
|
|
|
|
// VideoInfo contains metadata about the loaded video
|
|
type VideoInfo struct {
|
|
Width int
|
|
Height int
|
|
Duration time.Duration
|
|
FrameRate float64
|
|
BitRate int64
|
|
Codec string
|
|
Format string
|
|
FrameCount int64
|
|
}
|
|
|
|
// PlayerState represents the current playback state
|
|
type PlayerState int
|
|
|
|
const (
|
|
StateStopped PlayerState = iota
|
|
StatePlaying
|
|
StatePaused
|
|
StateLoading
|
|
StateError
|
|
)
|
|
|
|
// BackendType represents the player backend being used
|
|
type BackendType int
|
|
|
|
const (
|
|
BackendMPV BackendType = iota
|
|
BackendVLC
|
|
BackendFFplay
|
|
BackendAuto
|
|
)
|
|
|
|
// Config holds player configuration
|
|
type Config struct {
|
|
Backend BackendType
|
|
WindowX int
|
|
WindowY int
|
|
WindowWidth int
|
|
WindowHeight int
|
|
Volume float64
|
|
Muted bool
|
|
AutoPlay bool
|
|
HardwareAccel bool
|
|
PreviewMode bool
|
|
AudioOutput string
|
|
VideoOutput string
|
|
CacheEnabled bool
|
|
CacheSize int64
|
|
LogLevel LogLevel
|
|
}
|
|
|
|
// LogLevel for debugging
|
|
type LogLevel int
|
|
|
|
const (
|
|
LogError LogLevel = iota
|
|
LogWarning
|
|
LogInfo
|
|
LogDebug
|
|
)
|