Skip to content

Commit

Permalink
fix: rework previous fix to fix linter and be more aligned with archi…
Browse files Browse the repository at this point in the history
…tecture
  • Loading branch information
olivier committed Jan 30, 2024
1 parent b9c18d7 commit 1e1ca65
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
10 changes: 10 additions & 0 deletions ios/Video/Features/RCTPlayerObserver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ protocol RCTPlayerObserverHandler: RCTPlayerObserverHandlerObjc {
func handleVolumeChange(player: AVPlayer, change: NSKeyValueObservedChange<Float>)
func handleExternalPlaybackActiveChange(player: AVPlayer, change: NSKeyValueObservedChange<Bool>)
func handleViewControllerOverlayViewFrameChange(overlayView: UIView, change: NSKeyValueObservedChange<CGRect>)
func handleTracksChange(playerItem: AVPlayerItem, change: NSKeyValueObservedChange<[AVPlayerItemTrack]>)
}

// MARK: - RCTPlayerObserver
Expand Down Expand Up @@ -96,6 +97,7 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate {
private var _playerViewControllerReadyForDisplayObserver: NSKeyValueObservation?
private var _playerLayerReadyForDisplayObserver: NSKeyValueObservation?
private var _playerViewControllerOverlayFrameObserver: NSKeyValueObservation?
private var _playerTracksObserver: NSKeyValueObservation?

deinit {
if let _handlers {
Expand Down Expand Up @@ -141,13 +143,21 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate {
options: [.new, .old],
changeHandler: _handlers.handlePlaybackLikelyToKeepUp
)

// observe tracks update
_playerTracksObserver = playerItem.observe(
\.tracks,
options: [.new, .old],
changeHandler: _handlers.handleTracksChange
)
}

func removePlayerItemObservers() {
_playerItemStatusObserver?.invalidate()
_playerPlaybackBufferEmptyObserver?.invalidate()
_playerPlaybackLikelyToKeepUpObserver?.invalidate()
_playerTimedMetadataObserver?.invalidate()
_playerTracksObserver?.invalidate()
}

func addPlayerViewControllerObservers() {
Expand Down
26 changes: 8 additions & 18 deletions ios/Video/RCTVideo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -248,19 +248,6 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
}
}

/// Tracks notifications is handled here.
override func observeValue(forKeyPath keyPath: String?,
of _: Any?,
change _: [NSKeyValueChangeKey: Any]?,
context _: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(AVPlayerItem.tracks) {
all(RCTVideoUtils.getAudioTrackInfo(self._player), RCTVideoUtils.getTextTrackInfo(self._player)).then { audioTracks, textTracks in
self.onTextTracks?(["textTracks": textTracks])
self.onAudioTracks?(["audioTracks": audioTracks])
}
}
}

// MARK: - Progress

func sendProgressUpdate() {
Expand Down Expand Up @@ -377,13 +364,9 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
}

self._player = self._player ?? AVPlayer()

self._player?.replaceCurrentItem(with: playerItem)

// observe tracks update
self._player?.currentItem?.addObserver(self,
forKeyPath: #keyPath(AVPlayerItem.tracks),
options: [.old, .new],
context: nil)
self._playerObserver.player = self._player
self.applyModifiers()
self._player?.actionAtItemEnd = .none
Expand Down Expand Up @@ -1387,4 +1370,11 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH

onVideoBandwidthUpdate?(["bitrate": lastEvent.observedBitrate, "target": reactTag])
}

func handleTracksChange(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<[AVPlayerItemTrack]>) {
all(RCTVideoUtils.getAudioTrackInfo(self._player), RCTVideoUtils.getTextTrackInfo(self._player)).then { audioTracks, textTracks in
self.onTextTracks?(["textTracks": textTracks])
self.onAudioTracks?(["audioTracks": audioTracks])
}
}
}

0 comments on commit 1e1ca65

Please sign in to comment.