chore: lint project (#3395)
* chore: format swift code * chore: format clang code * chore: format kotlin code * refactor: rename folder "API" to "api"
This commit is contained in:
@@ -2,31 +2,37 @@ import AVFoundation
|
||||
import AVKit
|
||||
import Foundation
|
||||
|
||||
// MARK: - RCTPlayerObserverHandlerObjc
|
||||
|
||||
@objc
|
||||
protocol RCTPlayerObserverHandlerObjc {
|
||||
func handleDidFailToFinishPlaying(notification:NSNotification!)
|
||||
func handlePlaybackStalled(notification:NSNotification!)
|
||||
func handlePlayerItemDidReachEnd(notification:NSNotification!)
|
||||
func handleAVPlayerAccess(notification:NSNotification!)
|
||||
func handleDidFailToFinishPlaying(notification: NSNotification!)
|
||||
func handlePlaybackStalled(notification: NSNotification!)
|
||||
func handlePlayerItemDidReachEnd(notification: NSNotification!)
|
||||
func handleAVPlayerAccess(notification: NSNotification!)
|
||||
}
|
||||
|
||||
// MARK: - RCTPlayerObserverHandler
|
||||
|
||||
protocol RCTPlayerObserverHandler: RCTPlayerObserverHandlerObjc {
|
||||
func handleTimeUpdate(time:CMTime)
|
||||
func handleReadyForDisplay(changeObject: Any, change:NSKeyValueObservedChange<Bool>)
|
||||
func handleTimeMetadataChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<[AVMetadataItem]?>)
|
||||
func handlePlayerItemStatusChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<AVPlayerItem.Status>)
|
||||
func handlePlaybackBufferKeyEmpty(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<Bool>)
|
||||
func handlePlaybackLikelyToKeepUp(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<Bool>)
|
||||
func handleTimeUpdate(time: CMTime)
|
||||
func handleReadyForDisplay(changeObject: Any, change: NSKeyValueObservedChange<Bool>)
|
||||
func handleTimeMetadataChange(playerItem: AVPlayerItem, change: NSKeyValueObservedChange<[AVMetadataItem]?>)
|
||||
func handlePlayerItemStatusChange(playerItem: AVPlayerItem, change: NSKeyValueObservedChange<AVPlayerItem.Status>)
|
||||
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>)
|
||||
func handleViewControllerOverlayViewFrameChange(overlayView: UIView, change: NSKeyValueObservedChange<CGRect>)
|
||||
}
|
||||
|
||||
// MARK: - RCTPlayerObserver
|
||||
|
||||
class RCTPlayerObserver: NSObject {
|
||||
weak var _handlers: RCTPlayerObserverHandler?
|
||||
|
||||
var player:AVPlayer? {
|
||||
|
||||
var player: AVPlayer? {
|
||||
willSet {
|
||||
removePlayerObservers()
|
||||
removePlayerTimeObserver()
|
||||
@@ -38,7 +44,8 @@ class RCTPlayerObserver: NSObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
var playerItem:AVPlayerItem? {
|
||||
|
||||
var playerItem: AVPlayerItem? {
|
||||
willSet {
|
||||
removePlayerItemObservers()
|
||||
}
|
||||
@@ -48,7 +55,8 @@ class RCTPlayerObserver: NSObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
var playerViewController:AVPlayerViewController? {
|
||||
|
||||
var playerViewController: AVPlayerViewController? {
|
||||
willSet {
|
||||
removePlayerViewControllerObservers()
|
||||
}
|
||||
@@ -58,7 +66,8 @@ class RCTPlayerObserver: NSObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
var playerLayer:AVPlayerLayer? {
|
||||
|
||||
var playerLayer: AVPlayerLayer? {
|
||||
willSet {
|
||||
removePlayerLayerObserver()
|
||||
}
|
||||
@@ -68,91 +77,108 @@ class RCTPlayerObserver: NSObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var _progressUpdateInterval:TimeInterval = 250
|
||||
private var _timeObserver:Any?
|
||||
|
||||
private var _playerRateChangeObserver:NSKeyValueObservation?
|
||||
private var _playerVolumeChangeObserver:NSKeyValueObservation?
|
||||
private var _playerExternalPlaybackActiveObserver:NSKeyValueObservation?
|
||||
private var _playerItemStatusObserver:NSKeyValueObservation?
|
||||
private var _playerPlaybackBufferEmptyObserver:NSKeyValueObservation?
|
||||
private var _playerPlaybackLikelyToKeepUpObserver:NSKeyValueObservation?
|
||||
private var _playerTimedMetadataObserver:NSKeyValueObservation?
|
||||
private var _playerViewControllerReadyForDisplayObserver:NSKeyValueObservation?
|
||||
private var _playerLayerReadyForDisplayObserver:NSKeyValueObservation?
|
||||
private var _playerViewControllerOverlayFrameObserver:NSKeyValueObservation?
|
||||
|
||||
|
||||
private var _progressUpdateInterval: TimeInterval = 250
|
||||
private var _timeObserver: Any?
|
||||
|
||||
private var _playerRateChangeObserver: NSKeyValueObservation?
|
||||
private var _playerVolumeChangeObserver: NSKeyValueObservation?
|
||||
private var _playerExternalPlaybackActiveObserver: NSKeyValueObservation?
|
||||
private var _playerItemStatusObserver: NSKeyValueObservation?
|
||||
private var _playerPlaybackBufferEmptyObserver: NSKeyValueObservation?
|
||||
private var _playerPlaybackLikelyToKeepUpObserver: NSKeyValueObservation?
|
||||
private var _playerTimedMetadataObserver: NSKeyValueObservation?
|
||||
private var _playerViewControllerReadyForDisplayObserver: NSKeyValueObservation?
|
||||
private var _playerLayerReadyForDisplayObserver: NSKeyValueObservation?
|
||||
private var _playerViewControllerOverlayFrameObserver: NSKeyValueObservation?
|
||||
|
||||
deinit {
|
||||
if let _handlers = _handlers {
|
||||
NotificationCenter.default.removeObserver(_handlers)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func addPlayerObservers() {
|
||||
guard let player = player, let _handlers = _handlers else {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
_playerRateChangeObserver = player.observe(\.rate, options: [.old], changeHandler: _handlers.handlePlaybackRateChange)
|
||||
_playerVolumeChangeObserver = player.observe(\.volume, options: [.old] ,changeHandler: _handlers.handleVolumeChange)
|
||||
_playerVolumeChangeObserver = player.observe(\.volume, options: [.old], changeHandler: _handlers.handleVolumeChange)
|
||||
_playerExternalPlaybackActiveObserver = player.observe(\.isExternalPlaybackActive, changeHandler: _handlers.handleExternalPlaybackActiveChange)
|
||||
}
|
||||
|
||||
|
||||
func removePlayerObservers() {
|
||||
_playerRateChangeObserver?.invalidate()
|
||||
_playerExternalPlaybackActiveObserver?.invalidate()
|
||||
}
|
||||
|
||||
|
||||
func addPlayerItemObservers() {
|
||||
guard let playerItem = playerItem, let _handlers = _handlers else { return }
|
||||
_playerItemStatusObserver = playerItem.observe(\.status, options: [.new, .old], changeHandler: _handlers.handlePlayerItemStatusChange)
|
||||
_playerPlaybackBufferEmptyObserver = playerItem.observe(\.isPlaybackBufferEmpty, options: [.new, .old], changeHandler: _handlers.handlePlaybackBufferKeyEmpty)
|
||||
_playerPlaybackLikelyToKeepUpObserver = playerItem.observe(\.isPlaybackLikelyToKeepUp, options: [.new, .old], changeHandler: _handlers.handlePlaybackLikelyToKeepUp)
|
||||
_playerTimedMetadataObserver = playerItem.observe(\.timedMetadata, options: [.new], changeHandler: _handlers.handleTimeMetadataChange)
|
||||
_playerItemStatusObserver = playerItem.observe(\.status, options: [.new, .old], changeHandler: _handlers.handlePlayerItemStatusChange)
|
||||
_playerPlaybackBufferEmptyObserver = playerItem.observe(
|
||||
\.isPlaybackBufferEmpty,
|
||||
options: [.new, .old],
|
||||
changeHandler: _handlers.handlePlaybackBufferKeyEmpty
|
||||
)
|
||||
_playerPlaybackLikelyToKeepUpObserver = playerItem.observe(
|
||||
\.isPlaybackLikelyToKeepUp,
|
||||
options: [.new, .old],
|
||||
changeHandler: _handlers.handlePlaybackLikelyToKeepUp
|
||||
)
|
||||
_playerTimedMetadataObserver = playerItem.observe(\.timedMetadata, options: [.new], changeHandler: _handlers.handleTimeMetadataChange)
|
||||
}
|
||||
|
||||
|
||||
func removePlayerItemObservers() {
|
||||
_playerItemStatusObserver?.invalidate()
|
||||
_playerPlaybackBufferEmptyObserver?.invalidate()
|
||||
_playerPlaybackLikelyToKeepUpObserver?.invalidate()
|
||||
_playerTimedMetadataObserver?.invalidate()
|
||||
}
|
||||
|
||||
func addPlayerViewControllerObservers() {
|
||||
guard let playerViewController = playerViewController, let _handlers = _handlers else { return }
|
||||
|
||||
_playerViewControllerReadyForDisplayObserver = playerViewController.observe(\.isReadyForDisplay, options: [.new], changeHandler: _handlers.handleReadyForDisplay)
|
||||
|
||||
_playerViewControllerOverlayFrameObserver = playerViewController.contentOverlayView?.observe(\.frame, options: [.new, .old], changeHandler: _handlers.handleViewControllerOverlayViewFrameChange)
|
||||
|
||||
_playerViewControllerReadyForDisplayObserver = playerViewController.observe(
|
||||
\.isReadyForDisplay,
|
||||
options: [.new],
|
||||
changeHandler: _handlers.handleReadyForDisplay
|
||||
)
|
||||
|
||||
_playerViewControllerOverlayFrameObserver = playerViewController.contentOverlayView?.observe(
|
||||
\.frame,
|
||||
options: [.new, .old],
|
||||
changeHandler: _handlers.handleViewControllerOverlayViewFrameChange
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
func removePlayerViewControllerObservers() {
|
||||
_playerViewControllerReadyForDisplayObserver?.invalidate()
|
||||
_playerViewControllerOverlayFrameObserver?.invalidate()
|
||||
}
|
||||
|
||||
|
||||
func addPlayerLayerObserver() {
|
||||
guard let _handlers = _handlers else {return}
|
||||
_playerLayerReadyForDisplayObserver = playerLayer?.observe(\.isReadyForDisplay, options: [.new], changeHandler: _handlers.handleReadyForDisplay)
|
||||
guard let _handlers = _handlers else { return }
|
||||
_playerLayerReadyForDisplayObserver = playerLayer?.observe(\.isReadyForDisplay, options: [.new], changeHandler: _handlers.handleReadyForDisplay)
|
||||
}
|
||||
|
||||
|
||||
func removePlayerLayerObserver() {
|
||||
_playerLayerReadyForDisplayObserver?.invalidate()
|
||||
}
|
||||
|
||||
|
||||
func addPlayerTimeObserver() {
|
||||
guard let _handlers = _handlers else {return}
|
||||
guard let _handlers = _handlers else { return }
|
||||
removePlayerTimeObserver()
|
||||
let progressUpdateIntervalMS:Float64 = _progressUpdateInterval / 1000
|
||||
let progressUpdateIntervalMS: Float64 = _progressUpdateInterval / 1000
|
||||
// @see endScrubbing in AVPlayerDemoPlaybackViewController.m
|
||||
// of https://developer.apple.com/library/ios/samplecode/AVPlayerDemo/Introduction/Intro.html
|
||||
_timeObserver = player?.addPeriodicTimeObserver(
|
||||
forInterval: CMTimeMakeWithSeconds(progressUpdateIntervalMS, preferredTimescale: Int32(NSEC_PER_SEC)),
|
||||
queue:nil,
|
||||
using:_handlers.handleTimeUpdate
|
||||
queue: nil,
|
||||
using: _handlers.handleTimeUpdate
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
/* Cancels the previously registered time observer. */
|
||||
func removePlayerTimeObserver() {
|
||||
if _timeObserver != nil {
|
||||
@@ -160,59 +186,59 @@ class RCTPlayerObserver: NSObject {
|
||||
_timeObserver = nil
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func addTimeObserverIfNotSet() {
|
||||
if (_timeObserver == nil) {
|
||||
if _timeObserver == nil {
|
||||
addPlayerTimeObserver()
|
||||
}
|
||||
}
|
||||
|
||||
func replaceTimeObserverIfSet(_ newUpdateInterval:Float64? = nil) {
|
||||
|
||||
func replaceTimeObserverIfSet(_ newUpdateInterval: Float64? = nil) {
|
||||
if let newUpdateInterval = newUpdateInterval {
|
||||
_progressUpdateInterval = newUpdateInterval
|
||||
}
|
||||
if (_timeObserver != nil) {
|
||||
if _timeObserver != nil {
|
||||
addPlayerTimeObserver()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func attachPlayerEventListeners() {
|
||||
guard let _handlers = _handlers else {return}
|
||||
guard let _handlers = _handlers else { return }
|
||||
NotificationCenter.default.removeObserver(_handlers,
|
||||
name:NSNotification.Name.AVPlayerItemDidPlayToEndTime,
|
||||
object:player?.currentItem)
|
||||
|
||||
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
|
||||
object: player?.currentItem)
|
||||
|
||||
NotificationCenter.default.addObserver(_handlers,
|
||||
selector:#selector(RCTPlayerObserverHandler.handlePlayerItemDidReachEnd(notification:)),
|
||||
name:NSNotification.Name.AVPlayerItemDidPlayToEndTime,
|
||||
object:player?.currentItem)
|
||||
|
||||
selector: #selector(RCTPlayerObserverHandler.handlePlayerItemDidReachEnd(notification:)),
|
||||
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
|
||||
object: player?.currentItem)
|
||||
|
||||
NotificationCenter.default.removeObserver(_handlers,
|
||||
name:NSNotification.Name.AVPlayerItemPlaybackStalled,
|
||||
object:nil)
|
||||
|
||||
name: NSNotification.Name.AVPlayerItemPlaybackStalled,
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(_handlers,
|
||||
selector:#selector(RCTPlayerObserverHandler.handlePlaybackStalled(notification:)),
|
||||
name:NSNotification.Name.AVPlayerItemPlaybackStalled,
|
||||
object:nil)
|
||||
|
||||
selector: #selector(RCTPlayerObserverHandler.handlePlaybackStalled(notification:)),
|
||||
name: NSNotification.Name.AVPlayerItemPlaybackStalled,
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.removeObserver(_handlers,
|
||||
name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime,
|
||||
object:nil)
|
||||
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(_handlers,
|
||||
selector:#selector(RCTPlayerObserverHandler.handleDidFailToFinishPlaying(notification:)),
|
||||
selector: #selector(RCTPlayerObserverHandler.handleDidFailToFinishPlaying(notification:)),
|
||||
name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime,
|
||||
object:nil)
|
||||
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.removeObserver(_handlers, name: NSNotification.Name.AVPlayerItemNewAccessLogEntry, object: player?.currentItem)
|
||||
|
||||
|
||||
NotificationCenter.default.addObserver(_handlers,
|
||||
selector:#selector(RCTPlayerObserverHandlerObjc.handleAVPlayerAccess(notification:)),
|
||||
selector: #selector(RCTPlayerObserverHandlerObjc.handleAVPlayerAccess(notification:)),
|
||||
name: NSNotification.Name.AVPlayerItemNewAccessLogEntry,
|
||||
object: player?.currentItem)
|
||||
}
|
||||
|
||||
|
||||
func clearPlayer() {
|
||||
player = nil
|
||||
playerItem = nil
|
||||
|
Reference in New Issue
Block a user