mediax 0.0.1 copy "mediax: ^0.0.1" to clipboard
mediax: ^0.0.1 copied to clipboard

A video player project for Android and iOS.

Media Player plugin for Flutter #

A flutter plugin for Android and iOS for media playback either Audio or Video.

Internet Permission Access #

To enable network file/stream playback, you need to follow the requirements below:

Android #

Add INTERNET permission in the AndroidManifest.xml file of your application’s android directory.

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

To enable the http playback instead of https add the following attribute to the

<application
    ...
    android:usesCleartextTraffic="true">
    <Your-Activity />
</application>

Or you can refer to this documentation if you want more control for above http streams

iOS #

If you need to access videos using http (rather than https) URLs, you will need to add the appropriate NSAppTransportSecurity permissions to your app's Info.plist file, located in <project root>/ios/Runner/Info.plist. See Apple's documentation to determine the right combination of entries for your use case and supported iOS versions.

Playback Types in MediaX #

MediaX supports two types of playback:

1. Audio Playback #

Requires only the player controller to manage playback.

2. Video Playback #

Requires PlayerView to be connected with the player controller to render the video surface of the media item.

Player Controller (Player Manager) #

Controller will help you to get the data from the player instance of the player and media item's data to your view. You can get and show that data into your UI.

Initializing the controller #

late MediaX controller;

@Override
void initState() {
  super.initState();

  //Initializing the controller
  controller = MediaX.init(
    dataSource: DataSource.asset('assets/file.mp4'), // Not required
    autoplay: false // Not required
  );
}

When calling any methods of controller listed below check the initialization status of the controller using

controller.isInitialized.listen((isInitialized) {
    if (isInitialized) {
        // Call controller methods here want to execute after init
    }
});

Setting the mediaItem (DataSource needed) #

controller.setMediaItem(
  dataSource: DataSource.file('localFilePath.mp4'),
  autoplay: true // Not required
);

Playback Controller Methods #

Play/Pause the current media #

// To play the current media
controller.play();

// To pause the current media
controller.pause();

// To toggle play/pause
controller.playPause();

Stop playback #

controller.stop();

Seek forward/backward the current media #

// To seek forward
controller.seekForward();

// To seek backward/rewind
controller.seekBackward();

Set forward/backward seconds #

// To set forward seconds
controller.forwardSeekSeconds = 10; // value in seconds

// To set backward/rewind seconds
controller.backwardSeekSeconds = 10; // value in seconds

Jump to any part of video (milliseconds) #

controller.seekTo(15000); // 15000 millis = 15 secs

Mute/Unmute Player #

controller.setMuted(true); // To mute the player
controller.setMuted(false); // To unmute the player

controller.toggleMute(); // To toggle mute/unmute

Observe the playback error #

controller.playbackError.listen((error) {
  if (error != null) {
    print(error.toString());
  }
});

Observe the playback state #

controller.playbackState.listen((state) {
  print('playbackState: ${state.name}');
});

Enable MediaSession #

Control playback from Earphones/Headphones buttons like Play/Pause by default it is set to false

controller = MediaX.init(
   ...
   enableMediaSession: true
);

Get Size of the Video #

controller.videoSize.listen((videoSize) {
   print('videoSize: ${videoSize.width} ${videoSize.height}');
}); // Width and Height

Get Aspect Ratio of the Video #

controller.aspectRatio.listen((ar) {
    print('aspectRatio: $aspectRatio');
    aspectRatio.value = ar;
});

Set Playback Speed #

controller.setPlaybackSpeed(2.0); // Default is 1.0

Player View (Video Surface) #

Access PlayerViewState methods #

Initialize the PlayerViewState using GlobalKey and set the key to the playerView before accessing any PlayerViewState methods.

final GlobalKey<PlayerViewState> playerViewKey = GlobalKey<PlayerViewState>();
playerView = PlayerView(key: playerViewKey)

// Access methods like these
playerViewKey.currentState?.hideController();

Keep Screen On While Playing (Default: Disabled) #

playerView = PlayerView(awakeScreenWhilePlaying: true)

Disable the default controller view #

playerViewKey.currentState?.disableController(true);

Show/Hide the Controller View #

playerViewKey.currentState?.showController();
playerViewKey.currentState?.hideController();

// Toggle controller visibility
playerViewKey.currentState?.toggleControllerVisibility();

Set Resize Mode (Fit, Stretch, Crop) #

playerViewKey.currentState?.setResizeMode(ResizeMode.fit); // Fit to screen


// Stretch to screen
playerViewKey.currentState?.setResizeMode(ResizeMode.stretch);


// Crop and fill the screen
playerViewKey.currentState?.setResizeMode(ResizeMode.crop);

DataSource #

The DataSource holds the media item that is passed from MediaX to the platform player for playback.

Types of DataSource #

1. Asset #

A regular Flutter asset stored in the app’s asset directory.

DataSource.asset('assets/file.mp4/');

2. File #

A local file from the device storage. You need to provide the local file path for playback.

DataSource.file('../../file.mp4');

3. Network #

A media file accessible via a network URL. The URL should point to a valid media source.

DataSource.network('https://example.com/file.mp4');

Playback States #

There is an enum provided by PlaybackState which will compare the playback state obtained from the listen() method callback.

The player can be in one of the following states: #

Idle #

The player is stopped or not playing anything.

loading #

A media item is currently being loaded.

ready #

The media item has loaded and is ready to play.

buffering #

The media item is buffering or loading initially.

ended #

The media item has completed playing after reaching the end.

Playback Error #

To listen to the error changes observe the controller's playbackError object for non-null.

Error Object Structure #

The error object contains the following parameters:

message #

A descriptive message representing the cause of the error.

errorCode #

A unique error code to help identify the type of error.

stackTrace #

The full stack trace to assist in debugging and finding the root cause.

Error Code and Message #

  • PlaybackError.unknown → Unknown error occurred.
  • PlaybackError.sourceNotFound → Media source not found.
  • PlaybackError.codecError → Codec Not Found.
  • PlaybackError.networkError → Network error occurred.
  • PlaybackError.timeout → Playback timed out.
  • PlaybackError.drmError → DRM decryption failed.
  • PlaybackError.internalError → Playback failed due to an internal error.
  • PlaybackError.audioSessionError → Audio session error occurred.
  • PlaybackError.unsupportedFormat → Media format is not supported.
  • PlaybackError.invalidState → Invalid player state.
  • PlaybackError.resourceError → Failed to allocate resources.
1
likes
0
points
107
downloads

Publisher

unverified uploader

Weekly Downloads

A video player project for Android and iOS.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, get, intl, plugin_platform_interface, uuid, wakelock_plus

More

Packages that depend on mediax

Packages that implement mediax