swift 实现音视频播放器

iOS 实现音视频播放器-swift

最近封装了一个音视频播放器,拷贝进项目即能使用,大致实现了以下功能:

-本地网络音视频播放(无网自动播放已缓存视频)

-屏幕滑动调节进度、亮度、音量(模拟器中音量亮度无法显示)

-倍速播放

-全屏状态画面(自适应、铺满)调节

-竖播视频适配(竖播视频全屏为竖屏)

-屏幕发生物理旋转时调整全屏状态

-在wifi条件下自动缓存网络视频

-断点续播功能

-自定义播放结束页面及音频播放界面

-长按加速视频

倍速播放
断点续播

快捷操作
具体实现源码在以下链接中:
https://github.com/isHYE/HYPlayerDemo

调用方法:
将项目中HYPlayer文件夹拖拽进自己项目中(项目为swift5编写,部分语法需要自行适配)。

在自己controller中实例化“HYPlayerCommonView”
初始化

初始化|切换 音视频则调用 updateCurrentPlayer 方法(具体方式查看demo)
更新播放器
HYPlayerCommonConfig为需要传入播放器的唯一参数(可根据自己需求传参),具体配置如下:
HYPlayerCommonConfig

播放器 缓存|播放状态 相关则会通过代理方法进行回调,如有需要可进行实现:
播放器回调

最后在controller的viewWillDisappear中调用 videoView.dealToDisappear()以销毁播放器。


部分实现说明:
1.视频全屏实现:

通过AVAsset获取视频尺寸 -> 根据视频宽高判断为横播视频还是竖播视频 -> 根据竖播横播旋转屏幕 -> 全屏时从baseView移除播放器并添加至UIApplication.shared.windows,修改AVPlayerLayer尺寸

获取视频尺寸:

for track in asset.tracks {
    if track.mediaType == .video {
        videoSize = track.naturalSize
    }
}

旋转屏幕:

if manager?.isVerticalScreen == true {
    UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
} else if orientationChange {
    let orient = UIDevice.current.orientation

    if orient == .landscapeRight {
        UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
    } else if orient == .landscapeLeft {
        UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
    }
} else {
    UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
}

2.屏幕快捷操作:
通过重写touchesBegan、touchesMoved、touchesEnded监听用户滑动手势 -> 记录滑动起始点及之后活动轨迹判断所处功能区域 -> 对播放器做出相应调整

  • AVPlayer.seek …调整播放进度

  • UIScreen.main.brightness … 调整屏幕亮度

  • MPVolumeView -> UISlider.setValue …调整音量

快捷操作类型

音量调整


部分需要注意的点:

视频全屏锁定时需要在controller层修改 shouldAutorotate 属性值来限制屏幕转动(通过回调 fullScreenLock() 修改isRollEnable)

️注意:
在controller被UINavigationController或UITabBarController嵌套式,在这两个基础控制器也需要重写以下属性

屏幕转动限制

注意:
通过判断为退出当前页面还是前往二级页面分别调用HYPlayer的dealToDisappear与playerPause。
dealToDisappear为销毁播放器,调用后播放器不可再播放视频。
playerPause为暂停播放器,可通过playerPlay继续播饭。


附加功能:
添加缓存列表用于主动缓存视频以及清除已缓存视频。

主动缓存

播放器目前还有很多待完善的功能,大家如有什么建议或希望添加的功能也可留言作者,功能会持续更新!

简书:https://www.jianshu.com/p/3bc685cb3952

demo链接:https://github.com/isHYE/HYPlayerDemo

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值