Flutter Native Player for Flutter

A Flutter plugin for Android, iOS for playing back video on a Widget surface.

20220406_163756

Installation

Copy and paste to dependencies:

flutter_native_player: ^1.0.6

Note: iOS requires 9.0 or higher and Android requires SDK 16 or higher

Example:

import 'package:flutter/material.dart';
import 'package:flutter_native_player/flutter_native_player.dart';
import 'package:flutter_native_player/model/player_resource.dart';
import 'package:flutter_native_player/model/player_subtitle_resource.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  String videoUrl = "https://p-events-delivery.akamaized.net/2109isftrwvmiekgrjkbbhxhfbkxjkoj/m3u8/vod_index.m3u8";
 final playerSubtitleResource = [
    PlayerSubtitleResource(
      language: "English",
      subtitleUrl: "https://raw.githubusercontent.com/Pisey-Nguon/Player-Resource/master/%5BEnglish%5D%20Apple%20Event%20%E2%80%94%20October%2013%20%5BDownSub.com%5D.srt",
      ),
  PlayerSubtitleResource(
      language: "Japanese",
      subtitleUrl: "https://raw.githubusercontent.com/Pisey-Nguon/Player-Resource/master/%5BJapanese%5D%20Apple%20Event%20%E2%80%94%20October%2013%20%5BDownSub.com%5D.srt",
      )
  ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Native Player'),
      ),
      body: Center(
          child: FlutterNativePlayer(
                  playerResource: PlayerResource(videoUrl: videoUrl, playerSubtitleResource: playerSubtitleResource),
			      playWhenReady: true,
			      width: double.infinity,
			      height: 250
			      ),
		      ),
	      ),
      );
  }
}

Configuration:

  1. playWhenReady if it's true it's going to play immediately after fetching data success but if it's false that after fetching data success it's not played.
  2. playerSubtitleResource if null or empty list it's going to hide subtitle button.

Supported Formats

  • For Android, the backing player is ExoPlayer, please refer here for list of supported formats.
  • For iOS, the backing player is AVPlayer. The supported formats vary depending on the version of iOS, AVURLAsset class has audiovisualTypes that you can query for supported av formats.

Libraries

audio_video_progress_bar
constant
download_state
drm_init_data
duration_state
exception
fetch_hls_master_playlist
flutter_native_getx_controller
flutter_native_player
format
hls_master_playlist
hls_media_playlist
hls_playlist_parser
hls_track_metadata_entry
metadata
mime_types
playback_speed
playback_state
player_clickable_widget
player_controller
player_kid_data_holder
player_kid_hls_utils
player_kid_subtitle
player_kid_subtitle_segment
player_kid_subtitles_configuration
player_kid_subtitles_drawer
player_kid_subtitles_factory
player_kid_subtitles_source
player_kid_subtitles_source_type
player_kid_track
player_kid_utils
player_loading
player_material_bottom_sheet
player_method_manager
player_overlay_controller
player_pin_header_widget
player_progress_colors
player_resource
player_subtitle_resource
player_widget
playlist
quality_model
rendition
scheme_data
segment
time_utils
util
variant
variant_info