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 9 years ago)
- Default Branch: master
- Last Pushed: 2020-06-23T16:52:39.000Z (over 5 years ago)
- Last Synced: 2024-11-08T02:37:40.390Z (12 months ago)
- Language: Swift
- Size: 70.3 KB
- Stars: 133
- 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
[](https://travis-ci.org/David Alejandro/PlayerView)
[](http://cocoapods.org/pods/PlayerView)
[](http://cocoapods.org/pods/PlayerView)
[](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 [davidlondono9@gmail.com](mailto:davidlondono9@gmail.com?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, [davidlondono9@gmail.com](mailto:davidlondono9@gmail.com?subject=PlayerView is Awesome)
## License
PlayerView is available under the MIT license. See the LICENSE file for more info.