+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public typealias ViewController = NSViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public typealias Image = NSImage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public typealias Color = NSColor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public typealias SnapshotResult = Image ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public typealias NibName = NSNib . Name ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum PlaybackState : String , CustomStringConvertible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Asset buffering states.
+
+
See more
+
+
+
Declaration
+
+
Swift
+
public enum BufferingState : String , CustomStringConvertible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum FillMode : String , CustomStringConvertible
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -99,7 +432,7 @@
Player
Declaration
@@ -109,9 +442,9 @@ Declaration
@@ -126,19 +459,30 @@
Declaration
Declaration
+
+
+
+
+
@@ -153,7 +497,7 @@
Declaration
Declaration
Swift
-
open var url : URL ?
+
open var url : URL ?
@@ -182,9 +526,9 @@ Parameters
@@ -199,7 +543,7 @@
Parameters
Declaration
Swift
-
open var autoplay : Bool = true
+
open var autoplay : Bool = true
@@ -228,9 +572,9 @@ Parameters
@@ -238,15 +582,16 @@
Parameters
-
For setting up with AVAsset instead of URL
-Note: Resets URL (cannot set both)
+
For setting up with AVAsset instead of URL
+
+
Note: Resets URL (cannot set both)
Declaration
Swift
-
open var asset : AVAsset ?
+
open var asset : AVAsset ?
@@ -256,9 +601,9 @@ Declaration
@@ -273,7 +618,7 @@
Declaration
Declaration
Swift
-
open var muted : Bool
+
open var muted : Bool
@@ -283,9 +628,9 @@ Declaration
@@ -300,7 +645,188 @@
Declaration
Declaration
Swift
-
open var volume : Float
+
open var volume : Float
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Specifies how the video is displayed within a player layer’s bounds.
+ The default value is .resizeAspectFit. See the FillMode enum.
+
+
Note: On iOS, this property is ignored if using system-supplied playback controls.
+
+
+
+
Declaration
+
+
Swift
+
open var fillMode : FillMode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Player view’s initial background color.
+
+
+
+
Declaration
+
+
Swift
+
open var layerBackgroundColor : Color ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The player view’s controls style.
+
+
The player view supports a number of different control styles that you can use to customize the player
+view’s appearance and behavior. See AVPlayerViewControlsStyle for the possible values.
+The default value of this property is .default
+
+
Important
+ Only available on the macOS platform.
+
+
+
+
+
+
Declaration
+
+
Swift
+
open var controlsStyle : AVPlayerViewControlsStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A Boolean value that indicates whether the player shows playback controls.
+This property has a default value of true.
+
+
Note
+
Only available on iOS/tvOS platforms. For macOS, see controlsStyle .
+
+
+
+
Important
+
Set this property before calling add(to:) . Setting it after will have no effect.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pauses playback automatically when resigning active.
+
+
The default value of this property is true.
+
+
+
+
Declaration
+
+
Swift
+
open var playbackPausesWhenResigningActive : Bool = true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pauses playback automatically when backgrounded (on macOS, when hidden).
+
+
The default value of this property is true.
+
+
+
+
Declaration
+
+
Swift
+
open var playbackPausesWhenBackgrounded : Bool = true
@@ -310,9 +836,78 @@ Declaration
+
+
+
+
+
+
Resumes playback when became active.
+
+
The default value of this property is true.
+
+
+
+
Declaration
+
+
Swift
+
open var playbackResumesWhenBecameActive : Bool = true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Resumes playback when entering foreground. (on macOS, when unhidden)
+
+
The default value of this property is true.
+
+
+
+
Declaration
+
+
Swift
+
open var playbackResumesWhenEnteringForeground : Bool = true
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -320,15 +915,15 @@
Declaration
-
Specifies how the video is displayed within a player layer’s bounds.
-The default value is AVLayerVideoGravityResizeAspect. See FillMode enum.
+
Whether the player is currently playing.
+Returns true if the playbackState is .playing.
Declaration
Swift
-
open var fillMode : String
+
open var isPlaying : Bool
@@ -338,9 +933,9 @@ Declaration
@@ -348,14 +943,14 @@
Declaration
-
Pauses playback automatically when resigning active.
+
Playback automatically loops continuously when true.
Declaration
Swift
-
open var playbackPausesWhenResigningActive : Bool = true
+
open var playbackLoops : Bool
@@ -365,9 +960,9 @@ Declaration
@@ -375,14 +970,16 @@
Declaration
-
Pauses playback automatically when backgrounded.
+
Playback freezes on last frame frame at end when true.
+
+
The default value of this property is false.
Declaration
Swift
-
open var playbackPausesWhenBackgrounded : Bool = true
+
open var playbackFreezesAtEnd : Bool = false
@@ -392,9 +989,9 @@ Declaration
@@ -402,14 +999,14 @@
Declaration
-
Resumes playback when became active.
+
Current playback state of the Player.
Declaration
Swift
-
open var playbackResumesWhenBecameActive : Bool = true
+
open var playbackState : PlaybackState = . stopped
@@ -419,9 +1016,9 @@ Declaration
@@ -429,14 +1026,14 @@
Declaration
-
Resumes playback when entering foreground.
+
Current buffering state of the Player.
Declaration
Swift
-
open var playbackResumesWhenEnteringForeground : Bool = true
+
open var bufferingState : BufferingState = . unknown
@@ -446,9 +1043,9 @@ Declaration
@@ -456,14 +1053,14 @@
Declaration
-
Playback automatically loops continuously when true.
+
Playback buffering size in seconds.
Declaration
Swift
-
open var playbackLoops : Bool
+
open var bufferSize : Double = 10
@@ -473,9 +1070,9 @@ Declaration
@@ -483,14 +1080,14 @@
Declaration
-
Playback freezes on last frame frame at end when true.
+
Playback is not automatically triggered from state changes when true.
Declaration
Swift
-
open var playbackFreezesAtEnd : Bool = false
+
open var playbackEdgeTriggered : Bool = true
@@ -500,9 +1097,9 @@ Declaration
@@ -510,14 +1107,14 @@
Declaration
-
Current playback state of the Player.
+
Maximum duration of playback.
Declaration
Swift
-
open var playbackState : PlaybackState = . stopped
+
open var maximumDuration : TimeInterval
@@ -527,9 +1124,9 @@ Declaration
@@ -537,14 +1134,14 @@
Declaration
-
Current buffering state of the Player.
+
Media playback’s current time.
Declaration
Swift
-
open var bufferingState : BufferingState = . unknown
+
open var currentTime : TimeInterval
@@ -554,9 +1151,9 @@ Declaration
@@ -564,26 +1161,42 @@
Declaration
-
Playback buffering size in seconds.
+
The natural dimensions of the media.
+
+
Note
+ The
avPlayerItem must exist and have had its tracks loaded.
+
+
Declaration
Swift
-
open var bufferSize : Double = 10
+
open var naturalSize : CGSize ?
+
+
+
+
+
@@ -591,14 +1204,14 @@
Declaration
-
Playback is not automatically triggered from state changes when true.
+
Undocumented
Declaration
Swift
-
open var playbackEdgeTriggered : Bool = true
+
public var avPlayer : AVPlayer
@@ -608,9 +1221,9 @@ Declaration
@@ -618,14 +1231,14 @@
Declaration
-
Maximum duration of playback.
+
Undocumented
Declaration
Swift
-
open var maximumDuration : TimeInterval
+
public var avPlayerItem : AVPlayerItem ?
@@ -635,9 +1248,9 @@ Declaration
@@ -645,26 +1258,28 @@
Declaration
-
Media playback’s current time.
-
-
-
-
Declaration
-
-
Swift
-
open var currentTime : TimeInterval
-
-
+
+
+
+
+
+
@@ -672,14 +1287,14 @@
Declaration
-
The natural dimensions of the media.
+
Undocumented
Declaration
Swift
-
open var naturalSize : CGSize
+
public convenience init ()
@@ -689,9 +1304,9 @@ Declaration
@@ -699,37 +1314,26 @@
Declaration
-
Player view’s initial background color.
+
Undocumented
Declaration
Swift
-
open var layerBackgroundColor : UIColor ?
+
public required init ?( coder aDecoder : NSCoder )
-
-
-
-
-
@@ -744,7 +1348,7 @@
object lifecycle
Declaration
Swift
-
open class Player : UIViewController
+
public override init ( nibName nibNameOrNil : NibName , bundle nibBundleOrNil : Bundle ?)
@@ -754,9 +1358,9 @@ Declaration
@@ -764,26 +1368,51 @@
Declaration
-
Undocumented
+
Adds a player to the given view controller.
+The player will be added to viewController‘s childViewControllers array and its view hierarchy.
+
Declaration
Swift
-
open class Player : UIViewController
+
open func add ( to viewController : ViewController )
+
+
Parameters
+
+
+
+
+
+ viewController
+
+
+
+
+
The parent view controller that the player will be added to.
+
+
+
+
+
+
@@ -791,17 +1420,37 @@
Declaration
-
Undocumented
+
Removes the player from the given view controller.
+The player will be removed from viewController‘s childViewControllers array and its view hierarchy.
Declaration
Swift
-
open class Player : UIViewController
+
open func remove ( from viewController : ViewController )
+
+
Parameters
+
+
+
+
+
+ viewController
+
+
+
+
+
The parent view controller that the player will be removed from.
+
+
+
+
+
+
@@ -809,10 +1458,10 @@ Declaration
@@ -863,7 +1512,7 @@ Declaration
Declaration
Swift
-
open class Player : UIViewController
+
open override func viewDidLoad ()
@@ -873,9 +1522,9 @@ Declaration
@@ -890,24 +1539,60 @@
Declaration
Declaration
Swift
-
open class Player : UIViewController
+
open override func viewDidDisappear ()
+
+
+
+
+
+
+
+
@@ -928,7 +1613,7 @@ Playback funcs
Declaration
Swift
-
open func playFromBeginning ()
+
open func playFromBeginning ()
@@ -955,7 +1640,7 @@ Declaration
Declaration
Swift
-
open func playFromCurrentTime ()
+
open func playFromCurrentTime ()
@@ -982,7 +1667,7 @@ Declaration
Declaration
Swift
-
open func pause ()
+
open func pause ()
@@ -1009,7 +1694,7 @@ Declaration
Declaration
Swift
-
open func stop ()
+
open func stop ()
@@ -1036,7 +1721,7 @@ Declaration
Declaration
Swift
-
open func seek ( to time : CMTime , completionHandler : (( Bool ) -> Swift . Void )? = nil )
+
open func seek ( to time : CMTime , completionHandler : (( Bool ) -> Swift . Void )? = nil )
@@ -1074,6 +1759,65 @@ Parameters
+
+
+
+
+
+
+
+
Sets the current playback time to the specified second mark and executes the specified block when the seek
+operation completes or is interrupted.
+
+
+
+
Declaration
+
+
Swift
+
open func seek ( toSecond second : Int , completionHandler : (( Bool ) -> Swift . Void )? = nil )
+
+
+
+
+
Parameters
+
+
+
+
+
+ time
+
+
+
+
+
The time (in seconds) to seek to.
+
+
+
+
+
+
+ completionHandler
+
+
+
+
+
Call block handler after seeking.
+
+
+
+
+
+
+
+
+
@@ -1094,7 +1838,10 @@ Parameters
Declaration
Swift
-
open func seekToTime ( to time : CMTime , toleranceBefore : CMTime , toleranceAfter : CMTime , completionHandler : (( Bool ) -> Swift . Void )? = nil )
+
open func seekToTime ( to time : CMTime ,
+ toleranceBefore : CMTime ,
+ toleranceAfter : CMTime ,
+ completionHandler : (( Bool ) -> Swift . Void )? = nil )
@@ -1159,9 +1906,9 @@ Parameters
@@ -1169,20 +1916,20 @@
Parameters
-
Captures a snapshot of the current Player view.
+
Captures a snapshot of the current player view.
Declaration
Swift
-
open func takeSnapshot () -> UIImage
+
open func takeSnapshot () -> SnapshotResult
Return Value
-
A UIImage of the player view.
+
A image of the player view.
@@ -1200,15 +1947,19 @@ Return Value
-
Return the av player layer for consumption by
-things such as Picture in Picture
+
Return the AVPlayerLayer for consumption by things such as Picture in Picture.
+
+
Note
+ Player must be loaded.
+
+
Declaration
Swift
-
open func playerLayer () -> AVPlayerLayer ?
+
open func playerLayer () -> AVPlayerLayer ?
@@ -1218,6 +1969,13 @@ Declaration
+
@@ -1239,7 +1997,41 @@
Declaration
Declaration
Swift
-
open class Player : UIViewController
+
open override func observeValue ( forKeyPath keyPath : String ?,
+ of object : Any ?,
+ change : [ NSKeyValueChangeKey : Any ]?,
+ context : UnsafeMutableRawPointer ?)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func executeClosureOnMainQueueIfNecessary ( withClosure closure : @escaping () -> Void )
@@ -1251,8 +2043,8 @@ Declaration
diff --git a/docs/docsets/Player.docset/Contents/Resources/Documents/Enums/BufferingState.html b/docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/BufferingState.html
similarity index 63%
rename from docs/docsets/Player.docset/Contents/Resources/Documents/Enums/BufferingState.html
rename to docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/BufferingState.html
index 0a79f3e..a2f9782 100644
--- a/docs/docsets/Player.docset/Contents/Resources/Documents/Enums/BufferingState.html
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/BufferingState.html
@@ -2,11 +2,11 @@
BufferingState Enumeration Reference
-
-
+
+
-
-
+
+
@@ -14,14 +14,14 @@
- Player Reference
-
+ Player Reference
+
BufferingState Enumeration Reference
@@ -29,35 +29,30 @@
diff --git a/docs/Enums/PlayerFillMode.html b/docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/FillMode.html
similarity index 54%
rename from docs/Enums/PlayerFillMode.html
rename to docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/FillMode.html
index 4aeca8c..42e10b5 100644
--- a/docs/Enums/PlayerFillMode.html
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/Classes/Player/FillMode.html
@@ -1,63 +1,58 @@
- PlayerFillMode Enumeration Reference
-
-
+ FillMode Enumeration Reference
+
+
-
-
+
+
-
-
+
+
- Player Reference
-
- PlayerFillMode Enumeration Reference
+ Player Reference
+
+ FillMode Enumeration Reference
+
+
+
@@ -128,7 +134,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
public protocol PlayerPlaybackDelegate : NSObjectProtocol
@@ -140,8 +146,8 @@ Declaration
diff --git a/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerDelegate.html b/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerDelegate.html
index 13a1361..79b2f2b 100644
--- a/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerDelegate.html
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerDelegate.html
@@ -14,7 +14,7 @@
@@ -34,19 +34,14 @@
Player
-
-
-
- Enumerations
-
@@ -69,7 +64,7 @@
PlayerDelegate
-
public protocol PlayerDelegate : NSObjectProtocol
+
public protocol PlayerDelegate : NSObjectProtocol
@@ -82,9 +77,36 @@ PlayerDelegate
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc optional func playerReady ( player : Player )
+
+
+
+
+
+
+
+
@@ -99,7 +121,7 @@
PlayerDelegate
Declaration
Swift
-
public protocol PlayerDelegate : NSObjectProtocol
+
@objc optional func playerPlaybackError ( player : Player , error : NSError ?)
@@ -109,9 +131,9 @@ Declaration
@@ -126,7 +148,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerDelegate : NSObjectProtocol
+
@objc optional func playerPlaybackStateDidChange ( player : Player )
@@ -136,9 +158,9 @@ Declaration
@@ -153,7 +175,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerDelegate : NSObjectProtocol
+
@objc optional func playerBufferingStateDidChange ( player : Player )
@@ -163,9 +185,9 @@ Declaration
@@ -180,7 +202,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerDelegate : NSObjectProtocol
+
@objc optional func playerBufferTimeDidChange ( bufferTime : Double )
@@ -192,8 +214,8 @@ Declaration
diff --git a/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerPlaybackDelegate.html b/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerPlaybackDelegate.html
index 2f02803..03ebd47 100644
--- a/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerPlaybackDelegate.html
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/Protocols/PlayerPlaybackDelegate.html
@@ -14,7 +14,7 @@
@@ -34,19 +34,14 @@
Player
-
-
-
- Enumerations
-
@@ -69,7 +64,7 @@
PlayerPlaybackDelegate
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
public protocol PlayerPlaybackDelegate : NSObjectProtocol
@@ -82,9 +77,9 @@ PlayerPlaybackDelegate
@@ -99,7 +94,7 @@
PlayerPlaybackDelegate
Declaration
Swift
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
@objc optional func playerCurrentTimeDidChange ( player : Player )
@@ -109,9 +104,9 @@ Declaration
@@ -126,7 +121,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
@objc optional func playerPlaybackWillStartFromBeginning ( player : Player )
@@ -136,9 +131,9 @@ Declaration
@@ -153,7 +148,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
@objc optional func playerPlaybackDidEnd ( player : Player )
@@ -163,9 +158,9 @@ Declaration
@@ -180,7 +175,7 @@
Declaration
Declaration
Swift
-
public protocol PlayerPlaybackDelegate : NSObjectProtocol
+
@objc optional func playerPlaybackWillLoop ( player : Player )
@@ -192,8 +187,8 @@ Declaration
diff --git a/docs/docsets/Player.docset/Contents/Resources/Documents/index.html b/docs/docsets/Player.docset/Contents/Resources/Documents/index.html
index a80f5d8..d3f0f0c 100644
--- a/docs/docsets/Player.docset/Contents/Resources/Documents/index.html
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/index.html
@@ -13,7 +13,7 @@
@@ -33,19 +33,14 @@
Player
-
-
-
- Enumerations
-
@@ -66,86 +61,149 @@
-
-Player
+ Player
+
+
+
+
+
+
+
-Player is a simple iOS video player library written in Swift .
+
-
+Player is a simple cross-platform video player library written in Swift.
+
+
+⚠️ Warning : version 0.9 has breaking API changes. ⚠️
+Looking for…
Features
[x] plays local media or streams remote media over HTTP
[x] customizable UI and user interaction
+[x] optional system-supplied playback controls
[x] no size restrictions
[x] orientation change support
[x] simple API
+[x] AirPlay & PIP support (see AVPlayerController documentation)
-Quick Start
+I’m a Rapper Wrapper
-Player is available for installation using the Cocoa dependency manager CocoaPods . Alternatively, you can simply copy the Player.swift file into your Xcode project.
-# CocoaPods
-swift_version = "4.0"
-pod "Player" , "~> 0.8.0"
+
+Installation
-# Carthage
-github "piemonte/Player" ~> 0 . 8 . 0
+Player is available for installation using CocoaPods or Carthage. Alternatively, you can simply copy the Player.swift file into your Xcode project.
+
+pod "Player"
-Need Swift 3? Use release 0.7.0
-Usage
+Need Swift 3? Use release 0.7.0. Note : macOS and system-supplied playback controls not supported.
+pod "Player" , "~> 0.7.0"
+
+
+github "piemonte/Player"
+
+Quick Start
+
+The sample projects provide an example of how to integrate Player , otherwise you can follow these steps.
+
+Create and add the Player to your view controller.
+let player = Player ()
+// Optional
+player . playerDelegate = self
+// Optional
+player . playbackDelegate = self
+player . view . frame = view . bounds
+player . add ( to : self )
+
-The sample project provides an example of how to integrate Player , otherwise you can follow these steps.
+Provide the file path to the resource you would like to play locally or stream. Ensure you’re including the file extension.
+player . url = URL ( string : "https://www.apple.com/105/media/us/iphone-x/2017/01df5b43-28e4-4848-bf20-490c34a926a7/films/meet-iphone-x/iphone-x-meet-iphone-tpl-cc-us-20171129_1280x720h.mp4" )
+
-Allocate and add the Player controller to your view hierarchy.
- self.player = Player()
- self.player.playerDelegate = self
- self.player.playbackDelegate = self
- self.player.view.frame = self.view.bounds
+play/pause/chill 🏖️
+player . playFromBeginning ()
+player . pause ()
+
- self.addChildViewController(self.player)
- self.view.addSubview(self.player.view)
- self.player.didMove(toParentViewController: self)
+Adjust the fill mode for the video, if needed. Note: On iOS, this property is ignored if using system-supplied playback controls.
+player . fillMode = . resizeAspectFit
-Provide the file path to the resource you would like to play locally or stream. Ensure you’re including the file extension.
-let videoUrl: URL = // file or http url
-self.player.url = videoUrl
+The fill mode can be set to the following values:
+
+.resizeAspectFit (default)
+
+
+
+.resizeAspectFill
+
+
+
+.resizeStretch (aka please don’t. I mean look at that poor thing)
+
+
+
+Display video playback progress, if desired. Note, all delegate methods are optional.
+extension ViewController : PlayerPlaybackDelegate {
+ public func playerPlaybackWillStartFromBeginning ( player : Player ) {}
+
+ public func playerPlaybackDidEnd ( player : Player ) {}
+
+ public func playerCurrentTimeDidChange ( player : Player ) {
+ let currentProgress = Float ( player . currentTime / player . maximumDuration )
+ progressView . setProgress ( currentProgress , animated : true )
+ }
+
+ public func playerPlaybackWillLoop ( player : Player ) {
+ progressView . setProgress ( 0.0 , animated : false )
+ }
+}
+iOS & tvOS
+
+On iOS/tvOS platforms, the player displays system-supplied playback controls by default.
+
+
+
+
-play/pause/chill
- self.player.playFromBeginning()
+These are optional and can be disabled as follows:
+...
+// Need to set before calling `add(to:)`
+player . usesSystemPlaybackControls = false
+player . add ( to : self )
+macOS
-Adjust the fill mode for the video, if needed.
- self.player.fillMode = PlayerFillMode.resizeAspectFit.avFoundationType
+On the macOS platform, the player can display media controls as well.
+player . controlsStyle = . floating
-Display video playback progress, if needed.
-extension ViewController: PlayerPlaybackDelegate {
+The controls’ style can be set to the following:
- public func playerPlaybackWillStartFromBeginning(_ player: Player) {
- }
+.none
- public func playerPlaybackDidEnd(_ player: Player) {
- }
+.inline (default)
- public func playerCurrentTimeDidChange(_ player: Player) {
- let fraction = Double(player.currentTime) / Double(player.maximumDuration)
- self._playbackViewController?.setProgress(progress: CGFloat(fraction), animated: true)
- }
+
- public func playerPlaybackWillLoop(_ player: Player) {
- self. _playbackViewController?.reset()
- }
+.minimal
-}
-
+
+
+.floating
+
+
Documentation
You can find the docs here . Documentation is generated with jazzy and hosted on GitHub-Pages .
@@ -155,9 +213,14 @@
Need help? Use Stack Overflow with the tag ‘player-swift’.
Questions? Use Stack Overflow with the tag ‘player-swift’.
Found a bug? Open an issue .
-Feature idea? Open an issue .
+Feature idea? Open an issue . Do it yourself & PR when done 😅 (or you can open an issue).
Want to contribute? Submit a pull request .
+Used In
+
+
+Cards — Awesome iOS 11 appstore cards written in Swift.
+
Resources
@@ -167,6 +230,13 @@ Resources
PBJVision , iOS camera engine, features touch-to-record video, slow motion video, and photo capture
PBJVideoPlayer , a simple iOS video player library, written in obj-c
+Contributors
+
+
License
Player is available under the MIT license, see the LICENSE file for more information.
@@ -174,8 +244,8 @@ License
diff --git a/docs/docsets/Player.docset/Contents/Resources/Documents/search.json b/docs/docsets/Player.docset/Contents/Resources/Documents/search.json
index d4697e6..396a8ac 100644
--- a/docs/docsets/Player.docset/Contents/Resources/Documents/search.json
+++ b/docs/docsets/Player.docset/Contents/Resources/Documents/search.json
@@ -1 +1 @@
-{"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP26playerCurrentTimeDidChangeyA2ACF":{"name":"playerCurrentTimeDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB22WillStartFromBeginningyA2ACF":{"name":"playerPlaybackWillStartFromBeginning(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB6DidEndyA2ACF":{"name":"playerPlaybackDidEnd(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB8WillLoopyA2ACF":{"name":"playerPlaybackWillLoop(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP11playerReadyyA2ACF":{"name":"playerReady(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP28playerPlaybackStateDidChangeyA2ACF":{"name":"playerPlaybackStateDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP29playerBufferingStateDidChangeyA2ACF":{"name":"playerBufferingStateDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP25playerBufferTimeDidChangeySdF":{"name":"playerBufferTimeDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html":{"name":"PlayerDelegate","abstract":"Player delegate protocol
"},"Protocols/PlayerPlaybackDelegate.html":{"name":"PlayerPlaybackDelegate","abstract":"Player playback protocol
"},"Enums/BufferingState.html#/s:6Player14BufferingStateO7unknownA2CmF":{"name":"unknown","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:6Player14BufferingStateO5readyA2CmF":{"name":"ready","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:6Player14BufferingStateO7delayedA2CmF":{"name":"delayed","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:s23CustomStringConvertibleP11descriptionSSv":{"name":"description","parent_name":"BufferingState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO7stoppedA2CmF":{"name":"stopped","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO7playingA2CmF":{"name":"playing","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO6pausedA2CmF":{"name":"paused","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO6failedA2CmF":{"name":"failed","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:s23CustomStringConvertibleP11descriptionSSv":{"name":"description","parent_name":"PlaybackState"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO6resizeA2CmF":{"name":"resize","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO012resizeAspectB0A2CmF":{"name":"resizeAspectFill","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO15resizeAspectFitA2CmF":{"name":"resizeAspectFit","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO16avFoundationTypeSSv":{"name":"avFoundationType","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html":{"name":"PlayerFillMode","abstract":"Video fill mode options for Player.fillMode .
"},"Enums/PlaybackState.html":{"name":"PlaybackState","abstract":"Asset playback states.
"},"Enums/BufferingState.html":{"name":"BufferingState","abstract":"Asset buffering states.
"},"Classes/Player.html#/s:6PlayerAAC14playerDelegateAA0aC0_pSgXwv":{"name":"playerDelegate","abstract":"Player delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC16playbackDelegateAA0a8PlaybackC0_pSgXwv":{"name":"playbackDelegate","abstract":"Playback delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3url10Foundation3URLVSgv":{"name":"url","abstract":"Local or remote URL for the file asset to be played.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8autoplaySbv":{"name":"autoplay","abstract":"Determines if the video should autoplay when a url is set
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5assetSo7AVAssetCSgv":{"name":"asset","abstract":"For setting up with AVAsset instead of URL","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5mutedSbv":{"name":"muted","abstract":"
Mutes audio playback when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6volumeSfv":{"name":"volume","abstract":"Volume for the player, ranging from 0.0 to 1.0 on a linear scale.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8fillModeSSv":{"name":"fillMode","abstract":"Specifies how the video is displayed within a player layer’s bounds.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC33playbackPausesWhenResigningActiveSbv":{"name":"playbackPausesWhenResigningActive","abstract":"
Pauses playback automatically when resigning active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC30playbackPausesWhenBackgroundedSbv":{"name":"playbackPausesWhenBackgrounded","abstract":"Pauses playback automatically when backgrounded.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC31playbackResumesWhenBecameActiveSbv":{"name":"playbackResumesWhenBecameActive","abstract":"Resumes playback when became active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC37playbackResumesWhenEnteringForegroundSbv":{"name":"playbackResumesWhenEnteringForeground","abstract":"Resumes playback when entering foreground.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackLoopsSbv":{"name":"playbackLoops","abstract":"Playback automatically loops continuously when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20playbackFreezesAtEndSbv":{"name":"playbackFreezesAtEnd","abstract":"Playback freezes on last frame frame at end when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackStateAA08PlaybackC0Ov":{"name":"playbackState","abstract":"Current playback state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14bufferingStateAA09BufferingC0Ov":{"name":"bufferingState","abstract":"Current buffering state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10bufferSizeSdv":{"name":"bufferSize","abstract":"Playback buffering size in seconds.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC21playbackEdgeTriggeredSbv":{"name":"playbackEdgeTriggered","abstract":"Playback is not automatically triggered from state changes when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC15maximumDurationSdv":{"name":"maximumDuration","abstract":"Maximum duration of playback.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11currentTimeSdv":{"name":"currentTime","abstract":"Media playback’s current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11naturalSizeSC6CGSizeVv":{"name":"naturalSize","abstract":"The natural dimensions of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20layerBackgroundColorSo7UIColorCSgv":{"name":"layerBackgroundColor","abstract":"Player view’s initial background color.
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)init":{"name":"init()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithCoder:":{"name":"init(coder:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithNibName:bundle:":{"name":"init(nibName:bundle:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)loadView":{"name":"loadView()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidLoad":{"name":"viewDidLoad()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidDisappear:":{"name":"viewDidDisappear(_:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC17playFromBeginningyyF":{"name":"playFromBeginning()","abstract":"Begins playback of the media from the beginning.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC19playFromCurrentTimeyyF":{"name":"playFromCurrentTime()","abstract":"Begins playback of the media from the current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5pauseyyF":{"name":"pause()","abstract":"Pauses playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4stopyyF":{"name":"stop()","abstract":"Stops playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySC6CMTimeV2to_ySbcSg17completionHandlertF":{"name":"seek(to:completionHandler:)","abstract":"Updates playback to the specified time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10seekToTimeySC6CMTimeV2to_AE15toleranceBeforeAE0G5AfterySbcSg17completionHandlertF":{"name":"seekToTime(to:toleranceBefore:toleranceAfter:completionHandler:)","abstract":"Updates the playback time to the specified time bound.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC12takeSnapshotSo7UIImageCyF":{"name":"takeSnapshot()","abstract":"Captures a snapshot of the current Player view.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11playerLayerSo08AVPlayerC0CSgyF":{"name":"playerLayer()","abstract":"Return the av player layer for consumption by","parent_name":"Player"},"Classes/Player.html#/c:@CM@Player@objc(cs)Player(im)observeValueForKeyPath:ofObject:change:context:":{"name":"observeValue(forKeyPath:of:change:context:)","abstract":"
Undocumented
","parent_name":"Player"},"Classes/Player.html":{"name":"Player","abstract":"▶️ Player, simple way to play and stream media
"},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally.
"},"Enums.html":{"name":"Enumerations","abstract":"The following enumerations are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally.
"}}
\ No newline at end of file
+{"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerCurrentTimeDidChangeWithPlayer:":{"name":"playerCurrentTimeDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackWillStartFromBeginningWithPlayer:":{"name":"playerPlaybackWillStartFromBeginning(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackDidEndWithPlayer:":{"name":"playerPlaybackDidEnd(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackWillLoopWithPlayer:":{"name":"playerPlaybackWillLoop(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerReadyWithPlayer:":{"name":"playerReady(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerPlaybackErrorWithPlayer:error:":{"name":"playerPlaybackError(player:error:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerPlaybackStateDidChangeWithPlayer:":{"name":"playerPlaybackStateDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerBufferingStateDidChangeWithPlayer:":{"name":"playerBufferingStateDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerBufferTimeDidChangeWithBufferTime:":{"name":"playerBufferTimeDidChange(bufferTime:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html":{"name":"PlayerDelegate","abstract":"Player delegate protocol
"},"Protocols/PlayerPlaybackDelegate.html":{"name":"PlayerPlaybackDelegate","abstract":"Player playback protocol
"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO13resizeStretchA2DmF":{"name":"resizeStretch","abstract":"Specifies that the video should be stretched to fill the layer’s bounds.
","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO012resizeAspectB0A2DmF":{"name":"resizeAspectFill","abstract":"Specifies that the player should preserve the video’s aspect ratio and fill the layer’s bounds.
","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO15resizeAspectFitA2DmF":{"name":"resizeAspectFit","abstract":"Specifies that the player should preserve the video’s aspect ratio and fit the video within","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"FillMode"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO7unknownA2DmF":{"name":"unknown","abstract":"
Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO5readyA2DmF":{"name":"ready","abstract":"Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO7delayedA2DmF":{"name":"delayed","abstract":"Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"BufferingState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO7stoppedA2DmF":{"name":"stopped","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO7playingA2DmF":{"name":"playing","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO6pausedA2DmF":{"name":"paused","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO6failedA2DmF":{"name":"failed","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"PlaybackState"},"Classes/Player.html#/s:6PlayerAAC14ViewControllera":{"name":"ViewController","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5Imagea":{"name":"Image","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5Colora":{"name":"Color","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14SnapshotResulta":{"name":"SnapshotResult","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC7NibNamea":{"name":"NibName","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/ViewController":{"name":"ViewController","parent_name":"Player"},"Classes/Player.html#/Image":{"name":"Image","parent_name":"Player"},"Classes/Player.html#/Color":{"name":"Color","parent_name":"Player"},"Classes/Player.html#/SnapshotResult":{"name":"SnapshotResult","parent_name":"Player"},"Classes/Player.html#/NibName":{"name":"NibName","parent_name":"Player"},"Classes/Player/PlaybackState.html":{"name":"PlaybackState","abstract":"Asset playback states.
","parent_name":"Player"},"Classes/Player/BufferingState.html":{"name":"BufferingState","abstract":"Asset buffering states.
","parent_name":"Player"},"Classes/Player/FillMode.html":{"name":"FillMode","abstract":"Video fill mode options for the fillMode property.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14playerDelegateAA0aC0_pSgXwvp":{"name":"playerDelegate","abstract":"Player delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC16playbackDelegateAA0a8PlaybackC0_pSgXwvp":{"name":"playbackDelegate","abstract":"Playback delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3url10Foundation3URLVSgvp":{"name":"url","abstract":"Local or remote URL for the file asset to be played.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8autoplaySbvp":{"name":"autoplay","abstract":"Determines if the video should autoplay when a url is set
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5assetSo7AVAssetCSgvp":{"name":"asset","abstract":"For setting up with AVAsset instead of URL
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5mutedSbvp":{"name":"muted","abstract":"Mutes audio playback when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6volumeSfvp":{"name":"volume","abstract":"Volume for the player, ranging from 0.0 to 1.0 on a linear scale.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8fillModeAB04FillC0Ovp":{"name":"fillMode","abstract":"Specifies how the video is displayed within a player layer’s bounds.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20layerBackgroundColorSo7NSColorCSgvp":{"name":"layerBackgroundColor","abstract":"
Player view’s initial background color.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13controlsStyleSC020AVPlayerViewControlsC0Ovp":{"name":"controlsStyle","abstract":"The player view’s controls style.
","parent_name":"Player"},"Classes/Player.html#/usesSystemPlaybackControls":{"name":"usesSystemPlaybackControls","abstract":"A Boolean value that indicates whether the player shows playback controls.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC33playbackPausesWhenResigningActiveSbvp":{"name":"playbackPausesWhenResigningActive","abstract":"
Pauses playback automatically when resigning active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC30playbackPausesWhenBackgroundedSbvp":{"name":"playbackPausesWhenBackgrounded","abstract":"Pauses playback automatically when backgrounded (on macOS, when hidden).
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC31playbackResumesWhenBecameActiveSbvp":{"name":"playbackResumesWhenBecameActive","abstract":"Resumes playback when became active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC37playbackResumesWhenEnteringForegroundSbvp":{"name":"playbackResumesWhenEnteringForeground","abstract":"Resumes playback when entering foreground. (on macOS, when unhidden)
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC9isPlayingSbvp":{"name":"isPlaying","abstract":"Whether the player is currently playing.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackLoopsSbvp":{"name":"playbackLoops","abstract":"
Playback automatically loops continuously when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20playbackFreezesAtEndSbvp":{"name":"playbackFreezesAtEnd","abstract":"Playback freezes on last frame frame at end when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackStateAB08PlaybackC0Ovp":{"name":"playbackState","abstract":"Current playback state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14bufferingStateAB09BufferingC0Ovp":{"name":"bufferingState","abstract":"Current buffering state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10bufferSizeSdvp":{"name":"bufferSize","abstract":"Playback buffering size in seconds.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC21playbackEdgeTriggeredSbvp":{"name":"playbackEdgeTriggered","abstract":"Playback is not automatically triggered from state changes when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC15maximumDurationSdvp":{"name":"maximumDuration","abstract":"Maximum duration of playback.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11currentTimeSdvp":{"name":"currentTime","abstract":"Media playback’s current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11naturalSizeSC6CGSizeVSgvp":{"name":"naturalSize","abstract":"The natural dimensions of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC02avA0So8AVPlayerCvp":{"name":"avPlayer","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC02avA4ItemSo08AVPlayerC0CSgvp":{"name":"avPlayerItem","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/avPlayerViewController":{"name":"avPlayerViewController","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)init":{"name":"init()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithCoder:":{"name":"init(coder:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithNibName:bundle:":{"name":"init(nibName:bundle:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3addySo16NSViewControllerC2to_tF":{"name":"add(to:)","abstract":"Adds a player to the given view controller.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6removeySo16NSViewControllerC4from_tF":{"name":"remove(from:)","abstract":"
Removes the player from the given view controller.","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)loadView":{"name":"loadView()","abstract":"
Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidLoad":{"name":"viewDidLoad()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidDisappear":{"name":"viewDidDisappear()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/viewDidDisappear(_:)":{"name":"viewDidDisappear(_:)","parent_name":"Player"},"Classes/Player.html#/playerViewSet(player:)":{"name":"playerViewSet(player:)","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC17playFromBeginningyyF":{"name":"playFromBeginning()","abstract":"Begins playback of the media from the beginning.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC19playFromCurrentTimeyyF":{"name":"playFromCurrentTime()","abstract":"Begins playback of the media from the current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5pauseyyF":{"name":"pause()","abstract":"Pauses playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4stopyyF":{"name":"stop()","abstract":"Stops playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySC6CMTimeV2to_ySbcSg17completionHandlertF":{"name":"seek(to:completionHandler:)","abstract":"Updates playback to the specified time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySi8toSecond_ySbcSg17completionHandlertF":{"name":"seek(toSecond:completionHandler:)","abstract":"Sets the current playback time to the specified second mark and executes the specified block when the seek","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10seekToTimeySC6CMTimeV2to_AE15toleranceBeforeAE0G5AfterySbcSg17completionHandlertF":{"name":"seekToTime(to:toleranceBefore:toleranceAfter:completionHandler:)","abstract":"
Updates the playback time to the specified time bound.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC12takeSnapshotSo7NSImageCSgyF":{"name":"takeSnapshot()","abstract":"Captures a snapshot of the current player view.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11playerLayerSo08AVPlayerC0CSgyF":{"name":"playerLayer()","abstract":"Return the AVPlayerLayer for consumption by things such as Picture in Picture.
","parent_name":"Player"},"Classes/Player.html#/c:@CM@Player@objc(cs)Player(im)observeValueForKeyPath:ofObject:change:context:":{"name":"observeValue(forKeyPath:of:change:context:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC36executeClosureOnMainQueueIfNecessaryyyyc04withC0_tF":{"name":"executeClosureOnMainQueueIfNecessary(withClosure:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html":{"name":"Player","abstract":"▶️ Player, simple way to play and stream media
"},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally.
"}}
\ No newline at end of file
diff --git a/docs/docsets/Player.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Player.docset/Contents/Resources/docSet.dsidx
index 2fd045d..b748d1c 100644
Binary files a/docs/docsets/Player.docset/Contents/Resources/docSet.dsidx and b/docs/docsets/Player.docset/Contents/Resources/docSet.dsidx differ
diff --git a/docs/docsets/Player.tgz b/docs/docsets/Player.tgz
index 43ea056..0ce8e3b 100644
Binary files a/docs/docsets/Player.tgz and b/docs/docsets/Player.tgz differ
diff --git a/docs/index.html b/docs/index.html
index a80f5d8..d3f0f0c 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -13,7 +13,7 @@
@@ -33,19 +33,14 @@
Player
-
-
-
- Enumerations
-
@@ -66,86 +61,149 @@
-
-Player
+ Player
+
+
+
+
+
+
+
-Player is a simple iOS video player library written in Swift .
+
-
+Player is a simple cross-platform video player library written in Swift.
+
+
+⚠️ Warning : version 0.9 has breaking API changes. ⚠️
+Looking for…
Features
[x] plays local media or streams remote media over HTTP
[x] customizable UI and user interaction
+[x] optional system-supplied playback controls
[x] no size restrictions
[x] orientation change support
[x] simple API
+[x] AirPlay & PIP support (see AVPlayerController documentation)
-Quick Start
+I’m a Rapper Wrapper
-Player is available for installation using the Cocoa dependency manager CocoaPods . Alternatively, you can simply copy the Player.swift file into your Xcode project.
-# CocoaPods
-swift_version = "4.0"
-pod "Player" , "~> 0.8.0"
+
+Installation
-# Carthage
-github "piemonte/Player" ~> 0 . 8 . 0
+Player is available for installation using CocoaPods or Carthage. Alternatively, you can simply copy the Player.swift file into your Xcode project.
+
+pod "Player"
-Need Swift 3? Use release 0.7.0
-Usage
+Need Swift 3? Use release 0.7.0. Note : macOS and system-supplied playback controls not supported.
+pod "Player" , "~> 0.7.0"
+
+
+github "piemonte/Player"
+
+Quick Start
+
+The sample projects provide an example of how to integrate Player , otherwise you can follow these steps.
+
+Create and add the Player to your view controller.
+let player = Player ()
+// Optional
+player . playerDelegate = self
+// Optional
+player . playbackDelegate = self
+player . view . frame = view . bounds
+player . add ( to : self )
+
-The sample project provides an example of how to integrate Player , otherwise you can follow these steps.
+Provide the file path to the resource you would like to play locally or stream. Ensure you’re including the file extension.
+player . url = URL ( string : "https://www.apple.com/105/media/us/iphone-x/2017/01df5b43-28e4-4848-bf20-490c34a926a7/films/meet-iphone-x/iphone-x-meet-iphone-tpl-cc-us-20171129_1280x720h.mp4" )
+
-Allocate and add the Player controller to your view hierarchy.
- self.player = Player()
- self.player.playerDelegate = self
- self.player.playbackDelegate = self
- self.player.view.frame = self.view.bounds
+play/pause/chill 🏖️
+player . playFromBeginning ()
+player . pause ()
+
- self.addChildViewController(self.player)
- self.view.addSubview(self.player.view)
- self.player.didMove(toParentViewController: self)
+Adjust the fill mode for the video, if needed. Note: On iOS, this property is ignored if using system-supplied playback controls.
+player . fillMode = . resizeAspectFit
-Provide the file path to the resource you would like to play locally or stream. Ensure you’re including the file extension.
-let videoUrl: URL = // file or http url
-self.player.url = videoUrl
+The fill mode can be set to the following values:
+
+.resizeAspectFit (default)
+
+
+
+.resizeAspectFill
+
+
+
+.resizeStretch (aka please don’t. I mean look at that poor thing)
+
+
+
+Display video playback progress, if desired. Note, all delegate methods are optional.
+extension ViewController : PlayerPlaybackDelegate {
+ public func playerPlaybackWillStartFromBeginning ( player : Player ) {}
+
+ public func playerPlaybackDidEnd ( player : Player ) {}
+
+ public func playerCurrentTimeDidChange ( player : Player ) {
+ let currentProgress = Float ( player . currentTime / player . maximumDuration )
+ progressView . setProgress ( currentProgress , animated : true )
+ }
+
+ public func playerPlaybackWillLoop ( player : Player ) {
+ progressView . setProgress ( 0.0 , animated : false )
+ }
+}
+iOS & tvOS
+
+On iOS/tvOS platforms, the player displays system-supplied playback controls by default.
+
+
+
+
-play/pause/chill
- self.player.playFromBeginning()
+These are optional and can be disabled as follows:
+...
+// Need to set before calling `add(to:)`
+player . usesSystemPlaybackControls = false
+player . add ( to : self )
+macOS
-Adjust the fill mode for the video, if needed.
- self.player.fillMode = PlayerFillMode.resizeAspectFit.avFoundationType
+On the macOS platform, the player can display media controls as well.
+player . controlsStyle = . floating
-Display video playback progress, if needed.
-extension ViewController: PlayerPlaybackDelegate {
+The controls’ style can be set to the following:
- public func playerPlaybackWillStartFromBeginning(_ player: Player) {
- }
+.none
- public func playerPlaybackDidEnd(_ player: Player) {
- }
+.inline (default)
- public func playerCurrentTimeDidChange(_ player: Player) {
- let fraction = Double(player.currentTime) / Double(player.maximumDuration)
- self._playbackViewController?.setProgress(progress: CGFloat(fraction), animated: true)
- }
+
- public func playerPlaybackWillLoop(_ player: Player) {
- self. _playbackViewController?.reset()
- }
+.minimal
-}
-
+
+
+.floating
+
+
Documentation
You can find the docs here . Documentation is generated with jazzy and hosted on GitHub-Pages .
@@ -155,9 +213,14 @@
Need help? Use Stack Overflow with the tag ‘player-swift’.
Questions? Use Stack Overflow with the tag ‘player-swift’.
Found a bug? Open an issue .
-Feature idea? Open an issue .
+Feature idea? Open an issue . Do it yourself & PR when done 😅 (or you can open an issue).
Want to contribute? Submit a pull request .
+Used In
+
+
+Cards — Awesome iOS 11 appstore cards written in Swift.
+
Resources
@@ -167,6 +230,13 @@ Resources
PBJVision , iOS camera engine, features touch-to-record video, slow motion video, and photo capture
PBJVideoPlayer , a simple iOS video player library, written in obj-c
+Contributors
+
+
License
Player is available under the MIT license, see the LICENSE file for more information.
@@ -174,8 +244,8 @@ License
diff --git a/docs/search.json b/docs/search.json
index d4697e6..396a8ac 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -1 +1 @@
-{"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP26playerCurrentTimeDidChangeyA2ACF":{"name":"playerCurrentTimeDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB22WillStartFromBeginningyA2ACF":{"name":"playerPlaybackWillStartFromBeginning(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB6DidEndyA2ACF":{"name":"playerPlaybackDidEnd(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/s:6Player0A16PlaybackDelegateP06playerB8WillLoopyA2ACF":{"name":"playerPlaybackWillLoop(_:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP11playerReadyyA2ACF":{"name":"playerReady(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP28playerPlaybackStateDidChangeyA2ACF":{"name":"playerPlaybackStateDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP29playerBufferingStateDidChangeyA2ACF":{"name":"playerBufferingStateDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/s:6Player0A8DelegateP25playerBufferTimeDidChangeySdF":{"name":"playerBufferTimeDidChange(_:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html":{"name":"PlayerDelegate","abstract":"Player delegate protocol
"},"Protocols/PlayerPlaybackDelegate.html":{"name":"PlayerPlaybackDelegate","abstract":"Player playback protocol
"},"Enums/BufferingState.html#/s:6Player14BufferingStateO7unknownA2CmF":{"name":"unknown","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:6Player14BufferingStateO5readyA2CmF":{"name":"ready","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:6Player14BufferingStateO7delayedA2CmF":{"name":"delayed","abstract":"Undocumented
","parent_name":"BufferingState"},"Enums/BufferingState.html#/s:s23CustomStringConvertibleP11descriptionSSv":{"name":"description","parent_name":"BufferingState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO7stoppedA2CmF":{"name":"stopped","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO7playingA2CmF":{"name":"playing","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO6pausedA2CmF":{"name":"paused","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:6Player13PlaybackStateO6failedA2CmF":{"name":"failed","abstract":"Undocumented
","parent_name":"PlaybackState"},"Enums/PlaybackState.html#/s:s23CustomStringConvertibleP11descriptionSSv":{"name":"description","parent_name":"PlaybackState"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO6resizeA2CmF":{"name":"resize","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO012resizeAspectB0A2CmF":{"name":"resizeAspectFill","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO15resizeAspectFitA2CmF":{"name":"resizeAspectFit","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html#/s:6Player0A8FillModeO16avFoundationTypeSSv":{"name":"avFoundationType","abstract":"Undocumented
","parent_name":"PlayerFillMode"},"Enums/PlayerFillMode.html":{"name":"PlayerFillMode","abstract":"Video fill mode options for Player.fillMode .
"},"Enums/PlaybackState.html":{"name":"PlaybackState","abstract":"Asset playback states.
"},"Enums/BufferingState.html":{"name":"BufferingState","abstract":"Asset buffering states.
"},"Classes/Player.html#/s:6PlayerAAC14playerDelegateAA0aC0_pSgXwv":{"name":"playerDelegate","abstract":"Player delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC16playbackDelegateAA0a8PlaybackC0_pSgXwv":{"name":"playbackDelegate","abstract":"Playback delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3url10Foundation3URLVSgv":{"name":"url","abstract":"Local or remote URL for the file asset to be played.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8autoplaySbv":{"name":"autoplay","abstract":"Determines if the video should autoplay when a url is set
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5assetSo7AVAssetCSgv":{"name":"asset","abstract":"For setting up with AVAsset instead of URL","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5mutedSbv":{"name":"muted","abstract":"
Mutes audio playback when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6volumeSfv":{"name":"volume","abstract":"Volume for the player, ranging from 0.0 to 1.0 on a linear scale.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8fillModeSSv":{"name":"fillMode","abstract":"Specifies how the video is displayed within a player layer’s bounds.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC33playbackPausesWhenResigningActiveSbv":{"name":"playbackPausesWhenResigningActive","abstract":"
Pauses playback automatically when resigning active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC30playbackPausesWhenBackgroundedSbv":{"name":"playbackPausesWhenBackgrounded","abstract":"Pauses playback automatically when backgrounded.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC31playbackResumesWhenBecameActiveSbv":{"name":"playbackResumesWhenBecameActive","abstract":"Resumes playback when became active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC37playbackResumesWhenEnteringForegroundSbv":{"name":"playbackResumesWhenEnteringForeground","abstract":"Resumes playback when entering foreground.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackLoopsSbv":{"name":"playbackLoops","abstract":"Playback automatically loops continuously when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20playbackFreezesAtEndSbv":{"name":"playbackFreezesAtEnd","abstract":"Playback freezes on last frame frame at end when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackStateAA08PlaybackC0Ov":{"name":"playbackState","abstract":"Current playback state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14bufferingStateAA09BufferingC0Ov":{"name":"bufferingState","abstract":"Current buffering state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10bufferSizeSdv":{"name":"bufferSize","abstract":"Playback buffering size in seconds.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC21playbackEdgeTriggeredSbv":{"name":"playbackEdgeTriggered","abstract":"Playback is not automatically triggered from state changes when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC15maximumDurationSdv":{"name":"maximumDuration","abstract":"Maximum duration of playback.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11currentTimeSdv":{"name":"currentTime","abstract":"Media playback’s current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11naturalSizeSC6CGSizeVv":{"name":"naturalSize","abstract":"The natural dimensions of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20layerBackgroundColorSo7UIColorCSgv":{"name":"layerBackgroundColor","abstract":"Player view’s initial background color.
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)init":{"name":"init()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithCoder:":{"name":"init(coder:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithNibName:bundle:":{"name":"init(nibName:bundle:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)loadView":{"name":"loadView()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidLoad":{"name":"viewDidLoad()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidDisappear:":{"name":"viewDidDisappear(_:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC17playFromBeginningyyF":{"name":"playFromBeginning()","abstract":"Begins playback of the media from the beginning.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC19playFromCurrentTimeyyF":{"name":"playFromCurrentTime()","abstract":"Begins playback of the media from the current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5pauseyyF":{"name":"pause()","abstract":"Pauses playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4stopyyF":{"name":"stop()","abstract":"Stops playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySC6CMTimeV2to_ySbcSg17completionHandlertF":{"name":"seek(to:completionHandler:)","abstract":"Updates playback to the specified time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10seekToTimeySC6CMTimeV2to_AE15toleranceBeforeAE0G5AfterySbcSg17completionHandlertF":{"name":"seekToTime(to:toleranceBefore:toleranceAfter:completionHandler:)","abstract":"Updates the playback time to the specified time bound.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC12takeSnapshotSo7UIImageCyF":{"name":"takeSnapshot()","abstract":"Captures a snapshot of the current Player view.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11playerLayerSo08AVPlayerC0CSgyF":{"name":"playerLayer()","abstract":"Return the av player layer for consumption by","parent_name":"Player"},"Classes/Player.html#/c:@CM@Player@objc(cs)Player(im)observeValueForKeyPath:ofObject:change:context:":{"name":"observeValue(forKeyPath:of:change:context:)","abstract":"
Undocumented
","parent_name":"Player"},"Classes/Player.html":{"name":"Player","abstract":"▶️ Player, simple way to play and stream media
"},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally.
"},"Enums.html":{"name":"Enumerations","abstract":"The following enumerations are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally.
"}}
\ No newline at end of file
+{"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerCurrentTimeDidChangeWithPlayer:":{"name":"playerCurrentTimeDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackWillStartFromBeginningWithPlayer:":{"name":"playerPlaybackWillStartFromBeginning(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackDidEndWithPlayer:":{"name":"playerPlaybackDidEnd(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerPlaybackDelegate.html#/c:@M@Player@objc(pl)PlayerPlaybackDelegate(im)playerPlaybackWillLoopWithPlayer:":{"name":"playerPlaybackWillLoop(player:)","abstract":"Undocumented
","parent_name":"PlayerPlaybackDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerReadyWithPlayer:":{"name":"playerReady(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerPlaybackErrorWithPlayer:error:":{"name":"playerPlaybackError(player:error:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerPlaybackStateDidChangeWithPlayer:":{"name":"playerPlaybackStateDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerBufferingStateDidChangeWithPlayer:":{"name":"playerBufferingStateDidChange(player:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html#/c:@M@Player@objc(pl)PlayerDelegate(im)playerBufferTimeDidChangeWithBufferTime:":{"name":"playerBufferTimeDidChange(bufferTime:)","abstract":"Undocumented
","parent_name":"PlayerDelegate"},"Protocols/PlayerDelegate.html":{"name":"PlayerDelegate","abstract":"Player delegate protocol
"},"Protocols/PlayerPlaybackDelegate.html":{"name":"PlayerPlaybackDelegate","abstract":"Player playback protocol
"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO13resizeStretchA2DmF":{"name":"resizeStretch","abstract":"Specifies that the video should be stretched to fill the layer’s bounds.
","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO012resizeAspectB0A2DmF":{"name":"resizeAspectFill","abstract":"Specifies that the player should preserve the video’s aspect ratio and fill the layer’s bounds.
","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:6PlayerAAC8FillModeO15resizeAspectFitA2DmF":{"name":"resizeAspectFit","abstract":"Specifies that the player should preserve the video’s aspect ratio and fit the video within","parent_name":"FillMode"},"Classes/Player/FillMode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"FillMode"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO7unknownA2DmF":{"name":"unknown","abstract":"
Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO5readyA2DmF":{"name":"ready","abstract":"Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:6PlayerAAC14BufferingStateO7delayedA2DmF":{"name":"delayed","abstract":"Undocumented
","parent_name":"BufferingState"},"Classes/Player/BufferingState.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"BufferingState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO7stoppedA2DmF":{"name":"stopped","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO7playingA2DmF":{"name":"playing","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO6pausedA2DmF":{"name":"paused","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:6PlayerAAC13PlaybackStateO6failedA2DmF":{"name":"failed","abstract":"Undocumented
","parent_name":"PlaybackState"},"Classes/Player/PlaybackState.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"PlaybackState"},"Classes/Player.html#/s:6PlayerAAC14ViewControllera":{"name":"ViewController","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5Imagea":{"name":"Image","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5Colora":{"name":"Color","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14SnapshotResulta":{"name":"SnapshotResult","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC7NibNamea":{"name":"NibName","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/ViewController":{"name":"ViewController","parent_name":"Player"},"Classes/Player.html#/Image":{"name":"Image","parent_name":"Player"},"Classes/Player.html#/Color":{"name":"Color","parent_name":"Player"},"Classes/Player.html#/SnapshotResult":{"name":"SnapshotResult","parent_name":"Player"},"Classes/Player.html#/NibName":{"name":"NibName","parent_name":"Player"},"Classes/Player/PlaybackState.html":{"name":"PlaybackState","abstract":"Asset playback states.
","parent_name":"Player"},"Classes/Player/BufferingState.html":{"name":"BufferingState","abstract":"Asset buffering states.
","parent_name":"Player"},"Classes/Player/FillMode.html":{"name":"FillMode","abstract":"Video fill mode options for the fillMode property.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14playerDelegateAA0aC0_pSgXwvp":{"name":"playerDelegate","abstract":"Player delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC16playbackDelegateAA0a8PlaybackC0_pSgXwvp":{"name":"playbackDelegate","abstract":"Playback delegate.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3url10Foundation3URLVSgvp":{"name":"url","abstract":"Local or remote URL for the file asset to be played.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8autoplaySbvp":{"name":"autoplay","abstract":"Determines if the video should autoplay when a url is set
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5assetSo7AVAssetCSgvp":{"name":"asset","abstract":"For setting up with AVAsset instead of URL
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5mutedSbvp":{"name":"muted","abstract":"Mutes audio playback when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6volumeSfvp":{"name":"volume","abstract":"Volume for the player, ranging from 0.0 to 1.0 on a linear scale.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC8fillModeAB04FillC0Ovp":{"name":"fillMode","abstract":"Specifies how the video is displayed within a player layer’s bounds.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20layerBackgroundColorSo7NSColorCSgvp":{"name":"layerBackgroundColor","abstract":"
Player view’s initial background color.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13controlsStyleSC020AVPlayerViewControlsC0Ovp":{"name":"controlsStyle","abstract":"The player view’s controls style.
","parent_name":"Player"},"Classes/Player.html#/usesSystemPlaybackControls":{"name":"usesSystemPlaybackControls","abstract":"A Boolean value that indicates whether the player shows playback controls.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC33playbackPausesWhenResigningActiveSbvp":{"name":"playbackPausesWhenResigningActive","abstract":"
Pauses playback automatically when resigning active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC30playbackPausesWhenBackgroundedSbvp":{"name":"playbackPausesWhenBackgrounded","abstract":"Pauses playback automatically when backgrounded (on macOS, when hidden).
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC31playbackResumesWhenBecameActiveSbvp":{"name":"playbackResumesWhenBecameActive","abstract":"Resumes playback when became active.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC37playbackResumesWhenEnteringForegroundSbvp":{"name":"playbackResumesWhenEnteringForeground","abstract":"Resumes playback when entering foreground. (on macOS, when unhidden)
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC9isPlayingSbvp":{"name":"isPlaying","abstract":"Whether the player is currently playing.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackLoopsSbvp":{"name":"playbackLoops","abstract":"
Playback automatically loops continuously when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC20playbackFreezesAtEndSbvp":{"name":"playbackFreezesAtEnd","abstract":"Playback freezes on last frame frame at end when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC13playbackStateAB08PlaybackC0Ovp":{"name":"playbackState","abstract":"Current playback state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC14bufferingStateAB09BufferingC0Ovp":{"name":"bufferingState","abstract":"Current buffering state of the Player.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10bufferSizeSdvp":{"name":"bufferSize","abstract":"Playback buffering size in seconds.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC21playbackEdgeTriggeredSbvp":{"name":"playbackEdgeTriggered","abstract":"Playback is not automatically triggered from state changes when true.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC15maximumDurationSdvp":{"name":"maximumDuration","abstract":"Maximum duration of playback.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11currentTimeSdvp":{"name":"currentTime","abstract":"Media playback’s current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11naturalSizeSC6CGSizeVSgvp":{"name":"naturalSize","abstract":"The natural dimensions of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC02avA0So8AVPlayerCvp":{"name":"avPlayer","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC02avA4ItemSo08AVPlayerC0CSgvp":{"name":"avPlayerItem","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/avPlayerViewController":{"name":"avPlayerViewController","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)init":{"name":"init()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithCoder:":{"name":"init(coder:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)initWithNibName:bundle:":{"name":"init(nibName:bundle:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC3addySo16NSViewControllerC2to_tF":{"name":"add(to:)","abstract":"Adds a player to the given view controller.","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC6removeySo16NSViewControllerC4from_tF":{"name":"remove(from:)","abstract":"
Removes the player from the given view controller.","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)loadView":{"name":"loadView()","abstract":"
Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidLoad":{"name":"viewDidLoad()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/c:@M@Player@objc(cs)Player(im)viewDidDisappear":{"name":"viewDidDisappear()","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/viewDidDisappear(_:)":{"name":"viewDidDisappear(_:)","parent_name":"Player"},"Classes/Player.html#/playerViewSet(player:)":{"name":"playerViewSet(player:)","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC17playFromBeginningyyF":{"name":"playFromBeginning()","abstract":"Begins playback of the media from the beginning.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC19playFromCurrentTimeyyF":{"name":"playFromCurrentTime()","abstract":"Begins playback of the media from the current time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC5pauseyyF":{"name":"pause()","abstract":"Pauses playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4stopyyF":{"name":"stop()","abstract":"Stops playback of the media.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySC6CMTimeV2to_ySbcSg17completionHandlertF":{"name":"seek(to:completionHandler:)","abstract":"Updates playback to the specified time.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC4seekySi8toSecond_ySbcSg17completionHandlertF":{"name":"seek(toSecond:completionHandler:)","abstract":"Sets the current playback time to the specified second mark and executes the specified block when the seek","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC10seekToTimeySC6CMTimeV2to_AE15toleranceBeforeAE0G5AfterySbcSg17completionHandlertF":{"name":"seekToTime(to:toleranceBefore:toleranceAfter:completionHandler:)","abstract":"
Updates the playback time to the specified time bound.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC12takeSnapshotSo7NSImageCSgyF":{"name":"takeSnapshot()","abstract":"Captures a snapshot of the current player view.
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC11playerLayerSo08AVPlayerC0CSgyF":{"name":"playerLayer()","abstract":"Return the AVPlayerLayer for consumption by things such as Picture in Picture.
","parent_name":"Player"},"Classes/Player.html#/c:@CM@Player@objc(cs)Player(im)observeValueForKeyPath:ofObject:change:context:":{"name":"observeValue(forKeyPath:of:change:context:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html#/s:6PlayerAAC36executeClosureOnMainQueueIfNecessaryyyyc04withC0_tF":{"name":"executeClosureOnMainQueueIfNecessary(withClosure:)","abstract":"Undocumented
","parent_name":"Player"},"Classes/Player.html":{"name":"Player","abstract":"▶️ Player, simple way to play and stream media
"},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally.
"}}
\ No newline at end of file
diff --git a/docs/undocumented.json b/docs/undocumented.json
index bfe4360..8b863aa 100644
--- a/docs/undocumented.json
+++ b/docs/undocumented.json
@@ -1,187 +1,222 @@
{
"warnings": [
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 40,
- "symbol": "PlayerFillMode.resize",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 41,
+ "symbol": "PlayerDelegate.playerReady(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 41,
- "symbol": "PlayerFillMode.resizeAspectFill",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 42,
+ "symbol": "PlayerDelegate.playerPlaybackError(player:error:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 42,
- "symbol": "PlayerFillMode.resizeAspectFit",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 43,
+ "symbol": "PlayerDelegate.playerPlaybackStateDidChange(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
"line": 44,
- "symbol": "PlayerFillMode.avFoundationType",
- "symbol_kind": "source.lang.swift.decl.var.instance",
+ "symbol": "PlayerDelegate.playerBufferingStateDidChange(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 60,
- "symbol": "PlaybackState.stopped",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 48,
+ "symbol": "PlayerDelegate.playerBufferTimeDidChange(bufferTime:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 61,
- "symbol": "PlaybackState.playing",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 56,
+ "symbol": "PlayerPlaybackDelegate.playerCurrentTimeDidChange(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 62,
- "symbol": "PlaybackState.paused",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 57,
+ "symbol": "PlayerPlaybackDelegate.playerPlaybackWillStartFromBeginning(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 63,
- "symbol": "PlaybackState.failed",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 58,
+ "symbol": "PlayerPlaybackDelegate.playerPlaybackDidEnd(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 83,
- "symbol": "BufferingState.unknown",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 59,
+ "symbol": "PlayerPlaybackDelegate.playerPlaybackWillLoop(player:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 84,
- "symbol": "BufferingState.ready",
- "symbol_kind": "source.lang.swift.decl.enumelement",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 76,
+ "symbol": "Player.ViewController",
+ "symbol_kind": "source.lang.swift.decl.typealias",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 78,
+ "symbol": "Player.Image",
+ "symbol_kind": "source.lang.swift.decl.typealias",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 79,
+ "symbol": "Player.Color",
+ "symbol_kind": "source.lang.swift.decl.typealias",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 85,
- "symbol": "BufferingState.delayed",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 80,
+ "symbol": "Player.SnapshotResult",
+ "symbol_kind": "source.lang.swift.decl.typealias",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 81,
+ "symbol": "Player.NibName",
+ "symbol_kind": "source.lang.swift.decl.typealias",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 95,
+ "symbol": "Player.PlaybackState.stopped",
"symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 105,
- "symbol": "PlayerDelegate.playerReady(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 96,
+ "symbol": "Player.PlaybackState.playing",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 106,
- "symbol": "PlayerDelegate.playerPlaybackStateDidChange(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 97,
+ "symbol": "Player.PlaybackState.paused",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 107,
- "symbol": "PlayerDelegate.playerBufferingStateDidChange(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 98,
+ "symbol": "Player.PlaybackState.failed",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 111,
- "symbol": "PlayerDelegate.playerBufferTimeDidChange(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 107,
+ "symbol": "Player.BufferingState.unknown",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 117,
- "symbol": "PlayerPlaybackDelegate.playerCurrentTimeDidChange(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 108,
+ "symbol": "Player.BufferingState.ready",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 118,
- "symbol": "PlayerPlaybackDelegate.playerPlaybackWillStartFromBeginning(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 109,
+ "symbol": "Player.BufferingState.delayed",
+ "symbol_kind": "source.lang.swift.decl.enumelement",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 119,
- "symbol": "PlayerPlaybackDelegate.playerPlaybackDidEnd(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 387,
+ "symbol": "Player.avPlayer",
+ "symbol_kind": "source.lang.swift.decl.var.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 120,
- "symbol": "PlayerPlaybackDelegate.playerPlaybackWillLoop(_:)",
- "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 388,
+ "symbol": "Player.avPlayerItem",
+ "symbol_kind": "source.lang.swift.decl.var.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 316,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 418,
"symbol": "Player.init()",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 320,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 422,
"symbol": "Player.init(coder:)",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 328,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 435,
"symbol": "Player.init(nibName:bundle:)",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 352,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 538,
"symbol": "Player.loadView()",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 357,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 546,
"symbol": "Player.viewDidLoad()",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 371,
- "symbol": "Player.viewDidDisappear(_:)",
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 561,
+ "symbol": "Player.viewDidDisappear()",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/piemonte/Source/Player/Sources/Player.swift",
- "line": 697,
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 1082,
"symbol": "Player.observeValue(forKeyPath:of:change:context:)",
"symbol_kind": "source.lang.swift.decl.function.method.instance",
"warning": "undocumented"
+ },
+ {
+ "file": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player/Sources/Player.swift",
+ "line": 1170,
+ "symbol": "Player.executeClosureOnMainQueueIfNecessary(withClosure:)",
+ "symbol_kind": "source.lang.swift.decl.function.method.instance",
+ "warning": "undocumented"
}
],
- "source_directory": "/Users/piemonte/Source/Player"
+ "source_directory": "/Users/chriszielinski/Dropbox/Apps & Stuff/Player"
}
\ No newline at end of file
diff --git a/readme-assets/aspectFill.png b/readme-assets/aspectFill.png
new file mode 100644
index 0000000..2e0bbc1
Binary files /dev/null and b/readme-assets/aspectFill.png differ
diff --git a/readme-assets/aspectFit.png b/readme-assets/aspectFit.png
new file mode 100644
index 0000000..765edbe
Binary files /dev/null and b/readme-assets/aspectFit.png differ
diff --git a/readme-assets/floating.png b/readme-assets/floating.png
new file mode 100644
index 0000000..2fd8744
Binary files /dev/null and b/readme-assets/floating.png differ
diff --git a/readme-assets/header.gif b/readme-assets/header.gif
new file mode 100644
index 0000000..4b7e440
Binary files /dev/null and b/readme-assets/header.gif differ
diff --git a/readme-assets/inline.png b/readme-assets/inline.png
new file mode 100644
index 0000000..d0bac70
Binary files /dev/null and b/readme-assets/inline.png differ
diff --git a/readme-assets/ios-controls.png b/readme-assets/ios-controls.png
new file mode 100644
index 0000000..0e96da9
Binary files /dev/null and b/readme-assets/ios-controls.png differ
diff --git a/readme-assets/minimal.png b/readme-assets/minimal.png
new file mode 100644
index 0000000..d16b10f
Binary files /dev/null and b/readme-assets/minimal.png differ
diff --git a/readme-assets/player.gif b/readme-assets/player.gif
new file mode 100644
index 0000000..f43bd81
Binary files /dev/null and b/readme-assets/player.gif differ
diff --git a/readme-assets/stretch.png b/readme-assets/stretch.png
new file mode 100644
index 0000000..de44bcc
Binary files /dev/null and b/readme-assets/stretch.png differ
diff --git a/readme-assets/tvos-controls.png b/readme-assets/tvos-controls.png
new file mode 100644
index 0000000..032e796
Binary files /dev/null and b/readme-assets/tvos-controls.png differ