登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

视频播放器 VGPlayer

[复制链接]
来自: Vein__ 分类: iOS精品源码 上传时间: 2017-6-14 18:39:48
Tag:

项目介绍:

Banners.png

# 源代码

  • GitHub地址:VGPlayer

  • 有什么意见建议可以提 issues,如果觉得不错,欢迎点star。

# 演示

demo1.gif

demo2.gif

# 功能

  • 集成了视频播放器常有的手势,包括单击显示控制视图,双击暂停,水平滑动快进、后退,竖直滑动亮度和音量调节。

  • 全屏播放,自适应手机屏幕旋转方向。

  • 自定义控制视图

# 实现思路

流程图.png

VGPlayer

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

  • AVURLAsset是 AVAsset的子类,用来本地或者网络视频地址的初始化网络请求,也可以用来获取视频每一帧的画面来实现滑动提前预览图的功能(后续应该会版本迭代加上此功能)

  • AVPlayerItem 是对AVPlayer播放的视频数据管理,对播放的Asset资源进行记录,提供或者视频的时间,播放状态等。

  • AVPlayer 调控数据和视图

  • AVPlayerLayer 进行视频视图绘制

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

  • VGPlayerView负责画面的展示,,只作为展示,而绘制层则是AVPlayerLayer提供,可继承此类进行控制视图的自定义

  • VGPlayerView封装AVPlayerLayer提供可选代理方法

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

  • VGPlayerError一个 struct 用来播放出现Error时返回

# 细节调整

  • 后台播放的实现
    设置工程

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
  • VGPlayerUtils 提供判断视频类型方法和一些通用的方法

  • UIButton+VGPlayer 扩展按钮点击范围

  • Timer+VGPlayer 解决Timer的 retain cycle问题

相关源码推荐:

我来说两句
*滑动验证:
所有评论(152)
hellokenken 2017-6-15 10:19:20
好好 学习了 确实不错
回复
phoiu 2017-6-15 10:19:47
感谢大神~
回复
AlonMessi 2017-6-15 10:20:44
写的真的很不错
回复
littleRed 2017-6-15 10:21:08
写的真的很不错
回复
kengsir 2017-6-15 10:21:35
我是来学习的
回复
BlueManlove 2017-6-15 10:22:09
帮帮顶顶!!
回复
故事还长0oV 2017-6-15 11:07:58
正需要啊,感谢楼主无私分享!
回复
code4app热心网友 2017-6-15 14:08:54
楼主用心了,内容非常精彩。
回复
code4app热心网友 2017-6-15 14:37:03
楼主威武啊,Code4App有你更给力!
回复
提取码:  下载次数:301 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
3029 0 301
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表