Add onSeekComplete callaback to ios video player
This commit is contained in:
		| @@ -114,6 +114,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH | |||||||
|     @objc var onVideoProgress: RCTDirectEventBlock? |     @objc var onVideoProgress: RCTDirectEventBlock? | ||||||
|     @objc var onVideoBandwidthUpdate: RCTDirectEventBlock? |     @objc var onVideoBandwidthUpdate: RCTDirectEventBlock? | ||||||
|     @objc var onVideoSeek: RCTDirectEventBlock? |     @objc var onVideoSeek: RCTDirectEventBlock? | ||||||
|  |     @objc var onVideoSeekComplete: RCTDirectEventBlock? | ||||||
|     @objc var onVideoEnd: RCTDirectEventBlock? |     @objc var onVideoEnd: RCTDirectEventBlock? | ||||||
|     @objc var onTimedMetadata: RCTDirectEventBlock? |     @objc var onTimedMetadata: RCTDirectEventBlock? | ||||||
|     @objc var onVideoAudioBecomingNoisy: RCTDirectEventBlock? |     @objc var onVideoAudioBecomingNoisy: RCTDirectEventBlock? | ||||||
| @@ -762,29 +763,31 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @objc |     @objc | ||||||
|     func setSeek(_ time: NSNumber, _ tolerance: NSNumber) { | func setSeek(_ info: NSDictionary!) { | ||||||
|  |     let seekTime: NSNumber! = info["time"] as! NSNumber | ||||||
|  |     let seekTolerance: NSNumber! = info["tolerance"] as! NSNumber | ||||||
|     let item: AVPlayerItem? = _player?.currentItem |     let item: AVPlayerItem? = _player?.currentItem | ||||||
|  |     guard let player = _player, let item = item, item.status == AVPlayerItem.Status.readyToPlay else { | ||||||
|         _pendingSeek = true |         _pendingSeek = true | ||||||
|  |         _pendingSeekTime = seekTime.floatValue | ||||||
|         guard item != nil, let player = _player, let item, item.status == AVPlayerItem.Status.readyToPlay else { |  | ||||||
|             _pendingSeekTime = time.floatValue |  | ||||||
|         return |         return | ||||||
|     } |     } | ||||||
|  |     let wasPaused = _paused | ||||||
|  |  | ||||||
|         RCTPlayerOperations.seek( |     let cmSeekTime = CMTimeMakeWithSeconds(Float64(seekTime.floatValue), preferredTimescale: Int32(NSEC_PER_SEC)) | ||||||
|             player: player, |     let tolerance = CMTimeMakeWithSeconds(Float64(seekTolerance.floatValue), preferredTimescale: Int32(NSEC_PER_SEC)) | ||||||
|             playerItem: item, |  | ||||||
|             paused: _paused, |     player.seek(to: cmSeekTime, toleranceBefore: tolerance, toleranceAfter: tolerance) { [weak self] (finished) in | ||||||
|             seekTime: time.floatValue, |         guard let self = self, finished else { return } | ||||||
|             seekTolerance: tolerance.floatValue |  | ||||||
|         ) { [weak self] (_: Bool) in |  | ||||||
|             guard let self else { return } |  | ||||||
|  |  | ||||||
|         self._playerObserver.addTimeObserverIfNotSet() |         self._playerObserver.addTimeObserverIfNotSet() | ||||||
|             self.setPaused(self._paused) |         if !wasPaused { | ||||||
|             self.onVideoSeek?(["currentTime": NSNumber(value: Float(CMTimeGetSeconds(item.currentTime()))), |             self.setPaused(false) | ||||||
|                                "seekTime": time, |         } | ||||||
|  |  | ||||||
|  |         let currentTime = NSNumber(value: Float(CMTimeGetSeconds(item.currentTime()))) | ||||||
|  |         self.onVideoSeekComplete?(["currentTime": currentTime, | ||||||
|  |                                    "seekTime": seekTime, | ||||||
|                                    "target": self.reactTag]) |                                    "target": self.reactTag]) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,6 +46,7 @@ RCT_EXPORT_VIEW_PROPERTY(onVideoError, RCTDirectEventBlock); | |||||||
| RCT_EXPORT_VIEW_PROPERTY(onVideoProgress, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onVideoProgress, RCTDirectEventBlock); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(onVideoBandwidthUpdate, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onVideoBandwidthUpdate, RCTDirectEventBlock); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(onVideoSeek, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onVideoSeek, RCTDirectEventBlock); | ||||||
|  | RCT_EXPORT_VIEW_PROPERTY(onVideoSeekComplete, RCTDirectEventBlock); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(onVideoEnd, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onVideoEnd, RCTDirectEventBlock); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(onTimedMetadata, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onTimedMetadata, RCTDirectEventBlock); | ||||||
| RCT_EXPORT_VIEW_PROPERTY(onVideoAudioBecomingNoisy, RCTDirectEventBlock); | RCT_EXPORT_VIEW_PROPERTY(onVideoAudioBecomingNoisy, RCTDirectEventBlock); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user