perf: ensure we do not provide callback to native if no callback provided from app (#3735)

* perf: ensure we do not provide callback to native if no callback provided from app

* perf: remove onIdle Callback

* chore: code review
This commit is contained in:
Olivier Bouillet 2024-05-07 11:06:12 +02:00 committed by GitHub
parent 8eb31e82c7
commit c59d00a0f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 48 additions and 26 deletions

View File

@ -1252,6 +1252,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
// When timeMetadata is read the event onTimedMetadata is triggered // When timeMetadata is read the event onTimedMetadata is triggered
func handleTimeMetadataChange(timedMetadata: [AVMetadataItem]) { func handleTimeMetadataChange(timedMetadata: [AVMetadataItem]) {
guard onTimedMetadata != nil else { return }
var metadata: [[String: String?]?] = [] var metadata: [[String: String?]?] = []
for item in timedMetadata { for item in timedMetadata {
let value = item.value as? String let value = item.value as? String
@ -1510,6 +1511,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
@objc @objc
func handleAVPlayerAccess(notification: NSNotification!) { func handleAVPlayerAccess(notification: NSNotification!) {
guard onVideoBandwidthUpdate != nil else { return }
guard let accessLog = (notification.object as? AVPlayerItem)?.accessLog() else { guard let accessLog = (notification.object as? AVPlayerItem)?.accessLog() else {
return return
} }

View File

@ -339,10 +339,6 @@ const Video = forwardRef<VideoRef, ReactVideoProps>(
); );
// android only // android only
const onVideoIdle = useCallback(() => {
onIdle?.();
}, [onIdle]);
const _onTimedMetadata = useCallback( const _onTimedMetadata = useCallback(
(e: NativeSyntheticEvent<OnTimedMetadataData>) => { (e: NativeSyntheticEvent<OnTimedMetadataData>) => {
onTimedMetadata?.(e.nativeEvent); onTimedMetadata?.(e.nativeEvent);
@ -542,38 +538,62 @@ const Video = forwardRef<VideoRef, ReactVideoProps>(
selectedAudioTrack={_selectedAudioTrack} selectedAudioTrack={_selectedAudioTrack}
selectedVideoTrack={_selectedVideoTrack} selectedVideoTrack={_selectedVideoTrack}
onGetLicense={useExternalGetLicense ? onGetLicense : undefined} onGetLicense={useExternalGetLicense ? onGetLicense : undefined}
onVideoLoad={onVideoLoad as (e: NativeSyntheticEvent<object>) => void} onVideoLoad={
onVideoLoadStart={onVideoLoadStart} onLoad || hasPoster
onVideoError={onVideoError} ? (onVideoLoad as (e: NativeSyntheticEvent<object>) => void)
onVideoProgress={onVideoProgress} : undefined
onVideoSeek={onVideoSeek} }
onVideoLoadStart={
onLoadStart || hasPoster ? onVideoLoadStart : undefined
}
onVideoError={onError ? onVideoError : undefined}
onVideoProgress={onProgress ? onVideoProgress : undefined}
onVideoSeek={onSeek ? onVideoSeek : undefined}
onVideoEnd={onEnd} onVideoEnd={onEnd}
onVideoBuffer={onVideoBuffer} onVideoBuffer={onBuffer ? onVideoBuffer : undefined}
onVideoPlaybackStateChanged={onVideoPlaybackStateChanged} onVideoPlaybackStateChanged={
onVideoBandwidthUpdate={_onBandwidthUpdate} onPlaybackRateChange ? onVideoPlaybackStateChanged : undefined
onTimedMetadata={_onTimedMetadata} }
onAudioTracks={_onAudioTracks} onVideoBandwidthUpdate={
onTextTracks={_onTextTracks} onBandwidthUpdate ? _onBandwidthUpdate : undefined
onTextTrackDataChanged={_onTextTrackDataChanged} }
onVideoTracks={_onVideoTracks} onTimedMetadata={onTimedMetadata ? _onTimedMetadata : undefined}
onAudioTracks={onAudioTracks ? _onAudioTracks : undefined}
onTextTracks={onTextTracks ? _onTextTracks : undefined}
onTextTrackDataChanged={
onTextTrackDataChanged ? _onTextTrackDataChanged : undefined
}
onVideoTracks={onVideoTracks ? _onVideoTracks : undefined}
onVideoFullscreenPlayerDidDismiss={onFullscreenPlayerDidDismiss} onVideoFullscreenPlayerDidDismiss={onFullscreenPlayerDidDismiss}
onVideoFullscreenPlayerDidPresent={onFullscreenPlayerDidPresent} onVideoFullscreenPlayerDidPresent={onFullscreenPlayerDidPresent}
onVideoFullscreenPlayerWillDismiss={onFullscreenPlayerWillDismiss} onVideoFullscreenPlayerWillDismiss={onFullscreenPlayerWillDismiss}
onVideoFullscreenPlayerWillPresent={onFullscreenPlayerWillPresent} onVideoFullscreenPlayerWillPresent={onFullscreenPlayerWillPresent}
onVideoExternalPlaybackChange={onVideoExternalPlaybackChange} onVideoExternalPlaybackChange={
onVideoIdle={onVideoIdle} onExternalPlaybackChange ? onVideoExternalPlaybackChange : undefined
onAudioFocusChanged={_onAudioFocusChanged} }
onReadyForDisplay={_onReadyForDisplay} onVideoIdle={onIdle}
onPlaybackRateChange={_onPlaybackRateChange} onAudioFocusChanged={
onVolumeChange={_onVolumeChange} onAudioFocusChanged ? _onAudioFocusChanged : undefined
}
onReadyForDisplay={onReadyForDisplay ? _onReadyForDisplay : undefined}
onPlaybackRateChange={
onPlaybackRateChange ? _onPlaybackRateChange : undefined
}
onVolumeChange={onVolumeChange ? _onVolumeChange : undefined}
onVideoAudioBecomingNoisy={onAudioBecomingNoisy} onVideoAudioBecomingNoisy={onAudioBecomingNoisy}
onPictureInPictureStatusChanged={_onPictureInPictureStatusChanged} onPictureInPictureStatusChanged={
onPictureInPictureStatusChanged
? _onPictureInPictureStatusChanged
: undefined
}
onRestoreUserInterfaceForPictureInPictureStop={ onRestoreUserInterfaceForPictureInPictureStop={
onRestoreUserInterfaceForPictureInPictureStop onRestoreUserInterfaceForPictureInPictureStop
} }
onVideoAspectRatio={_onVideoAspectRatio} onVideoAspectRatio={onAspectRatio ? _onVideoAspectRatio : undefined}
onReceiveAdEvent={ onReceiveAdEvent={
_onReceiveAdEvent as (e: NativeSyntheticEvent<object>) => void onReceiveAdEvent
? (_onReceiveAdEvent as (e: NativeSyntheticEvent<object>) => void)
: undefined
} }
/> />
{hasPoster && showPoster ? ( {hasPoster && showPoster ? (