iOS14画中画功能实现

简介: iOS14画中画功能

1.开启后台模式


微信图片_20221018104128.png

image.png


2.导入框架#import <AVKit/AVKit.h> 创建AVPictureInPictureController


注:如果是使用系统播放器AVPlayerViewController,设置allowsPictureInPicturePlayback = YES即可


//1.判断是否支持画中画功能
if ([AVPictureInPictureController isPictureInPictureSupported]) {
    //2.开启权限
    @try {
        NSError *error = nil;
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionOrientationBack error:&error];
        [[AVAudioSession sharedInstance] setActive:YES error:&error];
    } @catch (NSException *exception) {
        NSLog(@"AVAudioSession发生错误");
    }
    self.pipVC = [[AVPictureInPictureController alloc] initWithPlayerLayer:self.player];
    self.pipVC.delegate = self;
}


3.开启或关闭画中画


if (self.pipVC.isPictureInPictureActive) {
    [self.pipVC stopPictureInPicture];
} else {
    [self.pipVC startPictureInPicture];
}


4.代理 AVPictureInPictureControllerDelegate


// 即将开启画中画
- (void)pictureInPictureControllerWillStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController;
// 已经开启画中画
- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController;
// 开启画中画失败
- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController failedToStartPictureInPictureWithError:(NSError *)error;
// 即将关闭画中画
- (void)pictureInPictureControllerWillStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController;
// 已经关闭画中画
- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController;
// 关闭画中画且恢复播放界面
- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler;


值得注意的是,关闭画中画会执行


pictureInPictureController:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler: 这个代理方法,用来恢复播放界面的


全局画中画注意点


  1. 通过一个全局变量持有画中画控制器,可以在pictureInPictureControllerWillStartPictureInPicture持有,pictureInPictureControllerDidStopPictureInPicture释放;
  2. 有可能不是点画中画按钮,而是从其它途径来打开当前画中画控制器,可以在viewWillAppear 进行判断并关闭;
  3. 已有画中画的情况下开启新的画中画,需要等完全关闭完再开启新的,防止有未知的错误出现,因为关闭画中画是有过程的;
  4. 如果创建AVPictureInPictureController并同时开启画中画功能,有可能会失效,出现这种情况延迟开启画中画功能即可。
相关文章
|
iOS开发
iOS评论回复功能实现
iOS评论回复功能实现
413 0
iOS评论回复功能实现
|
3月前
|
iOS开发
你知道IOS移动端到操作手势有哪些吗?
你知道IOS移动端到操作手势有哪些吗?
|
3月前
|
Web App开发 前端开发 JavaScript
ios 系统滑动问题
ios 系统滑动问题
|
iOS开发
iOS 系统自带分享功能
iOS 系统自带分享功能
612 0
|
开发工具 iOS开发
IOS 使用 ZbarSDK 二维码扫描
IOS 使用 ZbarSDK 二维码扫描
193 0
IOS 使用 ZbarSDK 二维码扫描
|
设计模式 iOS开发
iOS手势全埋点
iOS手势全埋点
201 0
iOS手势全埋点
|
开发框架 iOS开发 开发者
iOS新的视频开发框架AVPlayerViewContoller与画中画技术
iOS新的视频开发框架AVPlayerViewContoller与画中画技术
325 0
iOS新的视频开发框架AVPlayerViewContoller与画中画技术
|
iOS开发
IOS下P2P播放器开发如何实现?
IOS下P2P播放器开发如何实现?1)播放器在播放磁力链、或者torrrent文件时,调用自身的P2P引擎,p2p引擎里面通过torrent或者磁力链信息,去通过tracker、DHT寻找周围的peer邻居,然后获取数据。
2119 0
|
iOS开发 API 开发者
iOS系统预览文件但不分享的实用技巧 (iOS10, QLPreviewController)
苹果系统的文件预览能力对于很多app来说是必要的,但其提供的UI相关api并不是可以定制的,比如需要定制toolbar, navigationbar的情况,直接使用QLPreviewController或者 UIDocumentInteractionController 并不能达到想要的效果。
2443 0