Files
Kiwy-Signage/working_files/INVESTIGATION_RESULTS.md
2025-11-22 09:48:48 +02:00

5.0 KiB

Investigation Results: Media File Skipping

Diagnostic Summary

All 3 media files are present and valid:

  • music.jpg (36,481 bytes) - IMAGE
  • 130414-746934884.mp4 (6,474,921 bytes) - VIDEO (H.264, 1920x1080, compatible)
  • IMG_0386.jpeg (592,162 bytes) - IMAGE

No file system issues found:

  • All files exist
  • Correct permissions
  • No case sensitivity problems
  • Supported file types

Video codec is compatible:

  • H.264 codec (fully supported by ffpyplayer)
  • 1920x1080 @ 29.97fps
  • Reasonable bitrate (2.3 Mbps)

Potential Root Causes Identified

1. Video Widget Not Properly Stopping (Most Likely)

When transitioning from video to the next media, the video widget may not be properly stopped before removal. This could cause:

  • The video to continue playing in background
  • Race conditions with scheduling
  • Next media appearing to "skip"

Location: play_current_media() line 417-420

if self.current_widget:
    self.ids.content_area.remove_widget(self.current_widget)
    self.current_widget = None

Fix: Stop video before removing widget

2. Multiple Scheduled Events

The Clock.schedule_once(self.next_media, duration) could be called multiple times if widget loading triggers multiple events.

Location: Lines 510, 548

Fix: Add Clock.unschedule() before scheduling

3. Video Loading Callback Issues

The video loaded callback might not fire or might fire multiple times, causing state confusion.

Location: _on_video_loaded() line 516

4. Pause State Not Properly Checked

If the player gets paused/unpaused during media transition, scheduling could get confused.

Location: next_media() line 551

What Enhanced Logging Will Show

With the new logging, you'll see patterns like:

If Videos Are Being Skipped:

===== Playing item 2/3 =====
File: 130414-746934884.mp4
Extension: .mp4
Media type: VIDEO
Loading video...
Creating Video widget...
[SHORT PAUSE OR ERROR]
Transitioning to next media (was index 1)
===== Playing item 3/3 =====

If Duration Is Too Short:

Creating Video widget...
Scheduled next media in 23s
[Only 1-2 seconds pass]
Transitioning to next media

I've added comprehensive logging. Here are additional fixes to try:

Fix 1: Properly Stop Video Widget Before Removal

Add this to play_current_media() before removing widget:

# Remove previous media widget
if self.current_widget:
    # Stop video if it's playing
    if isinstance(self.current_widget, Video):
        self.current_widget.state = 'stop'
        self.current_widget.unload()
    self.ids.content_area.remove_widget(self.current_widget)
    self.current_widget = None

Fix 2: Ensure Scheduled Events Don't Overlap

Modify scheduling in both play_video() and play_image():

# Unschedule any pending transitions before scheduling new one
Clock.unschedule(self.next_media)
Clock.schedule_once(self.next_media, duration)

Fix 3: Add Video State Monitoring

Track when video actually starts playing vs when widget is created.

How to Test

1. Run with Enhanced Logging

cd /home/pi/Desktop/Kiwy-Signage
source .venv/bin/activate
cd src
python3 main.py 2>&1 | tee ../playback_debug.log

Watch the console output. You should see:

  • Each media file being loaded
  • Timing information
  • Any errors or skips

2. Check Timing

If media skips, check the log for timing:

  • Does "Scheduled next media in Xs" appear?
  • How long until "Transitioning to next media" appears?
  • Is it immediate (< 1 second) = scheduling bug
  • Is it after full duration = normal operation

3. Look for Error Patterns

Search the log for:

grep "❌" playback_debug.log
grep "Error" playback_debug.log
grep "consecutive_errors" playback_debug.log

Quick Test Scenario

Create a test with just one file to isolate the issue:

{
  "playlist": [
    {
      "file_name": "music.jpg",
      "url": "media/music.jpg",
      "duration": 10
    }
  ],
  "version": 99
}

If this single image repeats correctly every 10s, the issue is with video playback or transitions.

What to Report

When you run the app, please capture:

  1. Console output - especially the pattern around skipped files
  2. Which files skip? - Is it always videos? Always after videos?
  3. Timing - Do files play for full duration before skipping?
  4. Pattern - First loop OK then skips? Always skips certain file?

Tools Created

  1. diagnose_playlist.py - Check file system issues
  2. test_playback_logging.py - Simulate playback logic
  3. check_video_codecs.py - Verify video compatibility
  4. Enhanced main.py - Detailed logging throughout

Next Actions

  1. Run diagnose_playlist.py - PASSED
  2. Run check_video_codecs.py - PASSED
  3. Run app with logging and observe pattern
  4. Apply video widget fixes if needed
  5. Report findings for further diagnosis

The enhanced logging will pinpoint exactly where and why files are being skipped!