Skip to content

Commit

Permalink
added setCurrentCaptions, fixed tracks, playerviewcontroller obj c wo…
Browse files Browse the repository at this point in the history
…rking
  • Loading branch information
chaimPaneth committed Apr 4, 2022
1 parent dabd4fa commit da1b66f
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 77 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,7 @@ public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Conf
| **`getAudioTracks`** | Returns promise that returns an array of [AudioTracks](#AudioTrack) | `none` |
| **`getCurrentAudioTrack`** | Returns promise that returns the index of the current audio track in array returned by getAudioTracks | `none` |
| **`setCurrentAudioTrack`** | Sets the current audio track to the audio track at the specified index in the array returned by getAudioTracks | `Int` |
| **`setCurrentCaptions`** | Turns off captions when argument is 0. Setting argument to another integer, sets captions to track at playlistItem.tracks[integer - 1] | `Int` |

## Available callbacks

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,24 @@ public void execute (NativeViewHierarchyManager nvhm) {
}
}

@ReactMethod
public void setCurrentCaptions(final int reactTag, final int index) {
try {
UIManagerModule uiManager = mReactContext.getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
public void execute (NativeViewHierarchyManager nvhm) {
RNJWPlayerView playerView = (RNJWPlayerView) nvhm.resolveView(reactTag);

if (playerView != null && playerView.mPlayer != null) {
playerView.mPlayer.setCurrentCaptions(index);
}
}
});
} catch (IllegalViewOperationException e) {
throw e;
}
}

private int stateToInt(PlayerState playerState) {
switch (playerState) {
case IDLE:
Expand Down
10 changes: 10 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ export default class JWPlayer extends Component {
getAudioTracks: PropTypes.func,
getCurrentAudioTrack: PropTypes.func,
setCurrentAudioTrack: PropTypes.func,
setCurrentCaptions: PropTypes.func,
onAudioTracks: PropTypes.func,
};

Expand Down Expand Up @@ -400,6 +401,15 @@ export default class JWPlayer extends Component {
}
}

setCurrentCaptions(index) {
if (RNJWPlayerManager) {
RNJWPlayerManager.setCurrentCaptions(
this.getRNJWPlayerBridgeHandle(),
index
);
}
}

getRNJWPlayerBridgeHandle() {
return ReactNative.findNodeHandle(this.refs[RCT_RNJWPLAYER_REF]);
}
Expand Down
15 changes: 13 additions & 2 deletions ios/RNJWPlayer/RNJWPlayerView.m
Original file line number Diff line number Diff line change
Expand Up @@ -372,13 +372,12 @@ -(JWPlayerItem*)getPlayerItem:item
NSURL *fileUrl = [NSURL URLWithString:file];
NSString *label = [item objectForKey:@"label"];

JWMediaTrack *trackItem = [JWMediaTrack init];
JWCaptionTrackBuilder* trackBuilder = [[JWCaptionTrackBuilder alloc] init];

[trackBuilder file:fileUrl];
[trackBuilder label:label];

trackItem = [trackBuilder buildAndReturnError:&error];
JWMediaTrack *trackItem = [trackBuilder buildAndReturnError:&error];

[tracksArray addObject:trackItem];
}
Expand Down Expand Up @@ -620,6 +619,11 @@ -(void)setupPlayerViewController:config :(JWPlayerConfiguration*)playerConfig
_playerViewController.enableLockScreenControls = YES;
}

id allowsPictureInPicturePlayback = config[@"allowsPictureInPicturePlayback"];
if ((allowsPictureInPicturePlayback != nil && allowsPictureInPicturePlayback != (id)[NSNull null])) {
_playerViewController.allowsPictureInPicturePlayback = allowsPictureInPicturePlayback;
}

id styling = config[@"styling"];
[self setStyling:styling];

Expand Down Expand Up @@ -1257,6 +1261,13 @@ - (void)jwplayer:(id<JWPlayer>)player playbackRateChangedTo:(double)rate at:(NST
}
}

- (void)jwplayer:(id<JWPlayer>)player updatedCues:(NSArray<JWCue *> * _Nonnull)cues
{
if (_playerViewController) {
[_playerViewController jwplayer:player updatedCues:cues];
}
}

#pragma mark - JWPlayer Ad Delegate

- (void)jwplayer:(id _Nonnull)player adEvent:(JWAdEvent * _Nonnull)event {
Expand Down
81 changes: 7 additions & 74 deletions ios/RNJWPlayer/RNJWPlayerViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -243,65 +243,41 @@ - (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPict

- (void)jwplayerContentIsBuffering:(id<JWPlayer>)player
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayerContentIsBuffering:player];
// }

if (_parentView.onBuffer) {
_parentView.onBuffer(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player isBufferingWithReason:(enum JWBufferReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player isBufferingWithReason:reason];
// }

if (_parentView.onBuffer) {
_parentView.onBuffer(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player updatedBuffer:(double)percent position:(JWTimeData *)time
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player updatedBuffer:percent position:time];
// }

if (_parentView.onUpdateBuffer) {
_parentView.onUpdateBuffer(@{@"percent": @(percent), @"position": time});
}
}

- (void)jwplayer:(id<JWPlayer>)player didFinishLoadingWithTime:(NSTimeInterval)loadTime
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player didFinishLoadingWithTime:loadTime];
// }

if (_parentView.onLoaded) {
_parentView.onLoaded(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player isAttemptingToPlay:(JWPlayerItem *)playlistItem reason:(enum JWPlayReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player isAttemptingToPlay:playlistItem reason:reason];
// }

if (_parentView.onAttemptPlay) {
_parentView.onAttemptPlay(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player isPlayingWithReason:(enum JWPlayReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player isPlayingWithReason:reason];
// }

if (_parentView.onPlay) {
_parentView.onPlay(@{});
}
Expand All @@ -312,21 +288,13 @@ - (void)jwplayer:(id<JWPlayer>)player isPlayingWithReason:(enum JWPlayReason)rea

- (void)jwplayer:(id<JWPlayer>)player willPlayWithReason:(enum JWPlayReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player willPlayWithReason:reason];
// }

if (_parentView.onBeforePlay) {
_parentView.onBeforePlay(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player didPauseWithReason:(enum JWPauseReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player didPauseWithReason:reason];
// }

if (_parentView.onPause) {
_parentView.onPause(@{});
}
Expand All @@ -338,54 +306,34 @@ - (void)jwplayer:(id<JWPlayer>)player didPauseWithReason:(enum JWPauseReason)rea

- (void)jwplayer:(id<JWPlayer>)player didBecomeIdleWithReason:(enum JWIdleReason)reason
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player didBecomeIdleWithReason:reason];
// }

if (_parentView.onIdle) {
_parentView.onIdle(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player isVisible:(BOOL)isVisible
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player isVisible:isVisible];
// }

if (_parentView.onVisible) {
_parentView.onVisible(@{@"visible": @(isVisible)});
}
}

- (void)jwplayerContentWillComplete:(id<JWPlayer>)player
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayerContentWillComplete:player];
// }

if (_parentView.onBeforeComplete) {
_parentView.onBeforeComplete(@{});
}
}

- (void)jwplayerContentDidComplete:(id<JWPlayer>)player
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayerContentDidComplete:player];
// }

if (_parentView.onComplete) {
_parentView.onComplete(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player didLoadPlaylistItem:(JWPlayerItem *)item at:(NSUInteger)index
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player didLoadPlaylistItem:item at:index];
// }

if (_parentView.onPlaylistItem) {
NSMutableDictionary* sourceDict = [[NSMutableDictionary alloc] init];
for (JWVideoSource* source in item.videoSources) {
Expand Down Expand Up @@ -432,10 +380,6 @@ - (void)jwplayer:(id<JWPlayer>)player didLoadPlaylistItem:(JWPlayerItem *)item a

- (void)jwplayer:(id<JWPlayer>)player didLoadPlaylist:(NSArray<JWPlayerItem *> *)playlist
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player didLoadPlaylist:playlist];
// }

if (_parentView.onPlaylist) {
NSMutableArray* playlistArray = [[NSMutableArray alloc] init];

Expand Down Expand Up @@ -486,49 +430,38 @@ - (void)jwplayer:(id<JWPlayer>)player didLoadPlaylist:(NSArray<JWPlayerItem *> *

- (void)jwplayerPlaylistHasCompleted:(id<JWPlayer>)player
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayerPlaylistHasCompleted:player];
// }

if (_parentView.onPlaylistComplete) {
_parentView.onPlaylistComplete(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player usesMediaType:(enum JWMediaType)type
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player usesMediaType:type];
// }

}

- (void)jwplayer:(id<JWPlayer>)player seekedFrom:(NSTimeInterval)oldPosition to:(NSTimeInterval)newPosition
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player seekedFrom:oldPosition to:newPosition];
// }

if (_parentView.onSeek) {
_parentView.onSeek(@{@"from": @(oldPosition), @"to": @(newPosition)});
}
}

- (void)jwplayerHasSeeked:(id<JWPlayer>)player
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayerHasSeeked:player];
// }

if (_parentView.onSeeked) {
_parentView.onSeeked(@{});
}
}

- (void)jwplayer:(id<JWPlayer>)player playbackRateChangedTo:(double)rate at:(NSTimeInterval)time
{
// if (_parentView.playerViewController) {
// [_parentView.playerViewController jwplayer:player playbackRateChangedTo:rate at:time];
// }

}

- (void)jwplayer:(id<JWPlayer>)player updatedCues:(NSArray<JWCue *> * _Nonnull)cues
{

}

#pragma mark - JWPlayer Ad Delegate
Expand Down
15 changes: 15 additions & 0 deletions ios/RNJWPlayer/RNJWPlayerViewManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -491,4 +491,19 @@ - (UIView*)view
}];
}

RCT_EXPORT_METHOD(setCurrentCaptions: (nonnull NSNumber *)reactTag: (nonnull NSNumber *)index) {
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNJWPlayerView *> *viewRegistry) {
RNJWPlayerView *view = viewRegistry[reactTag];
if (![view isKindOfClass:[RNJWPlayerView class]] || (view.playerView == nil && view.playerViewController == nil)) {
RCTLogError(@"Invalid view returned from registry, expecting RNJWPlayerView, got: %@", view);
} else {
if (view.playerView) {
[view.playerView.player setCurrentCaptionsTrack:[index integerValue] + 1];
} else if (view.playerViewController) {
[view.playerViewController.player setCurrentCaptionsTrack:[index integerValue] + 1];
}
}
}];
}

@end
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-jw-media-player",
"version": "0.2.10",
"version": "0.2.11",
"description": "React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)",
"main": "index.js",
"types": "./index.d.ts",
Expand Down

0 comments on commit da1b66f

Please sign in to comment.