Swift開源:VGPlayer - 視頻播放器
基于AVPlayer開發的iOS播放器,支持水平手勢快進,暫停,垂直手勢支持亮度和音量調節,支持全屏,自適應屏幕旋轉方向。
示范
需求
- Swift 3
- iOS 8.0+
- XCode 8
特點
- 支持本地和網絡
- 背景播放模式。
- 手勢調節音量和亮度以及快進和快退。
- 支持全屏
- 向前滑動快速
- 鎖屏也可以全屏旋轉
- 支持重播媒體
- 支持定制播放器視圖
TODO
- Media Cache
- Virtual reality
- Subtitle
使用
Play Video
// init
self.player = VGPlayer(URL: url)
// or
self.player.replaceVideo(url)
Custom player view
- Subclass VGPlayerView
- Alloc VGPlaye when set up
let playeView = VGCustomPlayerView()
self.player = VGPlayer(playerView: playeView)
// customPlayerView
class VGCustomPlayerView: VGPlayerView {
var playRate: Float = 1.0
var rateButton = UIButton(type: .custom)
override func configurationUI() {
super.configurationUI()
self.topView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.09701412671)
self.bottomView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.09701412671)
self.topView.addSubview(rateButton)
rateButton.snp.makeConstraints { (make) in
make.left.equalTo(titleLabel.snp.right).offset(10)
make.centerY.equalTo(closeButton)
}
rateButton.tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
rateButton.setTitle("x1.0", for: .normal)
rateButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 12.0)
rateButton.addTarget(self, action: #selector(onRateButton), for: .touchUpInside)
rateButton.isHidden = false
}
// .....more
AutoLayout use SnapKit
self.player.replaceVideo(url)
view.addSubview(self.player.displayView)
self.player.play()
self.player.backgroundMode = .proceed
self.player.delegate = self
self.player.displayView.delegate = self
self.player.displayView.titleLabel.text = "China NO.1"
self.player.displayView.snp.makeConstraints { [weak self] (make) in
guard let strongSelf = self else { return }
make.top.equalTo(strongSelf.view.snp.top)
make.left.equalTo(strongSelf.view.snp.left)
make.right.equalTo(strongSelf.view.snp.right)
make.height.equalTo(strongSelf.view.snp.width).multipliedBy(3.0/4.0) // you can 9.0/16.0
}
Background playback
- Project setting
- AppDelegate settings
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
}
catch let error as NSError
{
print(error)
}
return true
}
- VGPlayer Background playback mode to proceed
self.player.backgroundMode = .proceed
Delegate methods optional
// player delegate
// play state
func vgPlayer(_ player: VGPlayer, stateDidChange state: VGPlayerState)
// playe Duration
func vgPlayer(_ player: VGPlayer, playerDurationDidChange currentDuration: TimeInterval, totalDuration: TimeInterval)
// buffer state
func vgPlayer(_ player: VGPlayer, bufferStateDidChange state: VGPlayerBufferstate)
// buffered Duration
func vgPlayer(_ player: VGPlayer, bufferedDidChange bufferedDuration: TimeInterval, totalDuration: TimeInterval)
// play error
func vgPlayer(_ player: VGPlayer, playerFailed error: VGPlayerError)
// player view delegate
/// fullscreen
func vgPlayerView(_ playerView: VGPlayerView, willFullscreen fullscreen: Bool)
/// close play view
func vgPlayerView(didTappedClose playerView: VGPlayerView)
/// displaye control
func vgPlayerView(didDisplayControl playerView: VGPlayerView)
安裝
-
Download VGPlayer. Move to your project.
-
Cocoapods
platform :ios, '8.0'
use_frameworks!
pod 'VGPlayer'
參考
- https://techblog.toutiao.com/2017/03/28/fullscreen/
- https://developer.apple.com/library/content/qa/qa1668/_index.html
- https://developer.apple.com/documentation/avfoundation
- https://stackoverflow.com/questions/808503/uibutton-making-the-hit-area-larger-than-the-default-hit-area/13977921
- https://gist.github.com/onevcat/2d1ceff1c657591eebde
許可
MIT
項目主頁:http://www.baiduhome.net/lib/view/home/1497488278534
本文由用戶 hutyone 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!