PiP AVPlayerViewController выпускает iPhone

Я изучаю AVFoundation и хочу создать что-то похожее на WhatsApp, когда, например, вижу видео на YouTube, которое воспроизводит его в режиме PiP. По этой причине я создаю viewcontroller следующим образом:

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>

@interface ViewController () <AVPictureInPictureControllerDelegate>

@property (strong, nonatomic) AVPlayerViewController *playerViewController;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSURL *url = [[NSURL alloc] initWithString:@"https://www.rmp-streaming.com/media/bbb-360p.mp4"];

    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:url];

    AVPlayer* playVideo = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    self.playerViewController = [[AVPlayerViewController alloc] init];
    self.playerViewController.player = playVideo;
    self.playerViewController.player.volume = 0;
    self.playerViewController.view.frame = self.view.bounds;
    [self.view addSubview:self.playerViewController.view];
    self.playerViewController.showsPlaybackControls = YES;
    self.playerViewController.allowsPictureInPicturePlayback = YES;
    self.playerViewController.videoGravity = AVLayerVideoGravityResizeAspect;
    [playVideo play];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

В AppDelegate я сделал это:

NSError *errore = nil;
    AVAudioSession *sessioneAudio = [AVAudioSession sharedInstance];
    [sessioneAudio setActive:YES error:&errore];
    [sessioneAudio setCategory:AVAudioSessionCategoryPlayback error:&errore];

И я включил фоновые режимы Audio,AirPlay и Picture in Picture в возможностях проекта.

Моя проблема заключается в следующем:

Если я запускаю приложение на устройстве iPad, я вижу кнопку PiP и могу включить режим PiP. Если я запускаю приложение на устройстве iPhone, я не вижу кнопку PiP, но я не понимаю, почему.

1 ответ

Картинка в картинке не поддерживается на iPhone, только на iPad.

Из документации Apple Developer (выделено мое):

Начиная с iOS 9, вы можете использовать AVPlayerViewController для обеспечения воспроизведения "картинка в картинке" (PiP) на поддерживаемых моделях iPad.

  1. Для первого в целом - Возможности выберите Фоновое аудио, AirPlay и PiP

  2. Вставьте мой код на Objective-C

    NSString * путь = [[NSBundle mainBundle] pathForResource:@"видео" ofType:@"mp4"]; NSURL *url = [NSURL fileURLWithPath: путь];self.AVPlayer = [AVPlayer playerWithURL:url];self.layer = [AVPlayerLayer playerLayerWithPlayer:_AVPlayer];

    [self.layer setFrame:CGRectMake(0, 0, self.view.frame.size.width-100, self.view.frame.size.height-72)];[self.layer setVideoGravity:AVLayerVideoGravityResize];[self.view.layer addSublayer: _layer];

    [_AVPlayer play];

  3. Проверьте, поддерживает ли Pip текущее устройство

    -(void) setupSuport {if ([AVPictureInPictureController isPictureInPictureSupported]) {

       _AVPictureInPictureController =  [[AVPictureInPictureController alloc] initWithPlayerLayer:_layer];
         _AVPictureInPictureController.delegate = self;
    
     }
     else
     {
      // not supported PIP start button desable here
     }
    

    }

  4. Действие PiP

-(IBAction) actionPIPStart:(UIButton*) sender {

if (_AVPictureInPictureController.pictureInPictureActive) {
    [_AVPictureInPictureController stopPictureInPicture];
    NSLog(@"no PIP!");
}
else {
    [_AVPictureInPictureController startPictureInPicture];
    NSLog(@"PIP!");
}

}

Я реализовал платформу PiPhone, которая включает режим PiP на iPhone. Я думаю, что это может решить вашу проблему.

Другие вопросы по тегам