Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEC-10653 Add bufferedTime to the BasicPlayer Protocol #413

Merged
merged 1 commit into from Nov 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions Classes/Player/Decorators/PlayerDecoratorBase.swift
Expand Up @@ -160,6 +160,10 @@ import AVKit
return self.player.loadedTimeRanges
}

@objc public var bufferedTime: TimeInterval {
return self.player.bufferedTime
}

open func play() {
self.player.play()
}
Expand Down
6 changes: 3 additions & 3 deletions Classes/Player/PKEvent.swift
Expand Up @@ -89,7 +89,7 @@ public extension PKEvent {
return self.data?[EventDataKeys.bitrate] as? NSNumber
}

/// Current Bitrate Value, PKEvent Data Accessor
/// The PlaybackInfo object, PKEvent Data Accessor
@objc var playbackInfo: PKPlaybackInfo? {
return self.data?[EventDataKeys.playbackInfo] as? PKPlaybackInfo
}
Expand Down Expand Up @@ -122,12 +122,12 @@ public extension PKEvent {
return self.data?[EventDataKeys.metadata] as? [AVMetadataItem]
}

/// Content url, PKEvent Data Accessor
/// The MediaSource object, PKEvent Data Accessor
@objc var mediaSource: PKMediaSource? {
return self.data?[EventDataKeys.mediaSource] as? PKMediaSource
}

/// Content url, PKEvent Data Accessor
/// The loaded time ranges, PKEvent Data Accessor
@objc var timeRanges: [PKTimeRange]? {
return self.data?[EventDataKeys.timeRanges] as? [PKTimeRange]
}
Expand Down
4 changes: 4 additions & 0 deletions Classes/Player/PlayerController.swift
Expand Up @@ -221,6 +221,10 @@ class PlayerController: NSObject, Player {
return self.currentPlayer.loadedTimeRanges
}

public var bufferedTime: TimeInterval {
return self.currentPlayer.bufferedTime
}

private func shouldDVRLivePlayFromLiveEdge() -> Bool {
if let pausedPosition = liveDVRPausedPosition, currentTime == 0 {
let timePassed: TimeInterval = Date().timeIntervalSince(pausedPosition.date)
Expand Down
4 changes: 4 additions & 0 deletions Classes/Player/PlayerEngineWrapper.swift
Expand Up @@ -110,6 +110,10 @@ public class PlayerEngineWrapper: NSObject, PlayerEngine {
return playerEngine?.loadedTimeRanges
}

public var bufferedTime: TimeInterval {
return playerEngine?.bufferedTime ?? self.currentTime
}

public func loadMedia(from mediaSource: PKMediaSource?, handler: AssetHandler) {
playerEngine?.loadMedia(from: mediaSource, handler: handler)
}
Expand Down
12 changes: 12 additions & 0 deletions Classes/Player/PlayerWrapper/AVPlayerWrapper.swift
Expand Up @@ -194,6 +194,18 @@ open class AVPlayerWrapper: NSObject, PlayerEngine {
return self.currentPlayer.currentItem?.loadedTimeRanges.map { PKTimeRange(timeRange: $0.timeRangeValue) }
}

public var bufferedTime: TimeInterval {
if let loadedTimeRanges = self.loadedTimeRanges {
for timeRange in loadedTimeRanges {
if currentTime.isLess(than: timeRange.end) {
return timeRange.end
}
}
}

return currentTime
}

public func play() {
if #available(iOS 10.0, tvOS 10.0, *), let shouldPlayImmediately = settings?.shouldPlayImmediately, shouldPlayImmediately == true {
self.currentPlayer.playImmediately(atRate: 1.0)
Expand Down
5 changes: 5 additions & 0 deletions Classes/Player/PlayerWrapper/DefaultPlayerWrapper.swift
Expand Up @@ -129,6 +129,11 @@ class DefaultPlayerWrapper: NSObject, PlayerEngine {
return nil
}

public var bufferedTime: TimeInterval {
printInvocationWarning("\(#function)")
return 0.0
}

func play() {
printInvocationWarning("\(#function)")
}
Expand Down
3 changes: 3 additions & 0 deletions Classes/Player/Protocols/BasicPlayer.swift
Expand Up @@ -45,6 +45,9 @@ import Foundation
/// Provides a collection of time ranges for which the player has the media data readily available. The ranges provided might be discontinuous.
@objc var loadedTimeRanges: [PKTimeRange]? { get }

/// The current player's buffered time.
@objc var bufferedTime: TimeInterval { get }

/// Send a play action for the player.
@objc func play()

Expand Down