iOS使用AVPlayerViewController实现画中画(Picture in Picture)

概述

本文中Demo下载地址。
将PiP(Picture in Picture)播放添加到App中的最简单方法是使用AVPlayerViewController,事实上,按照Configuring iOS and tvOS Audio Playback Behavior描述的配置你的项目,您的播放器将自动支持PiP播放。运行在你的设备上,你会在播放器看到一个新按钮。如下:

22.PNG

当你点击播放器界面中的PiP按钮时,画中画播放就开始了。当你按Home按钮退出应用程序,视频也会自动开始播放。

Tip
用户可以在Settings > Home Screen & Dock > Multitasking > Picture in Picture中禁用画中画的自动调用。如果你已经确定正确设置了所有设置,但当你按Home按钮时发现你的视频没有进入PiP模式,请检查此设置。

实现步骤

  1. 创建一个项目,添加Background modes;选择Target > Signing & Capabilities项,点击“+ Capability”添加Background modes,把“Audio,AirPlay,and Picture in picture”打上对勾。如下图:


    23.png
  2. 实现AVPlayerViewController播放视频,示例代码如下:

import UIKit
import AVKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.view.backgroundColor = UIColor.red
    }
    
    override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        guard let videoURL = Bundle.main.url(forResource: "v1", withExtension: "MP4") else {
            return
        }
        let player = AVPlayer(url:videoURL)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {    playerViewController.player!.play()
        }
    }
}
  1. 配置Audio Playback Behavior,需要设置App 的AVAudioSession的Category为playback模式,示例代码如下:
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        //需要设置App 的AVAudioSession的Category为playback模式
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(.playback)
        } catch {
            print("Setting category to AVAudioSessionCategoryPlayback failed.")
        }
        return true
    }
  1. 然后 build and run你的项目即可实现一个简单的画中画Demo。

运行效果图如下:


24.PNG

你可能感兴趣的:(iOS使用AVPlayerViewController实现画中画(Picture in Picture))