Merge pull request #1723 from blitzcrank/master
Added support for automaticallyWaitsToMinimizeStalling property on iOS
This commit is contained in:
		| @@ -1,5 +1,8 @@ | |||||||
| ## Changelog | ## Changelog | ||||||
|  |  | ||||||
|  | ### next | ||||||
|  | * Added support for automaticallyWaitsToMinimizeStalling property (iOS) [#1723](https://github.com/react-native-community/react-native-video/pull/1723) | ||||||
|  |  | ||||||
| ### Version 5.0.2 | ### Version 5.0.2 | ||||||
| * Fix crash when RCTVideo's superclass doesn't observe the keyPath 'frame' (iOS) [#1720](https://github.com/react-native-community/react-native-video/pull/1720) | * Fix crash when RCTVideo's superclass doesn't observe the keyPath 'frame' (iOS) [#1720](https://github.com/react-native-community/react-native-video/pull/1720) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -292,6 +292,7 @@ var styles = StyleSheet.create({ | |||||||
| ### Configurable props | ### Configurable props | ||||||
| * [allowsExternalPlayback](#allowsexternalplayback) | * [allowsExternalPlayback](#allowsexternalplayback) | ||||||
| * [audioOnly](#audioonly) | * [audioOnly](#audioonly) | ||||||
|  | * [automaticallyWaitsToMinimizeStalling](#automaticallyWaitsToMinimizeStalling) | ||||||
| * [bufferConfig](#bufferconfig) | * [bufferConfig](#bufferconfig) | ||||||
| * [controls](#controls) | * [controls](#controls) | ||||||
| * [filter](#filter) | * [filter](#filter) | ||||||
| @@ -370,6 +371,13 @@ For this to work, the poster prop must be set. | |||||||
|  |  | ||||||
| Platforms: all | Platforms: all | ||||||
|  |  | ||||||
|  | #### automaticallyWaitsToMinimizeStalling | ||||||
|  | A Boolean value that indicates whether the player should automatically delay playback in order to minimize stalling. For clients linked against iOS 10.0 and later | ||||||
|  | * **false** - Immediately starts playback | ||||||
|  | * **true (default)** - Delays playback in order to minimize stalling | ||||||
|  |  | ||||||
|  | Platforms: iOS | ||||||
|  |  | ||||||
| #### bufferConfig | #### bufferConfig | ||||||
| Adjust the buffer settings. This prop takes an object with one or more of the properties listed below. | Adjust the buffer settings. This prop takes an object with one or more of the properties listed below. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								Video.js
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Video.js
									
									
									
									
									
								
							| @@ -382,6 +382,7 @@ Video.propTypes = { | |||||||
|   poster: PropTypes.string, |   poster: PropTypes.string, | ||||||
|   posterResizeMode: Image.propTypes.resizeMode, |   posterResizeMode: Image.propTypes.resizeMode, | ||||||
|   repeat: PropTypes.bool, |   repeat: PropTypes.bool, | ||||||
|  |   automaticallyWaitsToMinimizeStalling: PropTypes.bool, | ||||||
|   allowsExternalPlayback: PropTypes.bool, |   allowsExternalPlayback: PropTypes.bool, | ||||||
|   selectedAudioTrack: PropTypes.shape({ |   selectedAudioTrack: PropTypes.shape({ | ||||||
|     type: PropTypes.string.isRequired, |     type: PropTypes.string.isRequired, | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ static int const RCTVideoUnset = -1; | |||||||
|   float _rate; |   float _rate; | ||||||
|   float _maxBitRate; |   float _maxBitRate; | ||||||
|  |  | ||||||
|  |   BOOL _automaticallyWaitsToMinimizeStalling; | ||||||
|   BOOL _muted; |   BOOL _muted; | ||||||
|   BOOL _paused; |   BOOL _paused; | ||||||
|   BOOL _repeat; |   BOOL _repeat; | ||||||
| @@ -87,7 +88,7 @@ static int const RCTVideoUnset = -1; | |||||||
| { | { | ||||||
|   if ((self = [super init])) { |   if ((self = [super init])) { | ||||||
|     _eventDispatcher = eventDispatcher; |     _eventDispatcher = eventDispatcher; | ||||||
|      | 	  _automaticallyWaitsToMinimizeStalling = YES; | ||||||
|     _playbackRateObserverRegistered = NO; |     _playbackRateObserverRegistered = NO; | ||||||
|     _isExternalPlaybackActiveObserverRegistered = NO; |     _isExternalPlaybackActiveObserverRegistered = NO; | ||||||
|     _playbackStalled = NO; |     _playbackStalled = NO; | ||||||
| @@ -376,6 +377,9 @@ static int const RCTVideoUnset = -1; | |||||||
|       _isExternalPlaybackActiveObserverRegistered = YES; |       _isExternalPlaybackActiveObserverRegistered = YES; | ||||||
|          |          | ||||||
|       [self addPlayerTimeObserver]; |       [self addPlayerTimeObserver]; | ||||||
|  |       if (@available(iOS 10.0, *)) { | ||||||
|  |         [self setAutomaticallyWaitsToMinimizeStalling:_automaticallyWaitsToMinimizeStalling]; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       //Perform on next run loop, otherwise onVideoLoadStart is nil |       //Perform on next run loop, otherwise onVideoLoadStart is nil | ||||||
|       if (self.onVideoLoadStart) { |       if (self.onVideoLoadStart) { | ||||||
| @@ -864,7 +868,13 @@ static int const RCTVideoUnset = -1; | |||||||
|     } else if([_ignoreSilentSwitch isEqualToString:@"obey"]) { |     } else if([_ignoreSilentSwitch isEqualToString:@"obey"]) { | ||||||
|       [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; |       [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; | ||||||
|     } |     } | ||||||
|     [_player play]; |      | ||||||
|  | 	if (@available(iOS 10.0, *) && !_automaticallyWaitsToMinimizeStalling) { | ||||||
|  | 		[_player playImmediatelyAtRate:1.0]; | ||||||
|  | 	} else { | ||||||
|  | 		[_player play]; | ||||||
|  | 		[_player setRate:_rate]; | ||||||
|  | 	} | ||||||
|     [_player setRate:_rate]; |     [_player setRate:_rate]; | ||||||
|   } |   } | ||||||
|    |    | ||||||
| @@ -951,6 +961,12 @@ static int const RCTVideoUnset = -1; | |||||||
|   _playerItem.preferredPeakBitRate = maxBitRate; |   _playerItem.preferredPeakBitRate = maxBitRate; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | - (void)setAutomaticallyWaitsToMinimizeStalling:(BOOL)waits | ||||||
|  | { | ||||||
|  | 	_automaticallyWaitsToMinimizeStalling = waits; | ||||||
|  | 	_player.automaticallyWaitsToMinimizeStalling = waits; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| - (void)applyModifiers | - (void)applyModifiers | ||||||
| { | { | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary); | |||||||
| RCT_EXPORT_VIEW_PROPERTY(maxBitRate, float); | RCT_EXPORT_VIEW_PROPERTY(maxBitRate, float); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSString); | RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSString); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(repeat, BOOL); | RCT_EXPORT_VIEW_PROPERTY(repeat, BOOL); | ||||||
|  | RCT_EXPORT_VIEW_PROPERTY(automaticallyWaitsToMinimizeStalling, BOOL); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(allowsExternalPlayback, BOOL); | RCT_EXPORT_VIEW_PROPERTY(allowsExternalPlayback, BOOL); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(textTracks, NSArray); | RCT_EXPORT_VIEW_PROPERTY(textTracks, NSArray); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(selectedTextTrack, NSDictionary); | RCT_EXPORT_VIEW_PROPERTY(selectedTextTrack, NSDictionary); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user