视频播放
实现方案
AVPlayer
- 优点: 可以自定义UI, 进行控制
- 缺点: 单纯的播放, 没有控制UI, 而且如果要显示播放界面, 需要借助AVPlayerLayer, 添加图层到需要展示的图层上
MPMoviePlayerController
- 优点: 自带的播放控制UI, 不需要手动添加
- 缺点: 不能自定义UI 只能将此控制器视图添加到其他视图进行展示 此控制器不是视图控制器, 不能弹出
MPMoviePlayerViewController
- 优点: 自带的播放控制UI, 不需要手动添加 此控制器是视图控制器, 可以弹出, 可以压栈 也可以手动调整视图大小, 添加到其他视图上
- 缺点: 不能自定义UI
针对于第2种和第3种实现方案, 在iOS9.0之后, 统一使用AVPlayerViewController
- 优点: 自带的播放控制UI, 不需要手动添加 此控制器是视图控制器, 可以弹出, 可以压栈 也可以手动调整视图大小, 添加到其他视图上
- 缺点: 不能自定义UI
第三方框架vitamio
使用AVPlayer 播放远程视频
- 通过远程URL创建AVPlayer对象
var player:AVPlayer? = {
let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
return AVPlayer(url: url!)
}()
- 开始播放
player.play();
- 存在问题
只能播放声音, 看不到图像
解决方案: 需要借助AVPlayerLayer对象, 根据player创建图层, 添加到视图上
- 实现视频显示功能
1.根据player对象, 创建 AVPlayerLayer 对象
let layer = AVPlayerLayer(player: player!)
2.设置图层 AVPlayerLayer 的大小
layer.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 200)
3.添加到需要展示的视图上即可
view.layer.addSublayer(layer)
备注 iOS9.0 网络请求适配 (HTTPS-->HTTP)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
使用MPMoviePlayerController播放视频
相比于AVPlayer播放, 自带一些控制按钮,但iOS9.0之后已经废弃了
- 导入框架
import MediaPlayer
1.根据URL, 创建控制器 MPMoviePlayerController
var mediaPlayer:MPMoviePlayerController? = {
let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
let mediaPlayer = MPMoviePlayerController(contentURL: url)
return mediaPlayer
}()
2.设置播放视图frame, 添加到需要展示的视图上
// 设置播放视图的frame
mediaPlayer?.view.frame = view.bounds
// 设置播放视图控制样式
mediaPlayer?.controlStyle = .fullscreen
// 添加播放视图到要显示的视图
view.addSubview(mediaPlayer!.view)
3.播放
mediaPlayer?.play()
4.注意事项: 此控制器不是视图控制器, 不能直接弹出
播放器的播放状态, 是通过通知的方式告诉外界
使用MPMoviePlayerViewController播放视频
1.导入框架
import MediaPlayer
2.根据URL, 创建控制器 MPMoviePlayerViewController
var movieVC:MPMoviePlayerViewController? = {
let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
let movieVC = MPMoviePlayerViewController(contentURL: url)
return movieVC
}()
3.直接模态弹出该控制器(或者: 设置播放视图frame, 添加到需要展示的视图上)
present(movieVC!, animated: true) {
self.movieVC?.moviePlayer.play()
}
4.播放
self.movieVC?.moviePlayer.play()
iOS9.0之后, 需要使用AVPlayerViewController
1.导入框架
import AVFoundation
import AVKit
2.根据URL创建AVPlayer
var player:AVPlayer? = {
let url = URL(string: "http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4")
return AVPlayer.init(url:url!)
}()
3.根据AVPlayer, 创建AVPlayerViewController控制器
var playerVC:AVPlayerViewController = AVPlayerViewController()
playerVC.player = player
4.设置播放视图frame, 添加到需要展示的视图上
// 设置播放视图的frame
playerVC.view.frame = view.bounds
// 添加播放视图到要显示的视图
view.addSubview(playerVC.view)
// 或者直接弹出此控制器
present(playerVC, animated: true) {
self.player?.play()
}
5.播放
self.player?.play()