Fixes bug making it impossible to pause video from controls.
This commit is contained in:
		
							
								
								
									
										10
									
								
								RCTVideo.m
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								RCTVideo.m
									
									
									
									
									
								
							| @@ -6,12 +6,14 @@ | |||||||
|  |  | ||||||
| static NSString *const statusKeyPath = @"status"; | static NSString *const statusKeyPath = @"status"; | ||||||
| static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp"; | static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp"; | ||||||
|  | static NSString *const playbackBufferEmptyKeyPath = @"playbackBufferEmpty"; | ||||||
|  |  | ||||||
| @implementation RCTVideo | @implementation RCTVideo | ||||||
| { | { | ||||||
|   AVPlayer *_player; |   AVPlayer *_player; | ||||||
|   AVPlayerItem *_playerItem; |   AVPlayerItem *_playerItem; | ||||||
|   BOOL _playerItemObserversSet; |   BOOL _playerItemObserversSet; | ||||||
|  |   BOOL _playerBufferEmpty; | ||||||
|   AVPlayerLayer *_playerLayer; |   AVPlayerLayer *_playerLayer; | ||||||
|   AVPlayerViewController *_playerViewController; |   AVPlayerViewController *_playerViewController; | ||||||
|   NSURL *_videoURL; |   NSURL *_videoURL; | ||||||
| @@ -50,6 +52,7 @@ static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp" | |||||||
|     _lastSeekTime = 0.0f; |     _lastSeekTime = 0.0f; | ||||||
|     _progressUpdateInterval = 250; |     _progressUpdateInterval = 250; | ||||||
|     _controls = NO; |     _controls = NO; | ||||||
|  |     _playerBufferEmpty = YES; | ||||||
|  |  | ||||||
|     [[NSNotificationCenter defaultCenter] addObserver:self |     [[NSNotificationCenter defaultCenter] addObserver:self | ||||||
|                                              selector:@selector(applicationWillResignActive:) |                                              selector:@selector(applicationWillResignActive:) | ||||||
| @@ -178,6 +181,7 @@ static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp" | |||||||
| - (void)addPlayerItemObservers | - (void)addPlayerItemObservers | ||||||
| { | { | ||||||
|   [_playerItem addObserver:self forKeyPath:statusKeyPath options:0 context:nil]; |   [_playerItem addObserver:self forKeyPath:statusKeyPath options:0 context:nil]; | ||||||
|  |   [_playerItem addObserver:self forKeyPath:playbackBufferEmptyKeyPath options:0 context:nil]; | ||||||
|   [_playerItem addObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath options:0 context:nil]; |   [_playerItem addObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath options:0 context:nil]; | ||||||
|   _playerItemObserversSet = YES; |   _playerItemObserversSet = YES; | ||||||
| } | } | ||||||
| @@ -189,6 +193,7 @@ static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp" | |||||||
| { | { | ||||||
|   if (_playerItemObserversSet) { |   if (_playerItemObserversSet) { | ||||||
|     [_playerItem removeObserver:self forKeyPath:statusKeyPath]; |     [_playerItem removeObserver:self forKeyPath:statusKeyPath]; | ||||||
|  |     [_playerItem removeObserver:self forKeyPath:playbackBufferEmptyKeyPath]; | ||||||
|     [_playerItem removeObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath]; |     [_playerItem removeObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath]; | ||||||
|     _playerItemObserversSet = NO; |     _playerItemObserversSet = NO; | ||||||
|   } |   } | ||||||
| @@ -279,11 +284,14 @@ static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp" | |||||||
|                                                        @"domain": _playerItem.error.domain}, |                                                        @"domain": _playerItem.error.domain}, | ||||||
|                                                    @"target": self.reactTag}]; |                                                    @"target": self.reactTag}]; | ||||||
|       } |       } | ||||||
|  |     } else if ([keyPath isEqualToString:playbackBufferEmptyKeyPath]) { | ||||||
|  |       _playerBufferEmpty = YES; | ||||||
|     } else if ([keyPath isEqualToString:playbackLikelyToKeepUpKeyPath]) { |     } else if ([keyPath isEqualToString:playbackLikelyToKeepUpKeyPath]) { | ||||||
|       // Continue playing (or not if paused) after being paused due to hitting an unbuffered zone. |       // Continue playing (or not if paused) after being paused due to hitting an unbuffered zone. | ||||||
|       if (_playerItem.playbackLikelyToKeepUp) { |       if ((!_controls || _playerBufferEmpty) && _playerItem.playbackLikelyToKeepUp) { | ||||||
|         [self setPaused:_paused]; |         [self setPaused:_paused]; | ||||||
|       } |       } | ||||||
|  |       _playerBufferEmpty = NO; | ||||||
|     } |     } | ||||||
|   } else { |   } else { | ||||||
|       [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; |       [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user