Skip to content

Commit

Permalink
Merge pull request #9 from itsSagarBro/dev
Browse files Browse the repository at this point in the history
Updated to 0.1.0
  • Loading branch information
itsSagarBro authored Jun 2, 2024
2 parents 7ace461 + 410c909 commit 7591252
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 28 deletions.
2 changes: 1 addition & 1 deletion .flutter-plugins-dependencies
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_vlc_player","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_vlc_player-7.4.1\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_ios","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_ios-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"android":[{"name":"flutter_vlc_player","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_vlc_player-7.4.1\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_android","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_android-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"macos":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_macos","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_macos-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"linux":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":false,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":false,"dependencies":["package_info_plus"]}],"windows":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":false,"dependencies":[]},{"name":"screen_brightness_windows","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_windows-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":false,"dependencies":["package_info_plus"]}],"web":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","dependencies":["package_info_plus"]}]},"dependencyGraph":[{"name":"flutter_vlc_player","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"screen_brightness","dependencies":["screen_brightness_android","screen_brightness_ios","screen_brightness_macos","screen_brightness_windows"]},{"name":"screen_brightness_android","dependencies":[]},{"name":"screen_brightness_ios","dependencies":[]},{"name":"screen_brightness_macos","dependencies":[]},{"name":"screen_brightness_windows","dependencies":[]},{"name":"wakelock_plus","dependencies":["package_info_plus"]}],"date_created":"2024-06-02 20:55:22.247524","version":"3.19.6"}
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_vlc_player","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_vlc_player-7.4.1\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_ios","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_ios-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"android":[{"name":"flutter_vlc_player","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_vlc_player-7.4.1\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_android","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_android-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"macos":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":true,"dependencies":[]},{"name":"screen_brightness_macos","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_macos-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":true,"dependencies":["package_info_plus"]}],"linux":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":false,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":false,"dependencies":["package_info_plus"]}],"windows":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","native_build":false,"dependencies":[]},{"name":"screen_brightness_windows","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\screen_brightness_windows-1.0.1\\\\","native_build":true,"dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","native_build":false,"dependencies":["package_info_plus"]}],"web":[{"name":"package_info_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-8.0.0\\\\","dependencies":[]},{"name":"wakelock_plus","path":"C:\\\\Users\\\\sptl6\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\wakelock_plus-1.2.5\\\\","dependencies":["package_info_plus"]}]},"dependencyGraph":[{"name":"flutter_vlc_player","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"screen_brightness","dependencies":["screen_brightness_android","screen_brightness_ios","screen_brightness_macos","screen_brightness_windows"]},{"name":"screen_brightness_android","dependencies":[]},{"name":"screen_brightness_ios","dependencies":[]},{"name":"screen_brightness_macos","dependencies":[]},{"name":"screen_brightness_windows","dependencies":[]},{"name":"wakelock_plus","dependencies":["package_info_plus"]}],"date_created":"2024-06-02 23:16:33.875325","version":"3.19.6"}
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Upcoming
## 0.1.0

* Added default selector for audio, subtitle and qualities
* Added default selector for audio, subtitle and video qualities
* Added ability to fetch all qualities from youtube
* Updated screen_brightness plugin to version 1.0.1

Expand Down
8 changes: 5 additions & 3 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,12 @@ class _MyHomePageState extends State<MyHomePage> {
SizedBox(
height: 250,
child: ModernPlayer.createPlayer(
video: ModernPlayerVideo.single(
source:
defaultSelectionOptions: ModernPlayerDefaultSelectionOptions(
defaultQualitySelectors: [DefaultSelectorLabel('360p')]),
video: ModernPlayerVideo.youtubeWithUrl(
url:
'https://www.youtube.com/watch?v=vEHeI_wBzu0&ab_channel=UntitledStudio',
sourceType: ModernPlayerSourceType.youtube),
fetchQualities: true),
),
)
],
Expand Down
77 changes: 63 additions & 14 deletions lib/src/modern_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ class _ModernPlayerState extends State<ModernPlayer> {
double visibilityFraction = 1;
String? youtubeId;

late ModernPlayerVideoData selectedQuality;

List<ModernPlayerVideoData> videosData = List.empty(growable: true);

@override
Expand All @@ -103,14 +105,23 @@ class _ModernPlayerState extends State<ModernPlayer> {
}

videosData = widget.video.videosData;

_setPlayer();
}

void _setPlayer() async {
ModernPlayerVideoData defaultSource = videosData.length > 1
? _getDefaultTrackSource(
selectors:
widget.defaultSelectionOptions?.defaultQualitySelectors,
trackEntries: videosData) ??
videosData.first
: videosData.first;

selectedQuality = defaultSource;

// Network
if (videosData.first.sourceType == ModernPlayerSourceType.network) {
_playerController = VlcPlayerController.network(videosData.first.source,
if (defaultSource.sourceType == ModernPlayerSourceType.network) {
_playerController = VlcPlayerController.network(defaultSource.source,
autoPlay: true,
autoInitialize: true,
hwAcc: HwAcc.auto,
Expand All @@ -120,17 +131,14 @@ class _ModernPlayerState extends State<ModernPlayer> {
));
}
// File
else if (videosData.first.sourceType == ModernPlayerSourceType.file) {
_playerController = VlcPlayerController.file(
File(videosData.first.source),
autoPlay: true,
autoInitialize: true,
hwAcc: HwAcc.auto);
else if (defaultSource.sourceType == ModernPlayerSourceType.file) {
_playerController = VlcPlayerController.file(File(defaultSource.source),
autoPlay: true, autoInitialize: true, hwAcc: HwAcc.auto);
}
// Youtube
else if (videosData.first.sourceType == ModernPlayerSourceType.youtube) {
else if (defaultSource.sourceType == ModernPlayerSourceType.youtube) {
var yt = YoutubeExplode();
youtubeId = videosData.first.source;
youtubeId = defaultSource.source;
StreamManifest manifest =
await yt.videos.streamsClient.getManifest(youtubeId);

Expand All @@ -157,8 +165,18 @@ class _ModernPlayerState extends State<ModernPlayer> {
widget.audioTracks.add(ModernPlayerAudioTrackOptions(
source: manifest.audioOnly.withHighestBitrate().url.toString(),
sourceType: ModernPlayerAudioSourceType.network));
_playerController = VlcPlayerController.network(ytVideos.first.source,
autoPlay: true, autoInitialize: true, hwAcc: HwAcc.auto);

ModernPlayerVideoData? defaultSourceYt = _getDefaultTrackSource(
selectors: widget.defaultSelectionOptions?.defaultQualitySelectors,
trackEntries: ytVideos);

selectedQuality = defaultSourceYt ?? defaultSource;

_playerController = VlcPlayerController.network(
defaultSourceYt?.source ?? ytVideos.first.source,
autoPlay: true,
autoInitialize: true,
hwAcc: HwAcc.auto);
} else {
_playerController = VlcPlayerController.network(
manifest.muxed.withHighestBitrate().url.toString(),
Expand All @@ -171,7 +189,7 @@ class _ModernPlayerState extends State<ModernPlayer> {
}
// Asset
else {
_playerController = VlcPlayerController.asset(videosData.first.source,
_playerController = VlcPlayerController.asset(defaultSource.source,
autoPlay: true, autoInitialize: true, hwAcc: HwAcc.full);
}

Expand All @@ -183,6 +201,36 @@ class _ModernPlayerState extends State<ModernPlayer> {
});
}

/// Helper function to set default track for subtitle, audio, etc
ModernPlayerVideoData? _getDefaultTrackSource(
{required List<DefaultSelector>? selectors,
required List<ModernPlayerVideoData>? trackEntries}) {
if (selectors == null || trackEntries == null || trackEntries.isEmpty) {
return null;
}

for (final selector in selectors) {
switch (selector) {
case DefaultSelectorCustom():
ModernPlayerVideoData? selected;
for (int i = 0; i < trackEntries.length; i++) {
if (selector.shouldUseTrack(i, trackEntries[i].label)) {
selected = trackEntries[i];
break;
}
}

if (selected != null) {
return selected;
// Else, if no track is found, loop to the next selector
}
case DefaultSelectorOff():
return null;
}
}
return null;
}

void _onInitialize() async {
_videoStartAt();
_addSubtitles();
Expand Down Expand Up @@ -308,6 +356,7 @@ class _ModernPlayerState extends State<ModernPlayer> {
MediaQuery.of(context).size.height),
callbackOptions:
widget.callbackOptions ?? ModernPlayerCallbackOptions(),
selectedQuality: selectedQuality,
)
],
)
Expand Down
9 changes: 4 additions & 5 deletions lib/src/modern_player_controls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:flutter_vlc_player/flutter_vlc_player.dart';
import 'package:modern_player/modern_player.dart';
import 'package:modern_player/src/modern_player_options.dart';
import 'package:modern_player/src/others/modern_player_utils.dart';
import 'package:modern_player/src/others/modern_players_enums.dart';
import 'package:screen_brightness/screen_brightness.dart';
import 'package:youtube_explode_dart/youtube_explode_dart.dart';

Expand All @@ -22,7 +21,8 @@ class ModernPlayerControls extends StatefulWidget {
required this.defaultSelectionOptions,
required this.themeOptions,
required this.translationOptions,
required this.callbackOptions});
required this.callbackOptions,
required this.selectedQuality});

final VlcPlayerController player;
final Size viewSize;
Expand All @@ -32,6 +32,7 @@ class ModernPlayerControls extends StatefulWidget {
final ModernPlayerThemeOptions themeOptions;
final ModernPlayerTranslationOptions translationOptions;
final ModernPlayerCallbackOptions callbackOptions;
final ModernPlayerVideoData selectedQuality;

@override
State<ModernPlayerControls> createState() => _ModernPlayerControlsState();
Expand Down Expand Up @@ -96,12 +97,10 @@ class _ModernPlayerControlsState extends State<ModernPlayerControls> {
_duration = player.value.duration;
_currentPos = player.value.position;

_currentVideoData = widget.videos.first;

_currentVideoData = widget.selectedQuality;
_customActionButtons = widget.controlsOptions.customActionButtons ?? [];

player.addListener(_listen);

super.initState();
}

Expand Down
9 changes: 7 additions & 2 deletions lib/src/modern_player_options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,13 @@ class ModernPlayerVideo {
case ModernPlayerSourceType.youtube:
videoData = source.contains('https') || source.contains('youtube')
? ModernPlayerVideoData.youtubeWithUrl(
label: 'Default', url: source)
: ModernPlayerVideoData.youtubeWithId(label: 'Default', id: source);
label: 'Default',
url: source,
)
: ModernPlayerVideoData.youtubeWithId(
label: 'Default',
id: source,
);
break;
default:
videoData =
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: modern_player
description: Enhance your video playback experience with modern_player. A feature-rich Flutter package for flutter_vlc_player.
version: 0.0.6
version: 0.1.0
homepage: https://github.com/itsSagarBro/modern_player

environment:
Expand Down

0 comments on commit 7591252

Please sign in to comment.