SAPlugAVPlayer
简单且具有众多自定义可能性的视频播放器,可以完全控制 AVPlayer。根据您的设计和功能需求进行调整。
入门指南
这里有一个简单的即插即用模块,开发人员可以使用它来在 Swift 4.2 中集成视频播放。PlugAVPlayer 允许您创建自己的 UI,并为播放和全屏等按钮添加图片。
功能
- 支持播放本地视频和 URL 流媒体。
- 支持有扩展名的 URL 和嵌入视频 URL(不控制嵌入的视频)。
- 仅支持 YouTube 嵌入 URL。
- 支持全屏模式。
- 提供滑块设计自定义。
- 支持快进和快退。
- 支持下一首和上一首视频回调。
- 支持更改播放速度。
- PlayerEventDelegate 代理方法控制播放器的下一首、上一首和重新播放,用一个先前或下一个平移手势代理方法替换视频,这有助于您管理视频视图的动画。
- 支持保存视频到本地。
- 支持自定义播放器视图。
- 内存控制。
预览
先决条件
Swift 4.2
iOS 10*
Xcode 10
安装
您需要在接近以下内容的Podfile文件中添加类似“pod 'SAPlugAVPlayer', '~> 0.2.6'”的引用
target 'MyApp' do
pod 'SAPlugAVPlayer', '~> 0.2.6'
end
然后从终端或CocoaPods.app中进行一次pod install
Carthage
Carthage 是一种去中心化的依赖管理器,它会构建您的依赖项并为您提供二进制框架。
您可以使用以下命令使用Homebrew安装Carthage
$ brew update
$ brew install carthage
要使用Carthage将SAPlugAVPlayer集成到您的Xcode项目中,请在您的Cartfile中指定它
github "teamSolutionAnalysts/sa-plug-avplayer" == 0.2.9
运行carthage update来构建框架,然后拖动构建的SAPlugAVPlayer.framework到您的Xcode项目中。
手动操作
如果您不希望使用上述任何依赖管理器,可以通过手动方式将SAPlugAVPlayer集成到您的项目中。只需将源文件夹从源文件夹复制到您的项目目录即可
添加播放器步骤
分配ViewVideo类
嵌入URL的说明
如果您仅计划播放嵌入的YouTube URL,则不需使用VideoController视图。您可以使用ViewVideo播放嵌入的URL。
import SAPlugAVPlayer
import AVFoundation
override func viewDidLoad() {
super.viewDidLoad()
setUpPlayerWithURlStreaming()
}
func setUpPlayerWithURlStreaming()
{
self.viewVideo.configure(url: self.url, ControllView: nil)
self.viewVideo.delegate = self
}
将VideoController类分配给控制器视图
从UI拖放IBOutlets
class ViewController : UIViewController{
@IBOutlet weak var viewVideo: ViewVideo!
@IBOutlet weak var videoController: VideoController!
}
如下从属性检查器添加并选择按钮、播放、暂停、全屏、退出全屏、下一曲和上一曲的图片
从URL流播放视频
override func viewDidLoad() {
super.viewDidLoad()
setUpPlayerWithURlStreaming()
}
func setUpPlayerWithURlStreaming()
{
self.viewVideo.configure(url: self.url, ControllView: self.videoController)
self.viewVideo.delegate = self
self.viewVideo.play()
}
从具有扩展名的本地路径播放视频
override func viewDidLoad() {
super.viewDidLoad()
setUpPlayerWithLocal()
}
func setUpPlayerWithLocal()
{
viewVideo.configure(ControllView: self.videoController,localPath:"localpath",fileextension : "mp4")
viewVideo.delegate = self
viewVideo.play()
}
添加PlayerEventDelegate
// MARK: - Player Delegate Methods
extension ViewController : PlayerEventDelegate
{
func AVPlayer(minimizevideoScreen: Bool) {
}
func AVPlayer(panGesture didTriggerd: UIPanGestureRecognizer?) {
}
func totalTime(_ player: AVPlayer) {
}
func AVPlayer(didEndPlaying: AVPlayer?) {
//Play your next video
//Replace your local video with next one
self.viewVideo.replacelocalVideo(path: "Your next video path", videoextension: "mp4")
OR
//Replace your streaming url with next one
self.viewVideo.replaceVideo(videourl: "url")
}
func AVPlayer(didTap overLay: AVPlayer?) {
}
func AVPlayer(willExpand player: AVPlayer?) {
}
func AVPlayer(didTaptoNextvideo: AVPlayer?) {
//Replace your local video with next one
self.viewVideo.replacelocalVideo(path: "Your next video path", videoextension: "mp4")
OR
//Replace your streaming url with next one
self.viewVideo.replaceVideo(videourl: "url")
}
func AVPlayer(didTaptoPreviousvideo: AVPlayer?) {
//Replace your video with previous one
self.viewVideo.replacelocalVideo(path: "Your previous video", videoextension: "mp4")
OR
//Replace your streaming url with next one
self.viewVideo.replaceVideo(videourl: "url")
}
func AVPlayer(panGesture sender: UIGestureRecognizer?) {
guard let sender = sender else{
return
}
let touchPoint = sender.location(in: self.viewVideo?.window)
if sender.state == UIGestureRecognizer.State.began {
initialTouchPoint = touchPoint
} else if sender.state == UIGestureRecognizer.State.changed {
if (touchPoint.x - initialTouchPoint.x) > 10
{
self.viewVideo.fastForwardPlayer()
}
else if (initialTouchPoint.x - touchPoint.x) > 10
{
self.viewVideo.fastBackward()
}
}
}
}
可选配置
self.viewVideo.saveVideoLocally = false
self.viewVideo.currentVideoID = self.videoID // to manage video by id
//Change slider configuration (optional)
self.videoController.slider.baseColor = // UIColor
self.videoController.slider.bufferColor = // UIColor
self.videoController.slider.progressColor = // UIColor
self.videoController.slider.borderWidth = // CGFloat
self.videoController.slider.roundedSlider = // Bool
播放器速率
self.viewVideo.changePlayerRate(rate: rate)
有一种方法可以让您更改播放器
构建工具
- AVKit框架
- 使用URLSession
作者
解决方案分析员
参考文献
滑动控制条来自raxcat/BufferSlider, git
许可证
MIT许可证
版权所有:(c) 2019 Solution Analysts Pvt. Ltd.
兹特此许可,免费授予任何获取此软件和关联文档副本(“软件”)的人士,在任何限制下使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许提供软件的个人进行此类操作,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何类型的担保,无论明确还是暗示,包括但不限于适销性、特定用途的适用性和非侵权性担保。在任何情况下,作者或版权所有者都不对任何索赔、损害或其它责任承担责任,这些责任源于、产生于或是与软件或软件的使用或其他交易有关,无论是在合同行为、侵权或其它行为中。