fix(ios): ensure playback stopped in background (#3587)

* feat!: move require source to `uri`

* pass other source properties

* chore: update basic example

* chore: restore backward compatibility

* docs: update source via require

* fix types

* make docs build workflow pretty

* doc: keep previous doc and add more info

* fix: do not pause playback in handlePlaybackLikelyToKeepUp

and review onBuffer event (not yet clean)

---------

Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com>
This commit is contained in:
Olivier Bouillet 2024-03-15 12:02:17 +01:00 committed by GitHub
parent 429fddf3b0
commit 41c6785ee8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -13,7 +13,6 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
private var _player: AVPlayer? private var _player: AVPlayer?
private var _playerItem: AVPlayerItem? private var _playerItem: AVPlayerItem?
private var _source: VideoSource? private var _source: VideoSource?
private var _playerBufferEmpty = true
private var _playerLayer: AVPlayerLayer? private var _playerLayer: AVPlayerLayer?
private var _chapters: [Chapter]? private var _chapters: [Chapter]?
@ -1165,6 +1164,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
} }
func handleReadyForDisplay(changeObject _: Any, change _: NSKeyValueObservedChange<Bool>) { func handleReadyForDisplay(changeObject _: Any, change _: NSKeyValueObservedChange<Bool>) {
onVideoBuffer?(["isBuffering": false, "target": reactTag as Any])
onReadyForDisplay?([ onReadyForDisplay?([
"target": reactTag, "target": reactTag,
]) ])
@ -1295,16 +1295,11 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
} }
func handlePlaybackBufferKeyEmpty(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<Bool>) { func handlePlaybackBufferKeyEmpty(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<Bool>) {
_playerBufferEmpty = true
onVideoBuffer?(["isBuffering": true, "target": reactTag as Any]) onVideoBuffer?(["isBuffering": true, "target": reactTag as Any])
} }
// 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.
func handlePlaybackLikelyToKeepUp(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<Bool>) { func handlePlaybackLikelyToKeepUp(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<Bool>) {
if (!(_controls || _fullscreenPlayerPresented) || _playerBufferEmpty) && ((_playerItem?.isPlaybackLikelyToKeepUp) == true) {
setPaused(_paused)
}
_playerBufferEmpty = false
onVideoBuffer?(["isBuffering": false, "target": reactTag as Any]) onVideoBuffer?(["isBuffering": false, "target": reactTag as Any])
} }
@ -1422,7 +1417,6 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
} }
) )
} else { } else {
self.setPaused(true)
_playerObserver.removePlayerTimeObserver() _playerObserver.removePlayerTimeObserver()
} }
} }