Commit Graph

10 Commits

Author SHA1 Message Date
be76b0eaa1 Add GStreamer bus loop and events 2026-01-10 04:56:13 -05:00
5b936f4cab Pull preroll frames when paused 2026-01-10 03:22:34 -05:00
407269b6c7 Improve GStreamer frame stepping reliability 2026-01-10 03:08:18 -05:00
48fc94acb8 Prime GStreamer frames after seeks 2026-01-10 03:05:07 -05:00
15b09ee9df Fix GStreamer appsink timeout type 2026-01-10 02:54:32 -05:00
9ff49460e2 Fix GStreamer message type check 2026-01-10 02:53:06 -05:00
3f1fe74a9a Harden GStreamer playback pacing and errors 2026-01-10 02:50:38 -05:00
9c801e4910 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)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 19:22:08 -05:00
501e2622dc 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.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 03:43:34 -05:00
bc0b4f7ad3 Add GStreamer preview backend 2026-01-07 02:50:27 -05:00