Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/davidlondono/PlayerView
- Owner: davidlondono
- License: mit
- Created: 2016-02-18T23:46:35.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-06-23T16:52:39.000Z (over 4 years ago)
- Last Synced: 2024-03-30T22:01:49.371Z (7 months ago)
- Language: Swift
- Size: 70.3 KB
- Stars: 132
- Watchers: 9
- Forks: 46
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - PlayerView - Player View is a delegated view using AVPlayer of Swift. (Media / Video)
- awesome-swift - PlayerView - Easy to use video player using a UIView, manage rate of reproduction, screenshots and callbacks-delegate for player state. (Libs / Video)
- awesome-swift - PlayerView - Easy to use video player using a UIView, manage rate of reproduction, screenshots and callbacks-delegate for player state. (Libs / Video)
- awesome-ios-star - PlayerView - Player View is a delegated view using AVPlayer of Swift. (Media / Video)
- fucking-awesome-swift - PlayerView - Easy to use video player using a UIView, manage rate of reproduction, screenshots and callbacks-delegate for player state. (Libs / Video)
- awesome-swift - PlayerView - Player View is a delegated view using AVPlayer of Swift ` 📝 a year ago ` (Video [🔝](#readme))
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 PackageDescriptionlet 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.