Commit Graph

12 Commits

Author SHA1 Message Date
db841b286d Reuse shared PlayerState enum 2026-01-10 15:50:34 -05:00
5139ae8f4e Add GStreamer player state machine 2026-01-10 15:46:32 -05:00
2403e4fe46 Add GStreamer bus loop and events 2026-01-10 04:56:13 -05:00
237c496678 Pull preroll frames when paused 2026-01-10 03:22:34 -05:00
b6790600c9 Improve GStreamer frame stepping reliability 2026-01-10 03:08:18 -05:00
d1dfde120e Prime GStreamer frames after seeks 2026-01-10 03:05:07 -05:00
1c23009a6c Fix GStreamer appsink timeout type 2026-01-10 02:54:32 -05:00
8b6d7f02a3 Fix GStreamer message type check 2026-01-10 02:53:06 -05:00
17a9a7eec8 Harden GStreamer playback pacing and errors 2026-01-10 02:50:38 -05:00
6a604dbb35 fix(player): ensure GStreamer produces and displays frames properly
Critical fixes for GStreamer playback:

1. Add preroll waiting in GStreamer.Load():
   - Wait for ASYNC_DONE message after setting to PAUSED
   - Ensures first frame is ready before playback
   - Prevents black screen on load

2. Fix frameDisplayLoop to always pull frames:
   - Remove paused check that blocked frame extraction
   - Frames now pulled even when paused (enables scrubbing)
   - Only update progress bar when playing

3. Add comprehensive logging:
   - Log each frame update with size and timestamp
   - Debug frame pull errors
   - Track paused state during updates

4. Fix initial paused state:
   - Explicitly set paused=true after load
   - Matches GStreamer's PAUSED state

These changes fix:
- Black screen issue (no frames displaying)
- Scrubbing not working (frames not available when paused)
- Fast duration counting (progress only updates when playing)
2026-01-09 19:22:08 -05:00
57eecf96df feat(player): integrate GStreamer for stable video playback
- Add GStreamer as mandatory core dependency in install.sh
- Create controller_gstreamer.go wrapping GStreamerPlayer
- Add missing methods to GStreamerPlayer (SetWindow, Stop, SetFullScreen)
- Fix GstSeekFlags type casting issue
- Update build scripts to always use -tags gstreamer
- Update controller_linux.go build tag to exclude when gstreamer enabled
- Add comprehensive migration documentation

GStreamer replaces the broken FFmpeg pipe-based UnifiedPlayer.
GStreamer 1.26+ provides frame-accurate seeking and reliable A/V sync.
2026-01-09 03:43:34 -05:00
88bc5ad4d4 Add GStreamer preview backend 2026-01-07 02:50:27 -05:00