VGPlayer 0.2.0

VGPlayer 0.2.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017 年 9 月
SwiftSwift 版本4.0
SPM支持 SPM

Vein 维护。



VGPlayer 0.2.0

  • 作者
  • VeinGuo

Banners

Swift 语言开发的基于 AVPlayer iOS 播放器,支持横向手势快进、暂停,垂直手势调整亮度及音量,支持全屏,自适应屏幕旋转方向。

中文介绍

演示

demo1

demo2

demo3

要求

  • Swift 3
  • iOS 8.0+
  • Xcode 8

功能

  • [x] 支持本地和网络播放
  • [x] 背景播放模式。
  • [x] 通过手势调整音量和亮度以及快进和快退。
  • [x] 支持全屏
  • [x] 滑动快进和快退
  • [x] 锁屏也可以全屏旋转
  • [x] 支持重放媒体
  • [x] 支持自定义播放器视图
  • [x] 支持字幕(格式:srt & ass)
  • [x] 媒体缓存

待办事项

  • [ ] 虚拟现实

更新

  • 2017-6-13 v0.0.1
  • 2017-6-17 支持字幕(格式:srt & ass)v0.0.2
  • 2017-7-1 媒体缓存 v0.1.0
  • 2017-7-3 修复一些编译警告,支持 carthage。v0.1.1
  • 2017-7-11 修复全部编译警告。v0.1.2
  • 2017-7-16 修复 URL 解析错误。v0.1.3
  • 2017-8-10
    • 修复 iOS 9 无法播放
    • 修复退出全屏框架错误
    • 播放器滑块拇指添加高亮
    • 示例添加演示
  • 2017-9-6 v0.1.5
    • 修复 URL 参数解析器
    • 修复暂停播放错误

用法

播放视频

// init 
self.player = VGPlayer(URL: url)
// or
self.player.replaceVideo(url)

自定义播放器视图

  • 继承 VGPlayerView
  • 配置时分配 VGPlayer
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

使用自动布局 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.left.right.equalToSuperview()
            make.height.equalTo(strongSelf.view.snp.width).multipliedBy(3.0/4.0) // you can 9.0/16.0
        }

媒体缓存(参考: VIMediaCache

  • VGPlayer 使用 VIMediaCache 实现。

  • 使用 AVAssetResourceLoader 控制 AVPlayer 下载媒体数据。

  • 缓存使用范围请求数据,您可以取消下载,分片缓存

  • 如果您使用模拟器调试,您可以在模拟器缓存中查看VGPlayer缓存文件。test

  • 用法

// Settings maxCacheSize
VGPlayerCacheManager.shared.cacheConfig.maxCacheSize = 160000000

// Setting maxCacheAge   default one weak
VGPlayerCacheManager.shared.cacheConfig.maxCacheAge = 60 * 60 * 24 * 7

// clean all cache
VGPlayerCacheManager.shared.cleanAllCache()

// clean old disk cache. 
// This is an async operation.
VGPlayerCacheManager.shared.cleanOldFiles { }

后台播放

  • 项目设置

backgroundModes

  • AppDelegate设置
    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后台播放模式设置进行
self.player.backgroundMode = .proceed

代理方法可选

// 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)
    

安装

  • 下载VGPlayer。移动到您的项目。

  • CocoaPods

platform :ios, '8.0'
use_frameworks!
pod 'VGPlayer'
  • Carthage
github "VeinGuo/VGPlayer"

运行carthage update以构建框架,并将构建好的VGPlayer.frameworkSnapKit.framework拖到您的Xcode项目中。

参考

许可

MIT