diff --git a/node_modules/react-native-video/ios/Video/Features/RCTPlayerObserver.swift b/node_modules/react-native-video/ios/Video/Features/RCTPlayerObserver.swift index 4f88b23..4c19dc6 100644 --- a/node_modules/react-native-video/ios/Video/Features/RCTPlayerObserver.swift +++ b/node_modules/react-native-video/ios/Video/Features/RCTPlayerObserver.swift @@ -20,6 +20,7 @@ protocol RCTPlayerObserverHandler: RCTPlayerObserverHandlerObjc { func handleTimeMetadataChange(timedMetadata: [AVMetadataItem]) func handlePlayerItemStatusChange(playerItem: AVPlayerItem, change: NSKeyValueObservedChange) func handlePlaybackBufferKeyEmpty(playerItem: AVPlayerItem, change: NSKeyValueObservedChange) + func handlePlaybackBufferFull(playerItem: AVPlayerItem, change: NSKeyValueObservedChange) func handlePlaybackLikelyToKeepUp(playerItem: AVPlayerItem, change: NSKeyValueObservedChange) func handlePlaybackRateChange(player: AVPlayer, change: NSKeyValueObservedChange) func handleTimeControlStatusChange(player: AVPlayer, change: NSKeyValueObservedChange) @@ -104,6 +105,7 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate, AVPla private var _playerExternalPlaybackActiveObserver: NSKeyValueObservation? private var _playerItemStatusObserver: NSKeyValueObservation? private var _playerPlaybackBufferEmptyObserver: NSKeyValueObservation? + private var _playerPlaybackBufferFullObserver: NSKeyValueObservation? private var _playerPlaybackLikelyToKeepUpObserver: NSKeyValueObservation? private var _playerTimedMetadataObserver: NSKeyValueObservation? private var _playerViewControllerReadyForDisplayObserver: NSKeyValueObservation? @@ -162,6 +164,11 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate, AVPla options: [.new, .old], changeHandler: _handlers.handlePlaybackBufferKeyEmpty ) + _playerPlaybackBufferFullObserver = playerItem.observe( + \.isPlaybackBufferFull, + options: [.new, .old], + changeHandler: _handlers.handlePlaybackBufferFull + ) _playerPlaybackLikelyToKeepUpObserver = playerItem.observe( \.isPlaybackLikelyToKeepUp, options: [.new, .old], @@ -179,6 +186,7 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate, AVPla func removePlayerItemObservers() { _playerItemStatusObserver?.invalidate() _playerPlaybackBufferEmptyObserver?.invalidate() + _playerPlaybackBufferFullObserver?.invalidate() _playerPlaybackLikelyToKeepUpObserver?.invalidate() _playerTimedMetadataObserver?.invalidate() _playerTracksObserver?.invalidate() diff --git a/node_modules/react-native-video/ios/Video/RCTVideo.swift b/node_modules/react-native-video/ios/Video/RCTVideo.swift index 486524d..03b7b31 100644 --- a/node_modules/react-native-video/ios/Video/RCTVideo.swift +++ b/node_modules/react-native-video/ios/Video/RCTVideo.swift @@ -1448,6 +1448,13 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } } + func handlePlaybackBufferFull(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange) { + if _isBuffering { + _isBuffering = false + } + } + + // Continue playing (or not if paused) after being paused due to hitting an unbuffered zone. func handlePlaybackLikelyToKeepUp(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange) { if _isBuffering {