175
© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC15 Multitasking Essentials for Media-Based Apps on iPad in iOS 9 Adopting Picture in Picture and Mastering Shared Resources Stefan Hafeneger Picture in Picture Architect Jonathan Bennett Media Systems Product Lead App Frameworks Session 211

211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC15

Multitasking Essentials forMedia-Based Apps on iPad in iOS 9Adopting Picture in Picture and Mastering Shared Resources

Stefan Hafeneger Picture in Picture ArchitectJonathan Bennett Media Systems Product Lead

App Frameworks

Session 211

Page 2: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Multitasking Essentials for Media-Based Apps on iPad in iOS 9 Pacific Heights Wednesday 2:30PM

Optimizing Your App for Multitasking on iPad in iOS 9 Presidio Wednesday 3:30PM

Page 3: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Multitasking Essentials for Media-Based Apps on iPad in iOS 9 Pacific Heights Wednesday 2:30PM

Optimizing Your App for Multitasking on iPad in iOS 9 Presidio Wednesday 3:30PM

Multitasking Essentials for Media-Based Apps on iPad in iOS 9

Page 4: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

What You Will Learn

Adopt Picture in Picture in video playback applicationsMaster shared resources in multitasking environment

Page 5: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 6: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in Picture

Page 7: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 8: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 9: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 10: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 11: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in Picture = PiP

Page 12: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in PictureSupported hardware

iPad Air 2iPad AiriPad mini 3iPad mini 2

Page 13: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Should my app adopt Picture in Picture?

Page 14: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 15: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 16: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 17: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video Playback APIsiOS 8

Page 18: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video Playback APIsiOS 8

Page 19: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video Playback APIsDeprecated APIs in iOS 9

MPMoviePlayerController

MPMoviePlayerViewController

Page 20: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Replaced by AVPlayerViewController• Introduced in AVKit in iOS 8

Video Playback APIsDeprecated APIs in iOS 9

MPMoviePlayerController

MPMoviePlayerViewController

Page 21: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Replaced by AVPlayerViewController• Introduced in AVKit in iOS 8

Video Playback APIsDeprecated APIs in iOS 9

MPMoviePlayerController

MPMoviePlayerViewController

Mastering Modern Media Playback WWDC 2014

Page 22: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video Playback APIsiOS 9

Page 23: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerLayer

Page 24: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 25: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 26: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 27: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 28: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 29: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 30: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 31: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 32: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 33: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 34: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 35: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 36: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 37: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 38: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 39: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in PictureSupported video playback APIs

Page 40: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in PictureSupported video playback APIs

Page 41: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in PictureSupported video playback APIs

Page 42: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 43: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 44: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 45: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 46: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 47: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 48: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

DemoAdopting Picture in Picture with AVPlayerViewController

Felix Heidrich AVKit Engineer

Page 49: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

Page 50: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

Page 51: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Get shared audio session. let audioSession = AVAudioSession.sharedInstance() do { // Set playback audio session category. try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { … } return true }

Page 52: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Get shared audio session. let audioSession = AVAudioSession.sharedInstance() do { // Set playback audio session category. try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { … } return true }

Page 53: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Get shared audio session. let audioSession = AVAudioSession.sharedInstance() do { // Set playback audio session category. try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { … } return true }

Page 54: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerHow to support Picture in Picture

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Get shared audio session. let audioSession = AVAudioSession.sharedInstance() do { // Set playback audio session category. try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) } catch { … } return true }

Page 55: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerDisable Picture in Picture playback

class AVPlayerViewController : UIViewController { // Whether or not to allow Picture in Picture playback. Default is YES. var allowsPictureInPicturePlayback: Bool }

Page 56: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 57: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 58: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerPersistent Video Overlay

Supported in primary applicationWhen application enters background if• AVPlayerViewController is presented full screen• Video content is playing• Picture in Picture is possible

Page 59: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerPersistent Video Overlay

User can turn on/off behavior in Settings• General > Multitasking > Persistent Video Overlay

Page 60: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerRestore user interface before stop

func playerViewController(playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present player view controller again. navigationController?.presentViewController(playerViewController, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 61: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerRestore user interface before stop

func playerViewController(playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present player view controller again. navigationController?.presentViewController(playerViewController, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 62: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerRestore user interface before stop

func playerViewController(playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present player view controller again. navigationController?.presentViewController(playerViewController, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 63: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPlayerViewControllerRestore user interface before stop

func playerViewController(playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present player view controller again. navigationController?.presentViewController(playerViewController, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 64: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 65: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 66: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 67: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 68: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerNew AVKit class in iOS 9

Page 69: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to set up

// Check whether Picture in Picture is supported on device. if AVPictureInPictureController.isPictureInPictureSupported() { // Create Picture in Picture controller. pipController = AVPictureInPictureController(playerLayer: playerLayer)! // Set delegate. pipController.delegate = self }

Page 70: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to set up

// Check whether Picture in Picture is supported on device. if AVPictureInPictureController.isPictureInPictureSupported() { // Create Picture in Picture controller. pipController = AVPictureInPictureController(playerLayer: playerLayer)! // Set delegate. pipController.delegate = self }

Page 71: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to set up

// Check whether Picture in Picture is supported on device. if AVPictureInPictureController.isPictureInPictureSupported() { // Create Picture in Picture controller. pipController = AVPictureInPictureController(playerLayer: playerLayer)! // Set delegate. pipController.delegate = self }

Page 72: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to set up

// Check whether Picture in Picture is supported on device. if AVPictureInPictureController.isPictureInPictureSupported() { // Create Picture in Picture controller. pipController = AVPictureInPictureController(playerLayer: playerLayer)! // Set delegate. pipController.delegate = self }

Page 73: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 74: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 75: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerEnable/disable Picture in Picture button

// Find out whether Picture in Picture is possible. let pipPossible = pipController.pictureInPicturePossible

// Enable/disable Picture in Picture button. pipButton.enabled = pipPossible

Page 76: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerEnable/disable Picture in Picture button

// Find out whether Picture in Picture is possible. let pipPossible = pipController.pictureInPicturePossible

// Enable/disable Picture in Picture button. pipButton.enabled = pipPossible

Page 77: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerEnable/disable Picture in Picture button

// Find out whether Picture in Picture is possible. let pipPossible = pipController.pictureInPicturePossible

// Enable/disable Picture in Picture button. pipButton.enabled = pipPossible

Page 78: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to start Picture in Picture

func pipButtonTapped(sender: AnyObject?) { // Make sure Picture in Picture is not already active. if !pipController.pictureInPictureActive { // Start Picture in Picture on button tap. pipController.startPictureInPicture() } }

Page 79: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to start Picture in Picture

func pipButtonTapped(sender: AnyObject?) { // Make sure Picture in Picture is not already active. if !pipController.pictureInPictureActive { // Start Picture in Picture on button tap. pipController.startPictureInPicture() } }

Page 80: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to start Picture in Picture

func pipButtonTapped(sender: AnyObject?) { // Make sure Picture in Picture is not already active. if !pipController.pictureInPictureActive { // Start Picture in Picture on button tap. pipController.startPictureInPicture() }}

Page 81: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHow to start Picture in Picture

func pipButtonTapped(sender: AnyObject?) { // Make sure Picture in Picture is not already active. if !pipController.pictureInPictureActive { // Start Picture in Picture on button tap. pipController.startPictureInPicture() }}

App Store review team will reject your app if used inappropriately

Page 82: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerDismiss video playback view controller after start

func pictureInPictureControllerDidStartPictureInPicture(pipController: AVPictureInPictureController) { // Dismiss modal video playback view controller. dismissViewControllerAnimated(true, completion: nil) }

Page 83: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerDismiss video playback view controller after start

func pictureInPictureControllerDidStartPictureInPicture(pipController: AVPictureInPictureController) { // Dismiss modal video playback view controller. dismissViewControllerAnimated(true, completion: nil) }

Page 84: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerDismiss video playback view controller after start

func pictureInPictureControllerDidStartPictureInPicture(pipController: AVPictureInPictureController) { // Dismiss modal video playback view controller. dismissViewControllerAnimated(true, completion: nil) }

Page 85: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerWhile Picture in Picture is active

pipController

Page 86: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerWhile Picture in Picture is active

Page 87: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerRestore video playback view controller before stop

func pictureInPictureController(pipController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present video playback view controller again. navigationController?.presentViewController(self, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 88: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerRestore video playback view controller before stop

func pictureInPictureController(pipController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present video playback view controller again. navigationController?.presentViewController(self, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 89: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerRestore video playback view controller before stop

func pictureInPictureController(pipController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present video playback view controller again. navigationController?.presentViewController(self, animated: true) { // Don’t forget to call completion handler. completionHandler(true) } }

Page 90: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerRestore video playback view controller before stop

func pictureInPictureController(pipController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present video playback view controller again. navigationController?.presentViewController(self, animated: true) { // Don’t forget to call completion handler. completionHandler(true) }}

Page 91: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerRestore video playback view controller before stop

func pictureInPictureController(pipController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void) { // Present video playback view controller again. navigationController?.presentViewController(self, animated: true) { // Don’t forget to call completion handler. completionHandler(true) }}

Need to reuse AVPlayerLayer passed to AVPictureInPictureController

Page 92: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 93: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 94: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerWillStartPictureInPicture(pipController: AVPictureInPictureController) { // Hide playback controls. hidePlaybackControls() // Show placeholder artwork. showPlaceholderArtwork() }

Page 95: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerWillStartPictureInPicture(pipController: AVPictureInPictureController) { // Hide playback controls. hidePlaybackControls() // Show placeholder artwork. showPlaceholderArtwork() }

Page 96: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerWillStartPictureInPicture(pipController: AVPictureInPictureController) { // Hide playback controls. hidePlaybackControls() // Show placeholder artwork. showPlaceholderArtwork() }

Page 97: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerWillStartPictureInPicture(pipController: AVPictureInPictureController) { // Hide playback controls. hidePlaybackControls() // Show placeholder artwork. showPlaceholderArtwork() }

Page 98: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerDidStopPictureInPicture(pipController: AVPictureInPictureController) { // Hide placeholder artwork. hidePlaceholderArtwork() // Show playback controls. showPlaybackControls() }

Page 99: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerDidStopPictureInPicture(pipController: AVPictureInPictureController) { // Hide placeholder artwork. hidePlaceholderArtwork() // Show playback controls. showPlaybackControls() }

Page 100: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerDidStopPictureInPicture(pipController: AVPictureInPictureController) { // Hide placeholder artwork. hidePlaceholderArtwork() // Show playback controls. showPlaybackControls() }

Page 101: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerHide playback controls and show placeholder artwork

func pictureInPictureControllerDidStopPictureInPicture(pipController: AVPictureInPictureController) { // Hide placeholder artwork. hidePlaceholderArtwork() // Show playback controls. showPlaybackControls() }

Page 102: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerPersistent Video Overlay

UIWindow

Page 103: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerPersistent Video Overlay

UIWindow

Page 104: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVPictureInPictureControllerSample code

AVFoundationPiPPlayer

Page 105: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 106: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 107: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 108: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

WKWebViewHTML5 video Picture in Picture support

Application has background audio modeAVAudioSession configured with• AVAudioSessionCategoryPlayback • AVAudioSessionCategoryPlayAndRecord

Web content does not render custom controls

Page 109: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

WKWebViewHTML5 video Picture in Picture support

Application has background audio modeAVAudioSession configured with• AVAudioSessionCategoryPlayback • AVAudioSessionCategoryPlayAndRecord

Web content does not render custom controls

What’s New in Web Developers in WebKit and Safari Mission Tuesday 9:00AM

Page 110: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

WKWebViewDisable HTML5 video Picture in Picture support

class WKWebViewConfiguration : NSObject { // Whether or not to allow Picture in Picture playback. Default is YES. var allowsPictureInPictureMediaPlayback: Bool }

Page 111: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 112: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 113: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Picture in PictureIs a lot like background audio

Same rules as background audio and AirPlay applyApp Store review team will reject app if in violation

Page 114: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

Jonathan Bennett Media Systems Product Lead

Page 115: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

CameraAudio Video

Page 116: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

Fullscreen

Page 117: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

Page 118: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

Page 119: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

Primary

Page 120: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

Page 121: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

SecondaryPrimary

Page 122: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

Page 123: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

SecondaryPrimary

Page 124: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

SecondaryPrimary

Page 125: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Multitasking for iPadPrimary and secondary apps

FullscreenSlide OverSplit ViewPicture in Picture

SecondaryPrimary

Background Media

Page 126: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

Audio CameraVideo

Page 127: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

AudioCameraVideo

Page 128: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession

Page 129: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession• One configuration to rule them all…

Page 130: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession• One configuration to rule them all…

Only activate session when audio is first needed

Page 131: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession• One configuration to rule them all…

Only activate session when audio is first neededGames or sound effects?• Use Ambient category

Page 132: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession• One configuration to rule them all…

Only activate session when audio is first neededGames or sound effects?• Use Ambient category

Secondary audio tracks?• Use secondaryAudioShouldBeSilencedHint (iOS 8)

Page 133: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AudioBest practices

Properly configure AVAudioSession• One configuration to rule them all…

What’s New in Core Audio WWDC 2014

Audio Session Programming Guide http://developer.apple.com/iOS

Only activate session when audio is first neededGames or sound effects?• Use Ambient category

Secondary audio tracks?• Use secondaryAudioShouldBeSilencedHint (iOS 8)

Page 134: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

Audio CameraVideo

Page 135: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

Audio CameraVideo

Page 136: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video

Video has audio?• Properly configure AVAudioSession

Page 137: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Video

Video has audio?• Properly configure AVAudioSession

Background media• Discard unnecessary data

Page 138: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

VideoHTTP Live Streaming

Multiple stream variants• Include a 1-3 Mbps variant

Annotate variants with RESOLUTION in master playlist

Page 139: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 140: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 141: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

CameraAudio Video

Page 142: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Shared Resources

CameraAudio Video

Page 143: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Camera

Only one app can use the camera

Page 144: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Camera

Only one app can use the camera• Availability can change at any time

Page 145: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 146: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Consider UIRequiresFullscreen = YES

Page 147: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 148: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 149: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 150: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Camera API

UIImagePickerControllerAVCaptureSession

Page 151: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Camera Preview

PhotoCapture

VideoCapture

Single App

Page 152: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Camera Preview

PhotoCapture

VideoCapture

Single App Multiple Apps

Page 153: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Single App Multiple Apps

Camera Preview

PhotoCapture

VideoCapture

Page 154: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 155: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

YourApp must be fullscreen to record video

Page 156: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Active captures may be interrupted

Page 157: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 158: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based
Page 159: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Active captures may be interrupted

Page 160: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

UIImagePickerController

Active captures may be interruptedstartVideoCapture() may return false

Page 161: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Camera API

UIImagePickerControllerAVCaptureSession

Page 162: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSession

Camera Preview

PhotoCapture

VideoCapture

Single App

Page 163: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSession

Camera Preview

PhotoCapture

VideoCapture

Single App Multiple Apps

Page 164: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Observe session interruptions• AVCaptureSessionWasInterruptedNotification

Page 165: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Observe session interruptions• AVCaptureSessionWasInterruptedNotification

Check the reason• AVCaptureSessionInterruptionReasonKey

- .VideoDeviceNotAvailableWithMultipleForegroundApps

Page 166: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Observe session interruptions• AVCaptureSessionWasInterruptedNotification

Check the reason• AVCaptureSessionInterruptionReasonKey

- .VideoDeviceNotAvailableWithMultipleForegroundApps

Adjust UI

Page 167: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Completed Interruptions• AVCaptureSession automatically resumes

Page 168: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Completed Interruptions• AVCaptureSession automatically resumes

Observe• AVCaptureSessionInterruptionEndedNotification

Page 169: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionInterruptions

Completed Interruptions• AVCaptureSession automatically resumes

Observe• AVCaptureSessionInterruptionEndedNotification

Restore camera UI

Page 170: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

AVCaptureSessionSample code

AVCam

Page 171: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Summary

Adopt Picture in Picture• AVKit, AVFoundation, WebKit• Follow best practices for

consistent experience

Master Shared Resources• Configure audio session• Provide video streaming variants• Handle camera interruptions

Page 172: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

More Information

DocumentationAdopting Multitasking Enhancements on iPadWhat’s New in iOSStart Developing iOS AppsiOS App Programming Guide

http://developer.apple.com/iOS

Technical SupportApple Developer ForumsDeveloper Technical Support

General InquiriesCurt Rothert, App Frameworks [email protected]

Page 173: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Related Sessions

Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM

Optimizing Your App for Multitasking on iPad in iOS 9 Presidio Wednesday 3:30PM

Performance on iOS and watchOS Presidio Friday 11:00AM

Page 174: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based

Related Labs

AVKit and AVFoundation Media Lab Wednesday, Thursday, and Friday

Camera Capture Media Lab Wednesday and Thursday

HTTP Live Streaming Media Lab Thursday

Audio Media Lab Thursday

Cocoa Touch and Multitasking Frameworks Lab Wednesday

Cocoa Touch Frameworks Lab Friday

Page 175: 211 Multitasking Essentials for Media-Based Apps on iPad ... · Getting Started with Multitasking on iPad in iOS 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based