Loading ios/RCTVideo.m +26 −4 Changes for ios/RCTVideo.m: 26 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ static NSString *const playbackRate = @"rate"; CMTime currentTime = _player.currentTime; const Float64 duration = CMTimeGetSeconds(playerDuration); const Float64 currentTimeSecs = CMTimeGetSeconds(currentTime); if( currentTimeSecs >= 0) { if( currentTimeSecs >= 0 && self.onVideoProgress) { self.onVideoProgress(@{ @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(currentTime)], @"playableDuration": [self calculatePlayableDuration], Loading Loading @@ -277,12 +277,15 @@ static NSString *const playbackRate = @"rate"; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //Perform on next run loop, otherwise onVideoLoadStart is nil if(self.onVideoLoadStart) { self.onVideoLoadStart(@{@"src": @{ @"uri": [source objectForKey:@"uri"], @"type": [source objectForKey:@"type"], @"isNetwork": [NSNumber numberWithBool:(bool)[source objectForKey:@"isNetwork"]]}, @"target": self.reactTag }); } }); } Loading Loading @@ -342,6 +345,7 @@ static NSString *const playbackRate = @"rate"; orientation = @"portrait"; } if(self.onVideoLoad) { self.onVideoLoad(@{@"duration": [NSNumber numberWithFloat:duration], @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(_playerItem.currentTime)], @"canPlayReverse": [NSNumber numberWithBool:_playerItem.canPlayReverse], Loading @@ -356,10 +360,12 @@ static NSString *const playbackRate = @"rate"; @"orientation": orientation }, @"target": self.reactTag}); } [self attachListeners]; [self applyModifiers]; } else if(_playerItem.status == AVPlayerItemStatusFailed) { } else if(_playerItem.status == AVPlayerItemStatusFailed && self.onVideoError) { self.onVideoError(@{@"error": @{@"code": [NSNumber numberWithInteger: _playerItem.error.code], @"domain": _playerItem.error.domain}, @"target": self.reactTag}); Loading @@ -377,17 +383,21 @@ static NSString *const playbackRate = @"rate"; } } else if (object == _playerLayer) { if([keyPath isEqualToString:readyForDisplayKeyPath] && [change objectForKey:NSKeyValueChangeNewKey]) { if([change objectForKey:NSKeyValueChangeNewKey]) { if([change objectForKey:NSKeyValueChangeNewKey] && self.onReadyForDisplay) { self.onReadyForDisplay(@{@"target": self.reactTag}); } } } else if (object == _player) { if([keyPath isEqualToString:playbackRate]) { if(self.onPlaybackRateChange) { self.onPlaybackRateChange(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate], @"target": self.reactTag}); } if(_playbackStalled && _player.rate > 0) { if(self.onPlaybackResume) { self.onPlaybackResume(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate], @"target": self.reactTag}); } _playbackStalled = NO; } } Loading @@ -411,13 +421,17 @@ static NSString *const playbackRate = @"rate"; - (void)playbackStalled:(NSNotification *)notification { if(self.onPlaybackStalled) { self.onPlaybackStalled(@{@"target": self.reactTag}); } _playbackStalled = YES; } - (void)playerItemDidReachEnd:(NSNotification *)notification { if(self.onVideoEnd) { self.onVideoEnd(@{@"target": self.reactTag}); } if (_repeat) { AVPlayerItem *item = [notification object]; Loading Loading @@ -489,9 +503,11 @@ static NSString *const playbackRate = @"rate"; if (CMTimeCompare(current, cmSeekTime) != 0) { [_player seekToTime:cmSeekTime toleranceBefore:tolerance toleranceAfter:tolerance completionHandler:^(BOOL finished) { if(self.onVideoSeek) { self.onVideoSeek(@{@"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(item.currentTime)], @"seekTime": [NSNumber numberWithFloat:seekTime], @"target": self.reactTag}); } }]; _pendingSeek = false; Loading Loading @@ -573,11 +589,15 @@ static NSString *const playbackRate = @"rate"; if( viewController ) { _presentingViewController = viewController; if(self.onVideoFullscreenPlayerWillPresent) { self.onVideoFullscreenPlayerWillPresent(@{@"target": self.reactTag}); } [viewController presentViewController:_playerViewController animated:true completion:^{ _playerViewController.showsPlaybackControls = YES; _fullscreenPlayerPresented = fullscreen; if(self.onVideoFullscreenPlayerDidPresent) { self.onVideoFullscreenPlayerDidPresent(@{@"target": self.reactTag}); } }]; } } Loading Loading @@ -655,7 +675,7 @@ static NSString *const playbackRate = @"rate"; - (void)videoPlayerViewControllerWillDismiss:(AVPlayerViewController *)playerViewController { if (_playerViewController == playerViewController && _fullscreenPlayerPresented) if (_playerViewController == playerViewController && _fullscreenPlayerPresented && self.onVideoFullscreenPlayerWillDismiss) { self.onVideoFullscreenPlayerWillDismiss(@{@"target": self.reactTag}); } Loading @@ -668,9 +688,11 @@ static NSString *const playbackRate = @"rate"; _fullscreenPlayerPresented = false; _presentingViewController = nil; [self applyModifiers]; if(self.onVideoFullscreenPlayerDidDismiss) { self.onVideoFullscreenPlayerDidDismiss(@{@"target": self.reactTag}); } } } #pragma mark - React View Management Loading Loading
ios/RCTVideo.m +26 −4 Changes for ios/RCTVideo.m: 26 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ static NSString *const playbackRate = @"rate"; CMTime currentTime = _player.currentTime; const Float64 duration = CMTimeGetSeconds(playerDuration); const Float64 currentTimeSecs = CMTimeGetSeconds(currentTime); if( currentTimeSecs >= 0) { if( currentTimeSecs >= 0 && self.onVideoProgress) { self.onVideoProgress(@{ @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(currentTime)], @"playableDuration": [self calculatePlayableDuration], Loading Loading @@ -277,12 +277,15 @@ static NSString *const playbackRate = @"rate"; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //Perform on next run loop, otherwise onVideoLoadStart is nil if(self.onVideoLoadStart) { self.onVideoLoadStart(@{@"src": @{ @"uri": [source objectForKey:@"uri"], @"type": [source objectForKey:@"type"], @"isNetwork": [NSNumber numberWithBool:(bool)[source objectForKey:@"isNetwork"]]}, @"target": self.reactTag }); } }); } Loading Loading @@ -342,6 +345,7 @@ static NSString *const playbackRate = @"rate"; orientation = @"portrait"; } if(self.onVideoLoad) { self.onVideoLoad(@{@"duration": [NSNumber numberWithFloat:duration], @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(_playerItem.currentTime)], @"canPlayReverse": [NSNumber numberWithBool:_playerItem.canPlayReverse], Loading @@ -356,10 +360,12 @@ static NSString *const playbackRate = @"rate"; @"orientation": orientation }, @"target": self.reactTag}); } [self attachListeners]; [self applyModifiers]; } else if(_playerItem.status == AVPlayerItemStatusFailed) { } else if(_playerItem.status == AVPlayerItemStatusFailed && self.onVideoError) { self.onVideoError(@{@"error": @{@"code": [NSNumber numberWithInteger: _playerItem.error.code], @"domain": _playerItem.error.domain}, @"target": self.reactTag}); Loading @@ -377,17 +383,21 @@ static NSString *const playbackRate = @"rate"; } } else if (object == _playerLayer) { if([keyPath isEqualToString:readyForDisplayKeyPath] && [change objectForKey:NSKeyValueChangeNewKey]) { if([change objectForKey:NSKeyValueChangeNewKey]) { if([change objectForKey:NSKeyValueChangeNewKey] && self.onReadyForDisplay) { self.onReadyForDisplay(@{@"target": self.reactTag}); } } } else if (object == _player) { if([keyPath isEqualToString:playbackRate]) { if(self.onPlaybackRateChange) { self.onPlaybackRateChange(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate], @"target": self.reactTag}); } if(_playbackStalled && _player.rate > 0) { if(self.onPlaybackResume) { self.onPlaybackResume(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate], @"target": self.reactTag}); } _playbackStalled = NO; } } Loading @@ -411,13 +421,17 @@ static NSString *const playbackRate = @"rate"; - (void)playbackStalled:(NSNotification *)notification { if(self.onPlaybackStalled) { self.onPlaybackStalled(@{@"target": self.reactTag}); } _playbackStalled = YES; } - (void)playerItemDidReachEnd:(NSNotification *)notification { if(self.onVideoEnd) { self.onVideoEnd(@{@"target": self.reactTag}); } if (_repeat) { AVPlayerItem *item = [notification object]; Loading Loading @@ -489,9 +503,11 @@ static NSString *const playbackRate = @"rate"; if (CMTimeCompare(current, cmSeekTime) != 0) { [_player seekToTime:cmSeekTime toleranceBefore:tolerance toleranceAfter:tolerance completionHandler:^(BOOL finished) { if(self.onVideoSeek) { self.onVideoSeek(@{@"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(item.currentTime)], @"seekTime": [NSNumber numberWithFloat:seekTime], @"target": self.reactTag}); } }]; _pendingSeek = false; Loading Loading @@ -573,11 +589,15 @@ static NSString *const playbackRate = @"rate"; if( viewController ) { _presentingViewController = viewController; if(self.onVideoFullscreenPlayerWillPresent) { self.onVideoFullscreenPlayerWillPresent(@{@"target": self.reactTag}); } [viewController presentViewController:_playerViewController animated:true completion:^{ _playerViewController.showsPlaybackControls = YES; _fullscreenPlayerPresented = fullscreen; if(self.onVideoFullscreenPlayerDidPresent) { self.onVideoFullscreenPlayerDidPresent(@{@"target": self.reactTag}); } }]; } } Loading Loading @@ -655,7 +675,7 @@ static NSString *const playbackRate = @"rate"; - (void)videoPlayerViewControllerWillDismiss:(AVPlayerViewController *)playerViewController { if (_playerViewController == playerViewController && _fullscreenPlayerPresented) if (_playerViewController == playerViewController && _fullscreenPlayerPresented && self.onVideoFullscreenPlayerWillDismiss) { self.onVideoFullscreenPlayerWillDismiss(@{@"target": self.reactTag}); } Loading @@ -668,9 +688,11 @@ static NSString *const playbackRate = @"rate"; _fullscreenPlayerPresented = false; _presentingViewController = nil; [self applyModifiers]; if(self.onVideoFullscreenPlayerDidDismiss) { self.onVideoFullscreenPlayerDidDismiss(@{@"target": self.reactTag}); } } } #pragma mark - React View Management Loading