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) 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视频播放器使用