=======================
Troubleshooting Guide
=======================

Black Screen Issues
===================

If you're seeing a black screen with no errors:

1. Run the Diagnostic Tool
---------------------------

.. code-block:: bash

   cd example
   flutter run -t lib/diagnostic_main.dart

This will test MediaKit installation and show detailed logging in the console.

2. Check Console Output
------------------------

Look for these messages in your console/terminal:

✅ **Good signs:**

.. code-block:: text

   ✓ SplashVideo: MediaKit initialized and first frame deferred
   SplashVideoPlayer: Starting initialization...
     ✓ Player created
     ✓ VideoController created
     ✓ Media created, opening...
     ✓ Media opened
     ✓ Video initialized with duration: 0:00:05.000000
     ▶ Starting playback

❌ **Problem signs:**

.. code-block:: text

   ✗ MediaKit test failed: ...
   ✗ Player error: ...
   ✗ Initialization failed: ...

3. Verify Dependencies
-----------------------

Make sure your ``pubspec.yaml`` includes the platform-specific libraries:

.. code-block:: yaml

   dependencies:
     media_kit: ^1.2.6
     media_kit_video: ^2.0.1
     
     # Platform-specific video libraries (add all platforms you support)
     media_kit_libs_android_video: any      # Android
     media_kit_libs_ios_video: any          # iOS  
     media_kit_libs_macos_video: any        # macOS
     media_kit_libs_windows_video: any      # Windows
     media_kit_libs_linux: any              # Linux

4. Verify Asset Configuration
------------------------------

In ``pubspec.yaml``:

.. code-block:: yaml

   flutter:
     assets:
       - assets/videos/     # or your video folder

Verify the video file exists at the path you're using:

.. code-block:: dart

   AssetSource('assets/videos/splash.mp4')  // Must match actual file path

5. Check MediaKit Initialization
---------------------------------

In your ``main.dart``:

.. code-block:: dart

   void main() {
     WidgetsFlutterBinding.ensureInitialized();
     SplashVideoPage.initialize();  // This handles MediaKit initialization
     runApp(const MyApp());
   }

6. Test MediaKit Programmatically
----------------------------------

.. code-block:: dart

   void main() async {
     WidgetsFlutterBinding.ensureInitialized();
     
     // Test MediaKit before running app
     final isWorking = await SplashVideoPage.testMediaKit();
     if (!isWorking) {
       debugPrint('MediaKit is not working!');
       // Handle error...
     }
     
     SplashVideoPage.initialize();
     runApp(const MyApp());
   }

7. Clean and Rebuild
---------------------

.. code-block:: bash

   flutter clean
   flutter pub get
   flutter run

8. Platform-Specific Issues
----------------------------

Android
^^^^^^^

- Minimum SDK version must be 21+
- Check ``android/app/build.gradle``:

.. code-block:: gradle

   minSdkVersion 21

iOS
^^^

- Minimum iOS version must be 13.0+
- Check ``ios/Podfile``:

.. code-block:: ruby

   platform :ios, '13.0'

macOS
^^^^^

- Minimum macOS version must be 10.15+
- Check ``macos/Podfile``:

.. code-block:: ruby

   platform :osx, '10.15'

Windows
^^^^^^^

- Visual Studio 2022 or later required
- Windows 10 1809+ required

Linux
^^^^^

- GStreamer and related libraries required
- Install:

.. code-block:: bash

   sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

9. Video Format Issues
----------------------

MediaKit supports most video formats, but for best compatibility use:

- **Container:** MP4
- **Video codec:** H.264
- **Audio codec:** AAC

Test with a known working video:

.. code-block:: bash

   # Download a test video
   curl -o assets/test.mp4 https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4

10. Enable Error Callbacks
---------------------------

Always implement error handling during development:

.. code-block:: dart

   SplashVideoPage(
     source: AssetSource('assets/videos/splash.mp4'),
     onVideoError: (error) {
       debugPrint('Video Error: $error');
       // Show error to user or navigate away
     },
     nextScreen: const HomeScreen(),
   )

11. Check Player State
----------------------

Add a callback to monitor player initialization:

.. code-block:: dart

   SplashVideoPage(
     source: AssetSource('assets/videos/splash.mp4'),
     videoConfig: VideoConfig(
       onPlayerInitialized: (player) {
         debugPrint('Player initialized!');
         debugPrint('Can play: ${player.state.playing}');
         debugPrint('Duration: ${player.state.duration}');
       },
     ),
     nextScreen: const HomeScreen(),
   )

Getting Help
============

If you're still experiencing issues:

1. **Run the diagnostic tool** and share the console output
2. **Check the example app** - does it work?
3. **Share your setup:**

   - Flutter version (``flutter --version``)
   - Platform (Android/iOS/macOS/Windows/Linux)
   - Video file details (format, size, location)
   - Your ``pubspec.yaml`` dependencies
   - Console error messages

4. **Open an issue** with all the above information

Common Error Messages
=====================

"Failed to initialize video"
-----------------------------

- MediaKit not initialized - make sure you call ``SplashVideoPage.initialize()``
- Missing platform libraries - check dependencies

"URL can't be null when playing a remote video"
------------------------------------------------

- Invalid NetworkFileSource URL
- Check URL format and network connectivity

"Unable to parse URI"
---------------------

- Malformed URL in NetworkFileSource
- Verify URL is valid

Player stays black but no errors
---------------------------------

- Video codec not supported - try H.264/MP4
- Asset path incorrect - verify in pubspec.yaml and file system
- Platform library missing - check all media_kit_libs_* dependencies
- Run diagnostic tool for detailed information
