iOS上除了一些第三方的播放器之外,我们一般常用的播放方式有使用:
- 网页播放:播放方式简单、固定,不可自定义
- AVPlayer:自定义UI,目前大多数的第三方播放软件都是基于这个进行封装
- AVPlayerViewController: 封装好的AVPlayer,可以直接作为视图控制器弹出播放,也可以使用添加view方式使用,不可以自定义UI。
- MPMoviewViewController:使用添加view方式使用,自带UI,使用较为麻烦,iOS 9.0后被废弃,使用AVPlayerViewController替代
- MPMoviePlayerViewController:可以直接作为视图控制器弹出播放,自带UI,方便使用,全屏播放,iOS 9.0后被废弃,使用AVPlayerViewController替代
一般简单的播放url可以使用网页播放的模式,有很多主流app的视频打开都是用的这种。不需要UI自定义的时候我们选择AVPlayerViewController,比较方便快捷。自定义需求较多时最好选用AVPlayer。
AVPlayer
功能最全、自定义最高的播放器,也是使用最多得。使用起来较为复杂些。需导入AVKit控件
AVPlayer功能比较多,另外写了一篇文章:
AVPlayer播放器
//创建媒体资源管理对象
self.palyerItem = AVPlayerItem(url: NSURL(string: urlString)! as URL)
//创建ACplayer:负责视频播放
self.player = AVPlayer.init(playerItem: self.palyerItem)
self.player.rate = 1.0//播放速度 播放前设置
//创建显示视频的图层
let playerLayer = AVPlayerLayer.init(player: self.player)
playerLayer.videoGravity = .resizeAspect
playerLayer.frame = self.view.bounds
self.view.layer .addSublayer(playerLayer)
//播放
self.player.play()
只是让视频播放起来,没有暂停、停止、快进等等功能。
AVPlayerViewController
适用于简单的播放,不需要过多自定义的东西,使用比较简单,有两种方式,需要引入AVKit框架
(1)添加view
可以设置播放器的大小
let player = AVPlayer(url: NSURL(string: urlString)! as URL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
//添加view播放的模式
playerViewController.view.frame = CGRect(x: 20, y: 100, width: self.view.bounds.width - 40, height: 200)
self.addChildViewController(playerViewController)
self.view.addSubview(playerViewController.vie)
(2)作为视图控制器弹窗
//控制器推出的模式
let player = AVPlayer(url: NSURL(string: urlString)! as URL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated:true, completion: nil)
MPMoviePlayerViewController
使用起来类似AVPlayerViewController的第一种方式。需要引入MediaPlayer框架(iOS9后被抛弃,使用AVPlayerViewController即可)
var playerController : MPMoviePlayerController?
playerController = MPMoviePlayerController(contentURL: NSURL(string: urlString) as! URL)
playerController?.view.frame = CGRect(x: 0, y: 100, width: self.view.frame.width, height: 300)
self.view.addSubview((playerController?.view)!)
//设置为默认风格
self.playerController?.controlStyle = .default
//重复播放
self.playerController?.repeatMode = .one
//播放视频
self.playerController?.prepareToPlay()
deinit {
//退出界面关闭播放,移除通知
self.playerController?.stop()
self.playerController = nil
NotificationCenter.default.removeObserver(self)
}
通知来进行一些操作的监听
//播放完成监听(还有其他很多监听,如播放暂停、快进等)
NotificationCenter.default.addObserver(self,selecto r:#selector(playerStateFinished(notification:)),nam e: NSNotification.Name(rawValue:MPMoviePlayerPlayba ckDidFinishReasonUserInfoKy), object: nil)
//播放结束监听
@objc func playerStateFinished(notification:NSNotification){
print("播放结束")
}
MPMoviePlayerViewController
使用起来类似AVPlayerViewController的第二种方式。需要引入MediaPlayer框架(iOS9后被抛弃,使用AVPlayerViewController即可)
let playerViewController = MPMoviePlayerViewController(contentURL: NSURL(string: urlString)! as URL)
playerViewController?.moviePlayer.scalingMode = .aspectFit
self.present(playerViewController!,animated:true, completion: nil)
下载demo
swift视频播放器使用