feat: add onVolumeChange
event (#3322)
* feat: implement `onVolumeChange` event
This commit is contained in:
@@ -19,6 +19,7 @@ protocol RCTPlayerObserverHandler: RCTPlayerObserverHandlerObjc {
|
||||
func handlePlaybackBufferKeyEmpty(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<Bool>)
|
||||
func handlePlaybackLikelyToKeepUp(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<Bool>)
|
||||
func handlePlaybackRateChange(player: AVPlayer, change: NSKeyValueObservedChange<Float>)
|
||||
func handleVolumeChange(player: AVPlayer, change: NSKeyValueObservedChange<Float>)
|
||||
func handleExternalPlaybackActiveChange(player: AVPlayer, change: NSKeyValueObservedChange<Bool>)
|
||||
func handleViewControllerOverlayViewFrameChange(overlayView:UIView, change:NSKeyValueObservedChange<CGRect>)
|
||||
}
|
||||
@@ -74,6 +75,7 @@ class RCTPlayerObserver: NSObject {
|
||||
private var _timeObserver:Any?
|
||||
|
||||
private var _playerRateChangeObserver:NSKeyValueObservation?
|
||||
private var _playerVolumeChangeObserver:NSKeyValueObservation?
|
||||
private var _playerExternalPlaybackActiveObserver:NSKeyValueObservation?
|
||||
private var _playerItemStatusObserver:NSKeyValueObservation?
|
||||
private var _playerPlaybackBufferEmptyObserver:NSKeyValueObservation?
|
||||
@@ -95,6 +97,7 @@ class RCTPlayerObserver: NSObject {
|
||||
}
|
||||
|
||||
_playerRateChangeObserver = player.observe(\.rate, options: [.old], changeHandler: _handlers.handlePlaybackRateChange)
|
||||
_playerVolumeChangeObserver = player.observe(\.volume, options: [.old] ,changeHandler: _handlers.handleVolumeChange)
|
||||
_playerExternalPlaybackActiveObserver = player.observe(\.isExternalPlaybackActive, changeHandler: _handlers.handleExternalPlaybackActiveChange)
|
||||
}
|
||||
|
||||
|
@@ -107,6 +107,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
@objc var onPlaybackStalled: RCTDirectEventBlock?
|
||||
@objc var onPlaybackResume: RCTDirectEventBlock?
|
||||
@objc var onPlaybackRateChange: RCTDirectEventBlock?
|
||||
@objc var onVolumeChange: RCTDirectEventBlock?
|
||||
@objc var onVideoPlaybackStateChanged: RCTDirectEventBlock?
|
||||
@objc var onVideoExternalPlaybackChange: RCTDirectEventBlock?
|
||||
@objc var onPictureInPictureStatusChanged: RCTDirectEventBlock?
|
||||
@@ -1237,6 +1238,17 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
_playbackStalled = false
|
||||
}
|
||||
}
|
||||
|
||||
func handleVolumeChange(player: AVPlayer, change: NSKeyValueObservedChange<Float>) {
|
||||
guard let _player = _player else { return }
|
||||
|
||||
if(player.rate == change.oldValue && change.oldValue != nil) {
|
||||
return
|
||||
}
|
||||
|
||||
onVolumeChange?(["volume": NSNumber(value: _player.volume),
|
||||
"target": reactTag as Any])
|
||||
}
|
||||
|
||||
func handleExternalPlaybackActiveChange(player: AVPlayer, change: NSKeyValueObservedChange<Bool>) {
|
||||
guard let _player = _player else { return }
|
||||
|
@@ -57,6 +57,7 @@ RCT_EXPORT_VIEW_PROPERTY(onReadyForDisplay, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onPlaybackStalled, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onPlaybackResume, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onPlaybackRateChange, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onVolumeChange, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onVideoPlaybackStateChanged, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onVideoExternalPlaybackChange, RCTDirectEventBlock);
|
||||
RCT_EXPORT_VIEW_PROPERTY(onGetLicense, RCTDirectEventBlock);
|
||||
|
Reference in New Issue
Block a user