orax_video_player 1.1.0 copy "orax_video_player: ^1.1.0" to clipboard
orax_video_player: ^1.1.0 copied to clipboard

A complete, feature-rich custom video player for Flutter with YouTube support, quality selection, playback speed control, zoom, fit modes, and subtitle support.

Orax Video Player #

A complete, feature-rich custom video player for Flutter with support for YouTube videos and direct video URLs.

Features #

✅ YouTube Video Support - Play YouTube videos directly in your app
✅ Quality Selection - Choose from available video qualities
✅ Playback Speed Control - Adjust speed from 0.25x to 4x
✅ Video Zoom - Zoom in/out on videos (1x to 3x)
✅ Fit Modes - Multiple video fit modes (Contain, Fill, Cover, FitWidth, FitHeight)
✅ Subtitle Support - Load and display subtitles (WebVTT and SRT formats)
✅ Clean UI - Modern, intuitive user interface
✅ Error Handling - User-friendly error messages
✅ Beginner-Friendly - Well-documented, easy to understand code

Installation #

If you want to use this package in other projects, add it as a path dependency in your project's pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  
  # Add Orax Video Player as a local path dependency
  orax_video_player:
    path: ../orax_video_player  # Adjust path to your package location
    # Or use absolute path:
    # path: C:\MYData\flutter projects\video_player\orax_video_player

Then run:

flutter pub get

Note: Adjust the path relative to your project's location. If your project is in a sibling directory, use ../orax_video_player. If in a different location, use an absolute path.

Option 2: Use from Git Repository #

If you have this package in a Git repository:

dependencies:
  orax_video_player:
    git:
      url: https://github.com/yourusername/orax_video_player.git
      ref: main  # or 'master', or a specific tag

Option 3: Install Dependencies Directly (If Not Using as Package) #

If you're using the code directly (not as a package), add these dependencies:

dependencies:
  flutter:
    sdk: flutter
  video_player: ^2.10.1
  youtube_explode_dart: ^3.0.5
  http: ^1.2.0
  xml: ^6.4.2

Then run:

flutter pub get

📖 For detailed instructions on using this package in other projects, see USAGE_GUIDE.md

Quick Start #

Basic Usage #

import 'package:orax_video_player/orax_video_player.dart';

// Create a controller
final controller = OraxVideoPlayerController();

// Initialize with a video URL (YouTube or direct URL)
await controller.initialize('https://www.youtube.com/watch?v=VIDEO_ID');

// Use the player widget
OraxVideoPlayer(
  controller: controller,
  autoPlay: false,
)

Complete Example #

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

class VideoPlayerPage extends StatefulWidget {
  @override
  _VideoPlayerPageState createState() => _VideoPlayerPageState();
}

class _VideoPlayerPageState extends State<VideoPlayerPage> {
  late OraxVideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = OraxVideoPlayerController();
    _loadVideo();
  }

  Future<void> _loadVideo() async {
    try {
      await _controller.initialize(
        'https://www.youtube.com/watch?v=VIDEO_ID',
        title: 'My Video Title',
      );
    } catch (e) {
      print('Error loading video: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Video Player')),
      body: _controller.isInitialized
          ? OraxVideoPlayer(
              controller: _controller,
              autoPlay: false,
            )
          : Center(child: CircularProgressIndicator()),
    );
  }

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

Features Guide #

Quality Selection #

// Get available qualities
List<VideoQuality> qualities = controller.availableQualities;

// Change quality
await controller.setQuality(qualities[0]); // Select first quality

Playback Speed #

// Available speeds: 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0
await controller.setPlaybackSpeed(2.0); // 2x speed

Video Zoom #

// Set zoom level (1.0 to 3.0)
controller.setZoomLevel(2.0); // 2x zoom

// Reset zoom
controller.resetZoom();

Fit Modes #

// Available modes: contain, fill, cover, fitWidth, fitHeight
controller.setFitMode(VideoFitMode.cover);

Subtitles #

// Get available subtitle tracks
List<SubtitleTrack> tracks = controller.availableSubtitles;

// Load a subtitle track
if (tracks.isNotEmpty) {
  await controller.loadSubtitle(tracks[0]);
}

// Disable subtitles
controller.disableSubtitles();

Playback Control #

// Play
await controller.play();

// Pause
await controller.pause();

// Toggle play/pause
await controller.togglePlayPause();

// Seek to position
await controller.seekTo(Duration(minutes: 5));

Supported Video Sources #

YouTube Videos #

  • Full YouTube URL support
  • Automatic quality detection
  • Subtitle extraction (when available)
  • Example: https://www.youtube.com/watch?v=VIDEO_ID

Direct Video URLs #

  • Any direct video URL (MP4, etc.)
  • Example: https://example.com/video.mp4

Project Structure #

lib/
├── controllers/
│   └── orax_video_player_controller.dart  # Main controller
├── models/
│   ├── playback_state.dart                # Playback state enum
│   ├── subtitle_track.dart               # Subtitle models
│   ├── video_fit_mode.dart                # Fit mode enum
│   └── video_quality.dart                 # Quality model
├── services/
│   ├── subtitle_service.dart              # Subtitle parsing
│   └── youtube_service.dart                # YouTube integration
├── widgets/
│   └── orax_video_player.dart             # Main player widget
├── main.dart                               # Example app
└── orax_video_player.dart                 # Library exports

Error Handling #

The player includes comprehensive error handling:

// Check for errors
if (controller.state == PlaybackState.error) {
  String? errorMessage = controller.errorMessage;
  // Display error to user
}

Customization #

Custom Loading Widget #

OraxVideoPlayer(
  controller: controller,
  loadingWidget: Center(
    child: CircularProgressIndicator(),
  ),
)

Custom Error Widget #

OraxVideoPlayer(
  controller: controller,
  errorWidget: Center(
    child: Text('Custom Error Message'),
  ),
)

Custom Colors #

OraxVideoPlayer(
  controller: controller,
  controlsColor: Colors.blue,
  backgroundColor: Colors.black,
)

Notes #

  • YouTube Videos: Requires internet connection and may be subject to YouTube's terms of service
  • Subtitles: Subtitle support depends on video source. YouTube videos may have auto-generated or manual subtitles
  • Quality: Available qualities depend on the video source. YouTube videos typically have multiple quality options
  • Performance: For best performance, dispose the controller when not in use

Troubleshooting #

Video Not Loading #

  • Check internet connection
  • Verify video URL is correct
  • Check if video is accessible (not private/restricted)

YouTube Videos Not Working #

  • Ensure youtube_explode_dart package is properly installed
  • Some videos may be region-restricted or age-restricted
  • YouTube's API may change, requiring package updates

Subtitles Not Showing #

  • Verify subtitles are available for the video
  • Check subtitle URL is accessible
  • Ensure subtitle format is supported (WebVTT or SRT)

License #

This project is open source and available for use in your projects.

Contributing #

Contributions are welcome! Feel free to submit issues or pull requests.

Support #

For issues or questions, please open an issue on the project repository.

1
likes
130
points
7
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A complete, feature-rich custom video player for Flutter with YouTube support, quality selection, playback speed control, zoom, fit modes, and subtitle support.

Repository (GitHub)

License

MIT (license)

Dependencies

flutter, http, screen_brightness, video_player, volume_controller, xml, youtube_explode_dart

More

Packages that depend on orax_video_player