概述
本文中Demo下载地址。
将PiP(Picture in Picture)播放添加到App中的最简单方法是使用AVPlayerViewController
,事实上,按照Configuring iOS and tvOS Audio Playback Behavior描述的配置你的项目,您的播放器将自动支持PiP播放。运行在你的设备上,你会在播放器看到一个新按钮。如下:
当你点击播放器界面中的PiP按钮时,画中画播放就开始了。当你按Home按钮退出应用程序,视频也会自动开始播放。
Tip
用户可以在Settings > Home Screen & Dock > Multitasking > Picture in Picture中禁用画中画的自动调用。如果你已经确定正确设置了所有设置,但当你按Home按钮时发现你的视频没有进入PiP模式,请检查此设置。
实现步骤
-
创建一个项目,添加Background modes;选择Target > Signing & Capabilities项,点击“+ Capability”添加Background modes,把“Audio,AirPlay,and Picture in picture”打上对勾。如下图:
实现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<UITouch>, 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()
}
}
}
- 配置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
}
- 然后 build and run你的项目即可实现一个简单的画中画Demo。
运行效果图如下: