zoukankan      html  css  js  c++  java
  • [Swift通天遁地]八、媒体与动画-(2)实现视频文件的播放和画中画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10353758.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示使用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,  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】激活视频播放的画中画模式。

    模拟器启动后,开始播放项目中的视频文件,点击工具条右侧的画中画图标,切换至画中画模式。

    进入画中画模式后,视频在屏幕中的一个浮动窗口中进行播放。

  • 相关阅读:
    用wamp配置的环境,想用CMD连接mysql怎么连
    Mysql删除表
    MySQL创建表
    Leetcode 130. Surrounded Regions
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 110. Balanced Binary Tree
    Leetcode 98. Validate Binary Search Tree
    Leetcode 99. Recover Binary Search Tree
    Leetcode 108. Convert Sorted Array to Binary Search Tree
    Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/strengthen/p/10353758.html
Copyright © 2011-2022 走看看