107 lines
3.0 KiB
Markdown
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)
|