VT_Player/docs/VIDEO_PLAYER_FORK.md
2025-12-04 05:03:02 -05:00

107 lines
3.0 KiB
Markdown

# Video Player Fork Plan
## Overview
The video player component will be extracted into a separate project to allow independent development and improvement of video playback controls while keeping VideoTools focused on video processing.
## Current Player Integration
The player is currently embedded in VideoTools at:
- `internal/player/` - Player implementation
- `main.go` - Player state and controls in Convert module
- Preview frame display
- Playback controls (play/pause, seek, volume)
## Fork Goals
### 1. Independent Development
- Develop player features without affecting VideoTools
- Faster iteration on playback controls
- Better testing of player-specific features
- Can be used by other projects
### 2. Improved Controls
Current limitations to address:
- Tighten up video controls
- Better seek bar with thumbnails on hover
- Improved timeline scrubbing
- Keyboard shortcuts for playback
- Frame-accurate stepping
- Playback speed controls
- Better volume control UI
### 3. Clean API
The forked player should expose a clean API:
```go
type Player interface {
Load(path string) error
Play()
Pause()
Seek(position time.Duration)
GetFrame(position time.Duration) (image.Image, error)
SetVolume(level float64)
Close()
}
```
## Migration Strategy
### Phase 1: Extract to Separate Module
1. Create new repository: `github.com/yourusername/fyne-videoplayer`
2. Copy `internal/player/` to new repo
3. Extract player dependencies
4. Create clean API surface
5. Add comprehensive tests
### Phase 2: Update VideoTools
1. Import fyne-videoplayer as dependency
2. Replace internal/player with external package
3. Update player instantiation
4. Verify all playback features work
5. Remove old internal/player code
### Phase 3: Enhance Player (Post-Fork)
Features to add after fork:
- [ ] Thumbnail preview on seek bar hover
- [ ] Frame-accurate stepping (←/→ keys)
- [ ] Playback speed controls (0.25x to 2x)
- [ ] Improved volume slider
- [ ] Keyboard shortcuts (Space, K, J, L, etc.)
- [ ] Timeline markers
- [ ] Subtitle support
- [ ] Multi-audio track switching
## Technical Considerations
### Dependencies
Current dependencies to maintain:
- Fyne for UI rendering
- FFmpeg for video decoding
- CGO for FFmpeg bindings
### Cross-Platform Support
Player must work on:
- Linux (GNOME, KDE, etc.)
- macOS
- Windows
### Performance
- Hardware acceleration where available
- Efficient frame buffering
- Low CPU usage during playback
- Fast seeking
## Timeline
1. **Week 1-2**: Extract player code, create repo, clean API
2. **Week 3**: Integration testing, update VideoTools
3. **Week 4+**: Enhanced controls and features
## Benefits
- **VideoTools**: Leaner codebase, focus on processing
- **Player**: Independent evolution, reusable component
- **Users**: Better video controls, more reliable playback
- **Developers**: Easier to contribute to either project
## Notes
- Keep player dependency minimal in VideoTools
- Player should be optional - frame display can work without playback
- Consider using player in Compare module for side-by-side playback (future)