iOS进阶知识程序员iOS Developer

Swift 封装一个视频播放器 VGPlayer

2017-06-13  本文已影响1317人  Vein_
Banners.png

# 前言

之前学习了 Swift 一直想做一个项目,这次下定决心花了近1个月的空闲时间基于 AVPlayer 封装了一个视频播放器。

# 源代码

# 更新列表

# 演示

demo1.gif demo2.gif vgplayer_embed_in_cell.gif

# 功能

# 实现思路

流程图.png

VGPlayer

VGPlayer是一个对AVPlayer封装提供播放功能,displayView为播放器画面绘制。
主要是使用了以下几个类:

VGPlayer封装AVPlayer提供给调用者可选代理方法

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

VGPlayerView

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

VGPlayerError

# 细节调整

backgroundModes.png
// 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 mode

self.player.backgroundMode = .proceed

边播边缓存 (参考: VIMediaCache)

// 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 { }

# 参考

# 总结

上一篇 下一篇

猜你喜欢

热点阅读