####1. 所用到的知识点
- 用AVPlayer 进行视频播放
####2.效果图
####3.代码
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player: AVPlayer!
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height
override func viewDidLoad() {
super.viewDidLoad()
creatAvPlayer()
setupUI()
}
// 初始化底部按钮
private func setupUI() {
let Loginbtn: UIButton = UIButton(type: .custom)
Loginbtn.layer.cornerRadius = 2.0
Loginbtn.setTitle("登 陆", for: .normal)
Loginbtn.setTitleColor(UIColor.green, for: .normal)
Loginbtn.layer.masksToBounds = true
Loginbtn.backgroundColor = UIColor.white
Loginbtn.frame = CGRect(x: 30, y: screenHeight - 30 - 64, width: screenWidth - 60, height: 50)
view.addSubview(Loginbtn)
let singupBtn: UIButton = UIButton(type: .custom)
singupBtn.backgroundColor = UIColor.green
singupBtn.layer.cornerRadius = 2.0
singupBtn.layer.masksToBounds = true
singupBtn.setTitle("注 册", for: .normal)
singupBtn.frame = CGRect(x: 30, y: screenHeight - 110 - 64, width: screenWidth - 60, height: 50)
view.addSubview(singupBtn)
}
// 初始化AVPlayer
private func creatAvPlayer() {
let url: URL = URL(fileURLWithPath: Bundle.main.path(forResource: "moments", ofType: "mp4")!)
let asset: AVAsset = AVAsset(url:url)
let playerItem: AVPlayerItem = AVPlayerItem(asset: asset)
playerItem.seek(to: kCMTimeZero)
player = AVPlayer(playerItem: playerItem)
let playerLayer: AVPlayerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.layer.bounds
view.layer.addSublayer(playerLayer)
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect
player.play()
NotificationCenter.default.addObserver(self, selector: #selector(runLoopTheMovie(n:)), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
}
// 通知方法 使得视频循环播放
@objc private func runLoopTheMovie(n: NSNotification) {
let p:AVPlayerItem = n.object as! AVPlayerItem
p.seek(to: kCMTimeZero)
player.play()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
复制代码
- 所遇到的坑 1、读取本地资源要用
let url: URL = URL(fileURLWithPath: Bundle.main.path(forResource: "moments", ofType: "mp4")!)
复制代码
而不是
URL(string: <#T##String#>)
复制代码
2、用AVPlayer 播放视屏的时候 要把AVPlayer添加到AVPlayerLayer上才可以进行播放 3、这个demo 只是很基础的利用AVPlayer进行视屏的播放,还没有进行更多的功能实现,如实现进度条,缓存等功能