Fixes bug making it impossible to pause video from controls.
This commit is contained in:
parent
6f08e68b8e
commit
5a96daac51
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];
|
||||||
|
Loading…
Reference in New Issue
Block a user