From eef3a6969bde98a747d19df51c4ee7aea4c68e96 Mon Sep 17 00:00:00 2001 From: Alex Agatstein Date: Mon, 6 Sep 2021 18:54:01 -0500 Subject: [PATCH 1/3] Fix bug where playback speed would reset to 1 upon seek; Store local copy of playback speed setting it on player to preserve value --- .../video_player/ios/Classes/FLTVideoPlayerPlugin.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m index f0f672d87431..863ab7ef2d03 100644 --- a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m @@ -40,6 +40,7 @@ @interface FLTVideoPlayer : NSObject @property(nonatomic, readonly) bool disposed; @property(nonatomic, readonly) bool isPlaying; @property(nonatomic) bool isLooping; +@property(nonatomic) double internalPlaybackSpeed; @property(nonatomic, readonly) bool isInitialized; - (instancetype)initWithURL:(NSURL*)url frameUpdater:(FLTFrameUpdater*)frameUpdater @@ -47,6 +48,7 @@ - (instancetype)initWithURL:(NSURL*)url - (void)play; - (void)pause; - (void)setIsLooping:(bool)isLooping; +- (void)setInternalPlaybackSpeed:(double)speed; - (void)updatePlayingState; @end @@ -242,6 +244,7 @@ - (instancetype)initWithPlayerItem:(AVPlayerItem*)item frameUpdater:(FLTFrameUpd _player = [AVPlayer playerWithPlayerItem:item]; _player.actionAtItemEnd = AVPlayerActionAtItemEndNone; + [self setInternalPlaybackSpeed:1.0f]; [self createVideoOutputAndDisplayLink:frameUpdater]; @@ -310,6 +313,9 @@ - (void)updatePlayingState { } if (_isPlaying) { [_player play]; + + // fix to always set playback speed accurately + [self setPlaybackSpeed: _internalPlaybackSpeed]; } else { [_player pause]; } @@ -369,6 +375,10 @@ - (void)setIsLooping:(bool)isLooping { _isLooping = isLooping; } +- (void)setInternalPlaybackSpeed:(double)speed { + _internalPlaybackSpeed = speed; +} + - (void)setVolume:(double)volume { _player.volume = (float)((volume < 0.0) ? 0.0 : ((volume > 1.0) ? 1.0 : volume)); } @@ -394,6 +404,7 @@ - (void)setPlaybackSpeed:(double)speed { return; } + [self setInternalPlaybackSpeed:speed]; _player.rate = speed; } From 3d62e8e0353296e3df0ba06813cb3434a6fd6c0a Mon Sep 17 00:00:00 2001 From: Alex Agatstein Date: Fri, 10 Sep 2021 00:04:56 -0400 Subject: [PATCH 2/3] Fix lint error --- .../video_player/ios/Classes/FLTVideoPlayerPlugin.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m index 863ab7ef2d03..ce148f28aa88 100644 --- a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m @@ -315,7 +315,7 @@ - (void)updatePlayingState { [_player play]; // fix to always set playback speed accurately - [self setPlaybackSpeed: _internalPlaybackSpeed]; + [self setPlaybackSpeed:_internalPlaybackSpeed]; } else { [_player pause]; } From 9563754fa3cd9fbdece49e58c087583f96d76d83 Mon Sep 17 00:00:00 2001 From: Alex Agatstein Date: Thu, 16 Sep 2021 19:41:26 -0400 Subject: [PATCH 3/3] Remove unnecessary code --- .../video_player/ios/Classes/FLTVideoPlayerPlugin.m | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m index ce148f28aa88..093e34e6ec3d 100644 --- a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m @@ -48,7 +48,6 @@ - (instancetype)initWithURL:(NSURL*)url - (void)play; - (void)pause; - (void)setIsLooping:(bool)isLooping; -- (void)setInternalPlaybackSpeed:(double)speed; - (void)updatePlayingState; @end @@ -244,7 +243,6 @@ - (instancetype)initWithPlayerItem:(AVPlayerItem*)item frameUpdater:(FLTFrameUpd _player = [AVPlayer playerWithPlayerItem:item]; _player.actionAtItemEnd = AVPlayerActionAtItemEndNone; - [self setInternalPlaybackSpeed:1.0f]; [self createVideoOutputAndDisplayLink:frameUpdater]; @@ -375,10 +373,6 @@ - (void)setIsLooping:(bool)isLooping { _isLooping = isLooping; } -- (void)setInternalPlaybackSpeed:(double)speed { - _internalPlaybackSpeed = speed; -} - - (void)setVolume:(double)volume { _player.volume = (float)((volume < 0.0) ? 0.0 : ((volume > 1.0) ? 1.0 : volume)); }