AWS IVS Player - Flutter Package

pub package style: very good analysis

A Flutter package for AWS Interactive Video Service (IVS) integration. This package provides a complete solution for streaming live and on-demand video content in Flutter applications using Amazon's IVS platform.

📱 Flutter Package - Designed specifically for Flutter applications on iOS and Android

What is this?

This is a Flutter package that wraps the AWS Interactive Video Service (IVS) SDK, allowing you to easily integrate live video streaming into your Flutter apps. Simply add it to your pubspec.yaml and start streaming!

Package Features

  • ✅ Flutter Package - Easy integration via pub.dev
  • ✅ Modern AWS IVS SDK - Updated to latest SDK versions (1.29.0)
  • ✅ Cross-platform Flutter support - iOS and Android
  • ✅ Flutter-native widgets - IvsVideoPlayer widget ready to use
  • ✅ State management - Built-in player state tracking with Flutter ChangeNotifier
  • ✅ Error handling - Comprehensive error handling and retry mechanisms
  • ✅ Customizable Flutter UI - Configurable controls and loading states
  • ✅ Responsive Flutter design - Adaptive to different screen sizes
  • ✅ Modern Flutter patterns - Uses latest Flutter best practices

Installation

Add to your Flutter project's pubspec.yaml:

``yaml dependencies: aws_ivs_player: ^0.1.1


**Then run in your Flutter project:**

```bash
flutter pub get

Platform Requirements

iOS

  • Minimum iOS Version: 13.0
  • Xcode: 14.0 or later
  • Amazon IVS Player: 1.29.0

Android

  • Minimum SDK: 21 (Android 5.0)
  • Target SDK: 34 (Android 14)
  • Compile SDK: 34
  • Amazon IVS Player: 1.29.0

Setup

iOS Setup

cd ios && pod install

Android Setup

The Android setup is handled automatically via Gradle.

Usage in Flutter

Basic Flutter Widget Usage

import 'package:flutter/material.dart';
import 'package:aws_ivs_player/aws_ivs_player.dart';

class MyVideoPlayer extends StatelessWidget {
  const MyVideoPlayer({super.key});

  @override
  Widget build(BuildContext context) {
    return IvsVideoPlayer(
      url: 'https://your-ivs-stream-url.m3u8',
      width: 400,
      height: 225,
      autoPlay: true,
    );
  }
}

Advanced Flutter Usage with Controller

class MyVideoPage extends StatefulWidget {
  const MyVideoPage({super.key});

  @override
  State<MyVideoPage> createState() => _MyVideoPageState();
}

class _MyVideoPageState extends State<MyVideoPage> {
  final IvsPlayerController _controller = IvsPlayerController();

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        IvsVideoPlayer(
          url: 'https://your-ivs-stream-url.m3u8',
          controller: _controller,
          autoPlay: true,
          showOverlayControls: true,
          onError: (error) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Error: $error')),
            );
          },
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => _controller.play('https://new-stream-url.m3u8'),
              child: const Text('Play'),
            ),
            ElevatedButton(
              onPressed: () => _controller.pause(),
              child: const Text('Pause'),
            ),
            ElevatedButton(
              onPressed: () => _controller.stop(),
              child: const Text('Stop'),
            ),
          ],
        ),
      ],
    );
  }
}

Configuration

iOS (Info.plist)

Add the following to your Info.plist for network permissions:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
  <key>NSAllowsArbitraryLoadsInWebContent</key>
  <true/>
</dict>

Android (AndroidManifest.xml)

Add internet permission:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Flutter Package API Reference

IvsVideoPlayer Flutter Widget

Property Type Description
url String The AWS IVS stream URL
controller IvsPlayerController? Optional controller for programmatic control
autoPlay bool Whether to start playing automatically
showOverlayControls bool Whether to show interactive overlay controls
loadingWidget Widget? Custom loading widget
errorWidget Widget? Custom error widget
onError Function(String)? Error callback

IvsPlayerController

Method Description
play(String url) Start playing the specified URL
pause() Pause the current playback
resume() Resume paused playback
stop() Stop playback and dispose native resources
dispose() Clean up all resources
Property Type Description
state PlayerState Current player state
currentUrl String? Currently loaded URL
errorMessage String? Last error message
hasError bool Whether there's an active error

PlayerState Enum

  • idle - Player is idle
  • loading - Player is loading content
  • ready - Player is ready to play
  • playing - Player is actively playing
  • paused - Player is paused
  • error - Player encountered an error
  • disposed - Player has been disposed

Testing

Test Stream URLs

You can use these test URLs for development:

// AWS IVS Test Stream
const testStream = 'https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8';

// Your own IVS streams from AWS Console
const yourStream = 'https://your-unique-stream-url.m3u8';

Flutter Development & Troubleshooting

Common Flutter Package Issues

  1. "Flutter package not found"

    • Run flutter pub get to install the package
    • Check that ivs_player is correctly added to pubspec.yaml
    • Restart your IDE/editor
  2. "Video not playing in Flutter app"

    • Ensure the stream URL is valid and accessible
    • Check network permissions in your Flutter app
    • Verify AWS IVS permissions and policies
  3. "Flutter build errors"

    • Run flutter clean and flutter pub get
    • For iOS: cd ios && pod install --repo-update
    • For Android: Ensure you have the latest Android SDK
  4. "Flutter app crashes on startup"

    • Check minimum iOS/Android versions
    • Verify all permissions are granted
    • Check AWS IVS SDK compatibility
    • Ensure you're using a compatible Flutter version

Debug Mode

Enable debug logging by setting:

import 'dart:developer' as developer;

developer.log('IVS Player Debug: $message', name: 'IVSPlayer');

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For AWS IVS-specific issues:

For Flutter-specific issues: