iOS上除了一些第三方的播放器之外缸夹,我們一般常用的播放方式有使用:
- 網(wǎng)頁播放:播放方式簡單铆遭、固定,不可自定義
- AVPlayer:自定義UI膘螟,目前大多數(shù)的第三方播放軟件都是基于這個(gè)進(jìn)行封裝
- AVPlayerViewController: 封裝好的AVPlayer,可以直接作為視圖控制器彈出播放碾局,也可以使用添加view方式使用荆残,不可以自定義UI。
- MPMoviewViewController:使用添加view方式使用,自帶UI净当,使用較為麻煩,iOS 9.0后被廢棄内斯,使用AVPlayerViewController替代
- MPMoviePlayerViewController:可以直接作為視圖控制器彈出播放,自帶UI像啼,方便使用俘闯,全屏播放,iOS 9.0后被廢棄忽冻,使用AVPlayerViewController替代
一般簡單的播放url可以使用網(wǎng)頁播放的模式真朗,有很多主流app的視頻打開都是用的這種。不需要UI自定義的時(shí)候我們選擇AVPlayerViewController僧诚,比較方便快捷遮婶。自定義需求較多時(shí)最好選用AVPlayer。
AVPlayer
功能最全湖笨、自定義最高的播放器旗扑,也是使用最多得。使用起來較為復(fù)雜些慈省。需導(dǎo)入AVKit控件
AVPlayer功能比較多臀防,另外寫了一篇文章:
AVPlayer播放器
//創(chuàng)建媒體資源管理對象
self.palyerItem = AVPlayerItem(url: NSURL(string: urlString)! as URL)
//創(chuàng)建ACplayer:負(fù)責(zé)視頻播放
self.player = AVPlayer.init(playerItem: self.palyerItem)
self.player.rate = 1.0//播放速度 播放前設(shè)置
//創(chuàng)建顯示視頻的圖層
let playerLayer = AVPlayerLayer.init(player: self.player)
playerLayer.videoGravity = .resizeAspect
playerLayer.frame = self.view.bounds
self.view.layer .addSublayer(playerLayer)
//播放
self.player.play()
只是讓視頻播放起來,沒有暫停、停止袱衷、快進(jìn)等等功能琼锋。
AVPlayerViewController
適用于簡單的播放,不需要過多自定義的東西祟昭,使用比較簡單缕坎,有兩種方式,需要引入AVKit框架
(1)添加view
可以設(shè)置播放器的大小
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)!)
//設(shè)置為默認(rèn)風(fēng)格
self.playerController?.controlStyle = .default
//重復(fù)播放
self.playerController?.repeatMode = .one
//播放視頻
self.playerController?.prepareToPlay()
deinit {
//退出界面關(guān)閉播放,移除通知
self.playerController?.stop()
self.playerController = nil
NotificationCenter.default.removeObserver(self)
}
通知來進(jìn)行一些操作的監(jiān)聽
//播放完成監(jiān)聽(還有其他很多監(jiān)聽,如播放暫停搬葬、快進(jìn)等)
NotificationCenter.default.addObserver(self,selecto r:#selector(playerStateFinished(notification:)),nam e: NSNotification.Name(rawValue:MPMoviePlayerPlayba ckDidFinishReasonUserInfoKy), object: nil)
//播放結(jié)束監(jiān)聽
@objc func playerStateFinished(notification:NSNotification){
print("播放結(jié)束")
}
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)