[Swift通天遁地]八、媒体与动画-(2)实现视频文件的播放和画中画
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10353758.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
本文将演示使用AVPlayerViewController播放视频并实现画中画。
往项目中导入了一个视频文件。
在左侧的项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 //在当前的类文件中, 3 //引入需要用到的相关类库 4 import AVFoundation 5 import AVKit 6 7 class ViewController: UIViewController, AVPlayerViewControllerDelegate { 8 9 var playerVC : AVPlayerViewController! 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view, typically from a nib. 13 14 //获得视频文件在项目中的路径。 15 let moviePath = Bundle.main.path(forResource: "Sunrise", ofType: "mp4") 16 //将视频路径转换成网址对象。 17 let movieURL = URL(fileURLWithPath: moviePath!) 18 //初始化一个视频播放器,播放指定的视频文件 19 let avPlayer = AVPlayer(url: movieURL as URL) 20 21 //let view = UIView(frame: CGRect(x: 20, y: 180, width: 100, height: 100)) 22 //view.backgroundColor = .orange 23 //self.view.addSubview(view) 24 25 //初始化一个视频播放控制器 26 playerVC = AVPlayerViewController() 27 //设置控制器对象的播放属性 28 playerVC.player = avPlayer 29 //保持视频的宽高比,并使播放内容自动适应播放窗口的大小 30 playerVC.videoGravity = AVLayerVideoGravity.resizeAspect 31 //设置在特定的设备上,允许画中画模式 32 playerVC.allowsPictureInPicturePlayback = true 33 //在视频播放时,显示播放控制功能区 34 playerVC.showsPlaybackControls = true 35 //设置播放器的显示区域,保持和根视图的显示区域相同 36 playerVC.view.frame = self.view.bounds 37 //设置播放器的代理对象为本身 38 playerVC.delegate = self 39 40 //通过调用播放器的播放方法,开始播放视频文件。 41 playerVC.player!.play() 42 //self.view.insertSubview(playerVC.view, belowSubview: view) 43 //将视图播放器视图,添加到根视图中 44 self.view.addSubview(playerVC.view) 45 46 NotificationCenter.default.addObserver(self, selector: #selector(ViewController.playEnd(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) 47 } 48 49 func playerViewControllerDidStartPictureInPicture(_ playerViewController: AVPlayerViewController) { 50 print("playerViewControllerDidStartPictureInPicture") 51 } 52 53 @objc func playEnd(notification: Notification) 54 { 55 print("playEnd") 56 print(playerVC.player?.currentTime() as Any) 57 playerVC.player?.seek(to: CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC))) 58 playerVC.player!.play() 59 } 60 61 override func didReceiveMemoryWarning() { 62 super.didReceiveMemoryWarning() 63 // Dispose of any resources that can be recreated. 64 } 65 }
点击项目名称【DemoApp】,进入项目属性设置面板。
点击【Capabilities】能力标签,进入项目功能开启面板。
点击右侧的垂直滚动条,点击【Background Modes】设置为【ON】
勾选【Audio、AirPlay、and Picture in Picture】激活视频播放的画中画模式。
模拟器启动后,开始播放项目中的视频文件,点击工具条右侧的画中画图标,切换至画中画模式。
进入画中画模式后,视频在屏幕中的一个浮动窗口中进行播放。