设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17612|回复: 0

swift 实现音视频播放器

[复制链接]

85

主题

0

回帖

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2022-3-26 10:28:05 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
iOS 实现音视频播放器-swift

最近封装了一个音视频播放器,拷贝进项目即能使用,大致实现了以下功能:
-本地网络音视频播放(无网自动播放已缓存视频)
-屏幕滑动调节进度、亮度、音量(模拟器中音量亮度无法显示)
-倍速播放
-全屏状态画面(自适应、铺满)调节
-竖播视频适配(竖播视频全屏为竖屏)
-屏幕发生物理旋转时调整全屏状态
-在wifi条件下自动缓存网络视频
-断点续播功能
-自定义播放结束页面及音频播放界面
-长按加速视频



具体实现源码在以下链接中:
https://github.com/isHYE/HYPlayerDemo
调用方法:
将项目中HYPlayer文件夹拖拽进自己项目中(项目为swift5编写,部分语法需要自行适配)。
在自己controller中实例化“HYPlayerCommonView”

初始化|切换 音视频则调用 updateCurrentPlayer 方法(具体方式查看demo)

HYPlayerCommonConfig为需要传入播放器的唯一参数(可根据自己需求传参),具体配置如下:

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

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

部分实现说明:
1.视频全屏实现:
通过AVAsset获取视频尺寸 -> 根据视频宽高判断为横播视频还是竖播视频 -> 根据竖播横播旋转屏幕 -> 全屏时从baseView移除播放器并添加至UIApplication.shared.windows,修改AVPlayerLayer尺寸
获取视频尺寸:
  1. for track in asset.tracks {    if track.mediaType == .video {        videoSize = track.naturalSize    }}
复制代码
旋转屏幕:
  1. 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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