From 2ab4e33c126bbf8940b48bfb597c0fa9a364921b Mon Sep 17 00:00:00 2001 From: Chaim Paneth Date: Tue, 12 Oct 2021 19:39:40 +0300 Subject: [PATCH] update JWPlayerKit to fix autoplay true issue, update JWPlayerViewController with playerStateDelegate callbacks --- ios/RNJWPlayer.podspec | 2 +- ios/RNJWPlayer/RNJWPlayerView.m | 114 +++++++++++++++++++++++++------- package.json | 2 +- 3 files changed, 93 insertions(+), 25 deletions(-) diff --git a/ios/RNJWPlayer.podspec b/ios/RNJWPlayer.podspec index 42c0c71c..a354560a 100644 --- a/ios/RNJWPlayer.podspec +++ b/ios/RNJWPlayer.podspec @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.platform = :ios, "10.0" s.source = { :git => "https://github.com/chaimPaneth/react-native-jw-media-player.git", :tag => "v#{s.version}" } s.source_files = "RNJWPlayer/*.{h,m}" - s.dependency 'JWPlayerKit', '~> 4.0.0' + s.dependency 'JWPlayerKit', '~> 4.0.1' s.dependency 'google-cast-sdk', '~> 4.5.1' s.dependency 'React' # s.static_framework = true diff --git a/ios/RNJWPlayer/RNJWPlayerView.m b/ios/RNJWPlayer/RNJWPlayerView.m index 726b473a..f587ca0b 100644 --- a/ios/RNJWPlayer/RNJWPlayerView.m +++ b/ios/RNJWPlayer/RNJWPlayerView.m @@ -747,7 +747,7 @@ -(void)presentPlayerViewController:(JWPlayerConfiguration*)configuration _playerViewController.playerView.delegate = self; _playerViewController.player.delegate = self; -// _playerViewController.player.playbackStateDelegate = self; // this causes issue with ui + _playerViewController.player.playbackStateDelegate = self; _playerViewController.player.adDelegate = self; _playerViewController.player.avDelegate = self; } @@ -974,6 +974,10 @@ - (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPict - (void)jwplayerContentIsBuffering:(id)player { + if (_playerViewController) { + [_playerViewController jwplayerContentIsBuffering:player]; + } + if (self.onBuffer) { self.onBuffer(@{}); } @@ -981,6 +985,10 @@ - (void)jwplayerContentIsBuffering:(id)player - (void)jwplayer:(id)player updatedBuffer:(double)percent position:(JWTimeData *)time { + if (_playerViewController) { + [_playerViewController jwplayer:player updatedBuffer:percent position:time]; + } + if (self.onUpdateBuffer) { self.onUpdateBuffer(@{@"percent": @(percent), @"position": time}); } @@ -988,6 +996,10 @@ - (void)jwplayer:(id)player updatedBuffer:(double)percent position:(JW - (void)jwplayer:(id)player didFinishLoadingWithTime:(NSTimeInterval)loadTime { + if (_playerViewController) { + [_playerViewController jwplayer:player didFinishLoadingWithTime:loadTime]; + } + if (self.onLoaded) { self.onLoaded(@{}); } @@ -995,6 +1007,10 @@ - (void)jwplayer:(id)player didFinishLoadingWithTime:(NSTimeInterval)l - (void)jwplayer:(id)player isAttemptingToPlay:(JWPlayerItem *)playlistItem reason:(enum JWPlayReason)reason { + if (_playerViewController) { + [_playerViewController jwplayer:player isAttemptingToPlay:playlistItem reason:reason]; + } + if (self.onAttemptPlay) { self.onAttemptPlay(@{}); } @@ -1002,6 +1018,10 @@ - (void)jwplayer:(id)player isAttemptingToPlay:(JWPlayerItem *)playlis - (void)jwplayer:(id)player isPlayingWithReason:(enum JWPlayReason)reason { + if (_playerViewController) { + [_playerViewController jwplayer:player isPlayingWithReason:reason]; + } + if (self.onPlay) { self.onPlay(@{}); } @@ -1012,6 +1032,10 @@ - (void)jwplayer:(id)player isPlayingWithReason:(enum JWPlayReason)rea - (void)jwplayer:(id)player willPlayWithReason:(enum JWPlayReason)reason { + if (_playerViewController) { + [_playerViewController jwplayer:player willPlayWithReason:reason]; + } + if (self.onBeforePlay) { self.onBeforePlay(@{}); } @@ -1019,6 +1043,10 @@ - (void)jwplayer:(id)player willPlayWithReason:(enum JWPlayReason)reas - (void)jwplayer:(id)player didPauseWithReason:(enum JWPauseReason)reason { + if (_playerViewController) { + [_playerViewController jwplayer:player didPauseWithReason:reason]; + } + if (self.onPause) { self.onPause(@{}); } @@ -1030,6 +1058,10 @@ - (void)jwplayer:(id)player didPauseWithReason:(enum JWPauseReason)rea - (void)jwplayer:(id)player didBecomeIdleWithReason:(enum JWIdleReason)reason { + if (_playerViewController) { + [_playerViewController jwplayer:player didBecomeIdleWithReason:reason]; + } + if (self.onIdle) { self.onIdle(@{}); } @@ -1037,6 +1069,10 @@ - (void)jwplayer:(id)player didBecomeIdleWithReason:(enum JWIdleReason - (void)jwplayer:(id)player isVisible:(BOOL)isVisible { + if (_playerViewController) { + [_playerViewController jwplayer:player isVisible:isVisible]; + } + if (self.onVisible) { self.onVisible(@{@"visible": @(isVisible)}); } @@ -1044,6 +1080,10 @@ - (void)jwplayer:(id)player isVisible:(BOOL)isVisible - (void)jwplayerContentWillComplete:(id)player { + if (_playerViewController) { + [_playerViewController jwplayerContentWillComplete:player]; + } + if (self.onBeforeComplete) { self.onBeforeComplete(@{}); } @@ -1051,6 +1091,10 @@ - (void)jwplayerContentWillComplete:(id)player - (void)jwplayerContentDidComplete:(id)player { + if (_playerViewController) { + [_playerViewController jwplayerContentDidComplete:player]; + } + if (self.onComplete) { self.onComplete(@{}); } @@ -1058,19 +1102,23 @@ - (void)jwplayerContentDidComplete:(id)player - (void)jwplayer:(id)player didLoadPlaylistItem:(JWPlayerItem *)item at:(NSUInteger)index { + if (_playerViewController) { + [_playerViewController jwplayer:player didLoadPlaylistItem:item at:index]; + } + if (self.onPlaylistItem) { NSDictionary* itemDict = [NSDictionary dictionaryWithObjectsAndKeys: item.mediaId, @"mediaId", - item.posterImage, @"image", - item.title, @"title", - item.description, @"desc", - item.vmapURL, @"adVmap", - item.recommendations, @"recommendations", - item.startTime, @"startTime", - item.autostart, @"autostart", - item.videoSources, @"sources", - item.adSchedule, @"adSchedule", - item.mediaTracks, @"tracks", +// item.posterImage, @"image", +// item.title, @"title", +// item.description, @"desc", +// item.vmapURL, @"adVmap", +// item.recommendations, @"recommendations", +// item.startTime, @"startTime", +// item.autostart, @"autostart", +// item.videoSources, @"sources", +// item.adSchedule, @"adSchedule", +// item.mediaTracks, @"tracks", nil]; NSError *error; @@ -1082,22 +1130,26 @@ - (void)jwplayer:(id)player didLoadPlaylistItem:(JWPlayerItem *)item a - (void)jwplayer:(id)player didLoadPlaylist:(NSArray *)playlist { + if (_playerViewController) { + [_playerViewController jwplayer:player didLoadPlaylist:playlist]; + } + if (self.onPlaylist) { NSMutableArray* playlistArray = [[NSMutableArray alloc] init]; for (JWPlayerItem* item in playlist) { NSDictionary* itemDict = [NSDictionary dictionaryWithObjectsAndKeys: item.mediaId, @"mediaId", - item.posterImage, @"image", - item.title, @"title", - item.description, @"desc", - item.vmapURL, @"adVmap", - item.recommendations, @"recommendations", - item.startTime, @"startTime", - item.autostart, @"autostart", - item.videoSources, @"sources", - item.adSchedule, @"adSchedule", - item.mediaTracks, @"tracks", +// item.posterImage, @"image", +// item.title, @"title", +// item.description, @"desc", +// item.vmapURL, @"adVmap", +// item.recommendations, @"recommendations", +// item.startTime, @"startTime", +// item.autostart, @"autostart", +// item.videoSources, @"sources", +// item.adSchedule, @"adSchedule", +// item.mediaTracks, @"tracks", nil]; [playlistArray addObject:itemDict]; } @@ -1111,6 +1163,10 @@ - (void)jwplayer:(id)player didLoadPlaylist:(NSArray * - (void)jwplayerPlaylistHasCompleted:(id)player { + if (_playerViewController) { + [_playerViewController jwplayerPlaylistHasCompleted:player]; + } + if (self.onPlaylistComplete) { self.onPlaylistComplete(@{}); } @@ -1118,11 +1174,17 @@ - (void)jwplayerPlaylistHasCompleted:(id)player - (void)jwplayer:(id)player usesMediaType:(enum JWMediaType)type { - + if (_playerViewController) { + [_playerViewController jwplayer:player usesMediaType:type]; + } } - (void)jwplayer:(id)player seekedFrom:(NSTimeInterval)oldPosition to:(NSTimeInterval)newPosition { + if (_playerViewController) { + [_playerViewController jwplayer:player seekedFrom:oldPosition to:newPosition]; + } + if (self.onSeek) { self.onSeek(@{@"from": @(oldPosition), @"to": @(newPosition)}); } @@ -1130,6 +1192,10 @@ - (void)jwplayer:(id)player seekedFrom:(NSTimeInterval)oldPosition to: - (void)jwplayerHasSeeked:(id)player { + if (_playerViewController) { + [_playerViewController jwplayerHasSeeked:player]; + } + if (self.onSeeked) { self.onSeeked(@{}); } @@ -1137,7 +1203,9 @@ - (void)jwplayerHasSeeked:(id)player - (void)jwplayer:(id)player playbackRateChangedTo:(double)rate at:(NSTimeInterval)time { - + if (_playerViewController) { + [_playerViewController jwplayer:player playbackRateChangedTo:rate at:time]; + } } #pragma mark - JWPlayer Ad Delegate diff --git a/package.json b/package.json index 261af1ee..a1a94625 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-jw-media-player", - "version": "0.2.0-beta.2", + "version": "0.2.1", "description": "React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)", "main": "index.js", "types": "./index.d.ts",