Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/davidlondono/PlayerView

Player View is a delegated view using AVPlayer of Swift
https://github.com/davidlondono/PlayerView

Last synced: 3 months ago
JSON representation

Player View is a delegated view using AVPlayer of Swift

Awesome Lists containing this project

README

        

# PlayerView

[![CI Status](http://img.shields.io/travis/David Alejandro/PlayerView.svg?style=flat)](https://travis-ci.org/David Alejandro/PlayerView)
[![Version](https://img.shields.io/cocoapods/v/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView)
[![License](https://img.shields.io/cocoapods/l/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView)
[![Platform](https://img.shields.io/cocoapods/p/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView)

An elegant wraper API for AVPlayer to get events over Delegate so you dount need to use KVO

## Installation

PlayerView is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:

```ruby
pod "PlayerView"
```

### CocoaPods

`PlayerView` is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your `Podfile`:

```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :iOS, '8.0'
use_frameworks!

pod 'PlayerView'
```

### Carthage

Installation is also available using the dependency manager [Carthage](https://github.com/Carthage/Carthage).

To integrate, add the following line to your `Cartfile`:

```ogdl
github "davidlondono/PlayerView" >= 0.2.7
```

### Swift Package Manager

Installation can be done with the [Swift Package Manager](https://swift.org/package-manager/), add the following in your `Package.swift` :

```Swift
import PackageDescription

let package = Package(
name: "PlayerView",
dependencies: [
.Package(url: "https://github.com/davidlondono/PlayerView.git", majorVersion: 0),
]
)
```

## Usage

To run the example project, clone the repo, and run `pod install` from the Example directory first.

### Storyboard
Just add a view and add as a class on **Identity inspector > Custom Class > Class**, make sure to add Module if is imported externaly (Pod, Package manager ....)

```Swift
import PlayerView
```

```Swift
@IBOutlet var playerVideo: PlayerView!
```

### Code

Just need to add de view as a normal View:

```Swift
import PlayerView
```

```Swift

let playerVideo = PlayerVideo()

//also could add frame:
// let playerVideo = PlayerVideo(frame: frame)
view.addSubView(playerVideo)

```

## Control

```Swift
//set aspect mode of video
//default AVLayerVideoGravityResizeAspectFill
playerVideo.fillMode = .ResizeAspect

//Set or Get the seconds of the current time of reproduction
//this will set to reproduce on 3.5 seconds
playerVideo.currentTime = 3.5

//define the time interval to get callback delegate of the current time of reproduction, default sends 60 times on 1 second
//default CMTimeMake(1, 60)
//this send the time one time per one second
playerVideo.interval = CMTimeMake(1, 1)

//set and get the speed of reproduction
//if speed is set to 0, the video will pause (same as playerVideo.pause())
//if speed is set to 1,0, the video will pause (same as playerVideo.play())
playerVideo.rate = 0.5

//play the video at rate 1.0
playerVideo.play()

// pause the video on current time
playerVideo.pause()

// stop the video on current time
playerVideo.stop()

// stop the video on current time
playerVideo.next()

//to set the url of Video
if let url = NSURL(string: "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4") {
playerVideo.url = url
//or
playerVideo.urls = [url]

//add videos on queue
playerVideo.addVideosOnQueue(urls: [url])
}

//Take a screenshot on time, and return time to ensure the tolerance of the image
//on 20.7 seconds
let(image1, time1) = playerVideo.screenshotTime(20.7)
//on actual time
let(image2, time2) = playerVideo.screenshotTime()

//on actual time
let image3 = playerVideo.screenshot()

//reset queue and observers
playerVideo.resetPlayer()
```
## Delegate
you could get event data from the PlayerView, just implement the delegate
all the functions are optionals

```Swift
import PlayerView
import AVFoundation
```

```Swift
playerVideo.delegate = self
```

```Swift

extension MyClass:PlayerViewDelegate {

func playerVideo(player: PlayerView, statusPlayer: PlayerViewStatus, error: NSError?) {
//got the status of the player
//useful to know if is ready to play
//if status is unknown then got the error
}

func playerVideo(player: PlayerView, statusItemPlayer: PlayerViewItemStatus, error: NSError?) {
//some status got here first, this is the status of AVPlayerItem
//useful to know if is ready to play
//if status is unknown then got the error
}

func playerVideo(player: PlayerView, loadedTimeRanges: [PlayerviewTimeRange]) {
//got the buffer of the video
//to know the progress loaded

//this will get the seconds of the end of the buffer
//loadedTimeRanges.first!.end.seconds

}

func playerVideo(player: PlayerView, duration: Double) {
//the player knows the duration of the video to reproduce on seconds
}

func playerVideo(player: PlayerView, currentTime: Double) {
//executed using the playerVideo.interval
//only executed when the is reproducing, on pause (rate == 1) this doesn't execute
//default executed like 60 frames per seconds, so 60 times on a second
}

func playerVideo(player: PlayerView, rate: Float) {
//if the speed of reproduction changed by pausing, playing or changing speed
}

func playerVideo(playerFinished player: PlayerView) {
//when the video finishes the reproduction to the end
}
}
```

## Extra Info

- If you like another shorcut, have a better implementation of something or just say thanks, just send me an email [[email protected]](mailto:[email protected]?subject=PlayerView is Awesome)

- Im using a video on http, so I needed to add this on the `info.plist` to accept all on http,
this is not safe to use on production, so better to add only trusted domains or use https

```xml
NSAppTransportSecurity


NSAllowsArbitraryLoads

```

## Author

David Alejandro, [[email protected]](mailto:[email protected]?subject=PlayerView is Awesome)

## License

PlayerView is available under the MIT license. See the LICENSE file for more info.