Skip to content

Commit

Permalink
Feature/february changes 6 (#300)
Browse files Browse the repository at this point in the history
* Playlist refactor

* Playlist refactor

* Fixed iOS availableDuration index issue

* Fixed iOS availableDuration index issue

* Updated changelog

Co-authored-by: jhomlala <j.homlala@gmail.com>
  • Loading branch information
jhomlala and jhomlala authored Feb 14, 2021
1 parent ea7a97f commit 2d1f90d
Show file tree
Hide file tree
Showing 14 changed files with 266 additions and 162 deletions.
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
## 0.0.54
* Refactored BetterPlayerPlaylist feature.
* Added new BetterPlayerPlaylistController which is accessible from BetterPlayerPlaylist's current
state. Playlist video can be changed with setupDataSource method and current video index can be
accessed with currentDataSourceIndex getter.
* Fixed iOS availableDuration index issue.
* Added arabic translations (by https://github.com/mohamed-Etman).
* Added headers to HLS data request (by https://github.com/mohamed-Etman).
* Added fullScreenAspectRatio to copyWith method in BetterPlayerConfiguration (by https://github.com/njlawton)

## 0.0.53
* Fixed fullscreen issue.
* Fixed HLS tracks selection.
* Removed HLS parser package and included HLS parser package in Better Player.
* Removed unused player observer in iOS.
* Fixed cache issue in Android where multiple Better Player instances uses same directory.
* Fixed HLS parsing issue.
* Added HLS Audio examoke,
* Added HLS Audio example.

## 0.0.52
* Fixed unregister listener issue in iOS.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ This plugin is based on [Chewie](https://github.com/brianegan/chewie). Chewie is

```yaml
dependencies:
better_player: ^0.0.53
better_player: ^0.0.54
```
2. Install it
Expand Down
29 changes: 16 additions & 13 deletions example/lib/pages/event_listener_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@ class _EventListenerPageState extends State<EventListenerPage> {
StreamController<DateTime> _eventStreamController =
StreamController.broadcast();

@override
void dispose() {
_eventStreamController.close();
super.dispose();
}

@override
void initState() {
BetterPlayerConfiguration betterPlayerConfiguration =
Expand All @@ -32,20 +26,29 @@ class _EventListenerPageState extends State<EventListenerPage> {
BetterPlayerDataSourceType.network, Constants.elephantDreamVideoUrl);
_betterPlayerController = BetterPlayerController(betterPlayerConfiguration);
_betterPlayerController.setupDataSource(dataSource);
_betterPlayerController.addEventsListener((event) {
events.insert(0, event);

///Used to refresh only list of events
_eventStreamController.add(DateTime.now());
});
_betterPlayerController.addEventsListener(_handleEvent);
super.initState();
}

@override
void dispose() {
_eventStreamController.close();
_betterPlayerController.removeEventsListener(_handleEvent);
super.dispose();
}

void _handleEvent(BetterPlayerEvent event) {
events.insert(0, event);

///Used to refresh only list of events
_eventStreamController.add(DateTime.now());
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Normal player"),
title: Text("Event listener"),
),
body: Column(
children: [
Expand Down
84 changes: 55 additions & 29 deletions example/lib/pages/playlist_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,46 @@ class _PlaylistPageState extends State<PlaylistPage> {
final GlobalKey<BetterPlayerPlaylistState> _betterPlayerPlaylistStateKey =
GlobalKey();
List<BetterPlayerDataSource> _dataSourceList = [];
BetterPlayerConfiguration _betterPlayerConfiguration;
BetterPlayerPlaylistConfiguration _betterPlayerPlaylistConfiguration;

_PlaylistPageState() {
_betterPlayerConfiguration = BetterPlayerConfiguration(
autoPlay: true,
aspectRatio: 1,
fit: BoxFit.cover,
subtitlesConfiguration: BetterPlayerSubtitlesConfiguration(fontSize: 10),
deviceOrientationsAfterFullScreen: [
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
],
);
_betterPlayerPlaylistConfiguration = BetterPlayerPlaylistConfiguration(
loopVideos: true,
nextVideoDelay: Duration(seconds: 5),
);
}

Future<List<BetterPlayerDataSource>> setupData() async {
_dataSourceList.add(
BetterPlayerDataSource(
BetterPlayerDataSourceType.network,
Constants.forBiggerBlazesUrl,
subtitles: BetterPlayerSubtitlesSource.single(
type: BetterPlayerSubtitlesSourceType.file,
url: await Utils.getFileUrl(Constants.fileExampleSubtitlesUrl)),
type: BetterPlayerSubtitlesSourceType.file,
url: await Utils.getFileUrl(Constants.fileExampleSubtitlesUrl),
),
),
);

_dataSourceList.add(BetterPlayerDataSource(
BetterPlayerDataSourceType.network, Constants.bugBuckBunnyVideoUrl));
_dataSourceList.add(
BetterPlayerDataSource(
BetterPlayerDataSourceType.network, Constants.bugBuckBunnyVideoUrl),
);
_dataSourceList.add(
BetterPlayerDataSource(
BetterPlayerDataSourceType.network,
Constants.phantomVideoUrl,
liveStream: true,
Constants.forBiggerJoyridesVideoUrl,
),
);

Expand Down Expand Up @@ -60,42 +81,47 @@ class _PlaylistPageState extends State<PlaylistPage> {
AspectRatio(
child: BetterPlayerPlaylist(
key: _betterPlayerPlaylistStateKey,
betterPlayerConfiguration: BetterPlayerConfiguration(
autoPlay: true,
aspectRatio: 1,
fit: BoxFit.cover,
subtitlesConfiguration:
BetterPlayerSubtitlesConfiguration(fontSize: 10),
controlsConfiguration:
BetterPlayerControlsConfiguration.cupertino(),
deviceOrientationsAfterFullScreen: [
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]),
betterPlayerConfiguration: _betterPlayerConfiguration,
betterPlayerPlaylistConfiguration:
BetterPlayerPlaylistConfiguration(
loopVideos: true,
nextVideoDelay: Duration(seconds: 5)),
_betterPlayerPlaylistConfiguration,
betterPlayerDataSourceList: snapshot.data,
),
aspectRatio: 1,
),
ElevatedButton(
child: Text("Get current position"),
onPressed: () {
var position = _betterPlayerPlaylistStateKey
.currentState
.betterPlayerController
.videoPlayerController
.value
.position;
print("The position is: $position");
_betterPlayerPlaylistController.setupDataSource(0);
},
child: Text("Change to first data source"),
),
ElevatedButton(
onPressed: () {
_betterPlayerPlaylistController.setupDataSource(2);
},
child: Text("Change to last source"),
),
ElevatedButton(
onPressed: () {
print("Currently playing video: " +
_betterPlayerPlaylistController.currentDataSourceIndex
.toString());
},
child: Text("Check currently playing video index"),
),
ElevatedButton(
onPressed: () {
_betterPlayerPlaylistController.betterPlayerController
.pause();
},
child: Text("Pause current video with BetterPlayerController"),
),
]);
}
},
),
);
}

BetterPlayerPlaylistController get _betterPlayerPlaylistController =>
_betterPlayerPlaylistStateKey.currentState.betterPlayerPlaylistController;
}
15 changes: 10 additions & 5 deletions ios/Classes/FLTBetterPlayerPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -370,11 +370,16 @@ -(void)handleStalled {
- (NSTimeInterval) availableDuration
{
NSArray *loadedTimeRanges = [[_player currentItem] loadedTimeRanges];
CMTimeRange timeRange = [[loadedTimeRanges objectAtIndex:0] CMTimeRangeValue];
Float64 startSeconds = CMTimeGetSeconds(timeRange.start);
Float64 durationSeconds = CMTimeGetSeconds(timeRange.duration);
NSTimeInterval result = startSeconds + durationSeconds;
return result;
if (loadedTimeRanges.count > 0){
CMTimeRange timeRange = [[loadedTimeRanges objectAtIndex:0] CMTimeRangeValue];
Float64 startSeconds = CMTimeGetSeconds(timeRange.start);
Float64 durationSeconds = CMTimeGetSeconds(timeRange.duration);
NSTimeInterval result = startSeconds + durationSeconds;
return result;
} else {
return 0;
}

}

- (void)observeValueForKeyPath:(NSString*)path
Expand Down
1 change: 1 addition & 0 deletions lib/better_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export 'src/list/better_player_list_video_player.dart';
export 'src/list/better_player_list_video_player_controller.dart';
export 'src/playlist/better_player_playlist.dart';
export 'src/playlist/better_player_playlist_configuration.dart';
export 'src/playlist/better_player_playlist_controller.dart';
export 'src/subtitles/better_player_subtitles_configuration.dart';
export 'src/subtitles/better_player_subtitles_source.dart';
export 'src/subtitles/better_player_subtitles_source_type.dart';
Expand Down
5 changes: 3 additions & 2 deletions lib/src/controls/better_player_cupertino_controls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,8 @@ class _BetterPlayerCupertinoControlsState
return StreamBuilder<int>(
stream: _betterPlayerController.nextVideoTimeStreamController.stream,
builder: (context, snapshot) {
if (snapshot.data != null) {
final time = snapshot.data;
if (time != null && time > 0) {
return InkWell(
onTap: () {
_betterPlayerController.playNextVideo();
Expand All @@ -535,7 +536,7 @@ class _BetterPlayerCupertinoControlsState
child: Padding(
padding: const EdgeInsets.all(12),
child: Text(
"${_betterPlayerController.translations.controlsNextVideoIn} ${snapshot.data} ...",
"${_betterPlayerController.translations.controlsNextVideoIn} $time ...",
style: const TextStyle(color: Colors.white),
),
),
Expand Down
5 changes: 3 additions & 2 deletions lib/src/controls/better_player_material_controls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,8 @@ class _BetterPlayerMaterialControlsState
return StreamBuilder<int>(
stream: _betterPlayerController.nextVideoTimeStreamController.stream,
builder: (context, snapshot) {
if (snapshot.data != null) {
final time = snapshot.data;
if (time != null && time > 0) {
return BetterPlayerMaterialClickableWidget(
onTap: () {
_betterPlayerController.playNextVideo();
Expand All @@ -477,7 +478,7 @@ class _BetterPlayerMaterialControlsState
child: Padding(
padding: const EdgeInsets.all(12),
child: Text(
"${_betterPlayerController.translations.controlsNextVideoIn} ${snapshot.data} ...",
"${_betterPlayerController.translations.controlsNextVideoIn} $time ...",
style: const TextStyle(color: Colors.white),
),
),
Expand Down
6 changes: 0 additions & 6 deletions lib/src/core/better_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,6 @@ class _BetterPlayerState extends State<BetterPlayer>

WidgetsBinding.instance.removeObserver(this);
widget.controller.removeListener(onFullScreenChanged);

///Controller from list widget must be dismissed manually
if (widget.controller.betterPlayerPlaylistConfiguration == null) {
widget.controller.dispose();
}

super.dispose();
}

Expand Down
3 changes: 2 additions & 1 deletion lib/src/list/better_player_list_video_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ class _BetterPlayerListVideoPlayerState
playerVisibilityChangedBehavior: onVisibilityChanged,
),
betterPlayerDataSource: widget.dataSource,
betterPlayerPlaylistConfiguration: BetterPlayerPlaylistConfiguration(),
betterPlayerPlaylistConfiguration:
const BetterPlayerPlaylistConfiguration(),
);

if (widget.betterPlayerListVideoPlayerController != null) {
Expand Down
Loading

0 comments on commit 2d1f90d

Please sign in to comment.