6.4 视频->2.0 视频特效:画中画

本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。


本文相关目录:
===================== 所属文集:6.0 图形和多媒体 =====================
6.1 Quartz 2D->1.1 Quartz 2D 简介
6.2 核心动画->1.0 CALayer的简介
··················· 1.1 CALayer的基本属性
··················· 1.2 CALayer的创建 & 非根layer的隐式动画
··················· 2.0 Core Animation(核心动画)
··················· 3.0 核心动画 & UIView动画
··················· 4.0 常用动画效果
6.3 音频->1.0 录音 未发布
············· 2.0 音效/音乐 未发布
············· iOS项目Demo - 仿·QQ音乐播放器 未发布
6.4 视频->1.0 视频播放方案
············· 2.0 视频特效:画中画
············· 3.0 视频功能
············· iOS项目Demo - 仿·慕课网视频播放器 未发布
6.5 直播 未发布
6.5 直播-> iOS项目Demo - 仿·斗鱼直播 未发布
===================== 所属文集:6.0 图形和多媒体 =====================


视频目录


视频特效:画中画

6.4 视频->2.0 视频特效:画中画_第1张图片
代码6:画中画 demo

编译环境:Xcode 8.0
模拟器版本:iOS 10
Swift版本:3.0

【OC语言】
#import "ViewController.h"
#import   // 框架
#import   // AVPlayer

@interface ViewController ()
@property (nonatomic,strong)AVPlayerViewController *AVPlayerVC;
@end

@implementation ViewController

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

- (IBAction)AVPlayerViewController:(UIButton *)sender {
    // 1.创建播放控制器
    AVPlayerViewController *vc = [[AVPlayerViewController alloc]init];
    self.AVPlayerVC = vc;
    
    // 设置代理
    vc.delegate = self;
    
    // 创建URL
    NSString *path = [[NSBundle mainBundle]pathForResource:@"1.mp4" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    
    // 创建播放器
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
    vc.player = player;
    
    // 是否显示控制按钮
    //vc.showsPlaybackControls = NO;
    
    // 2.播放
    [player play];
    
    // 3.展示界面
    [self presentViewController:vc animated:YES completion:nil];
    
    // 4.注册通知中心 接受通知(AVPlayerItemDidPlayToEndTimeNotification)
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didPlayToEndTime)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:nil];
}

// 接收到通知会来到此方法 (效果:切换下一个视频)
- (void)didPlayToEndTime{
    
    // 创建URL,更换视频
    NSString *path = [[NSBundle mainBundle]pathForResource:@"2.mp4" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    
    // 直接 换掉 vc的 player
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
    
    // 播放
    [player play];
    
    // 设置为替换后的新player
    self.AVPlayerVC.player  = player;
}

#pragma mark - AVPlayerViewControllerDelegate代理方法(对用户画中画的操作进行监听)
// 将要开始画中画时调用的方法
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController{
    NSLog(@"1将要开始画中画");
}

// 已经开始画中画时调用的方法
- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController{
    NSLog(@"2已经开始画中画");
}

// 开启画中画失败调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error{
    NSLog(@"3开启画中画失败调");
}

// 将要停止画中画时调用的方法
- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController{
    NSLog(@"4将要停止画中画");
}

// 已经停止画中画时调用的方法
- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController{
    NSLog(@"5已经停止画中画");
}

// 是否在开始画中画时自动将当前的播放界面dismiss掉 返回YES则自动dismiss 返回NO则不会自动dismiss
- (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{
    NSLog(@"6自动将当前的播放界面dismiss掉");
    return YES;
}

// 用户点击还原按钮,从画中画模式还原回app内嵌模式时调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler{
    NSLog(@"7从画中画模式还原回app内嵌模式");
}

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

@end
【Swift 语言】(暂无,以后补上)

本文源码 Demo 详见 Github(方便的话,帮忙点个Star,谢啦!)
https://github.com/shorfng/iOS_6.0_Graphics_and_multimedia.git




作者:蓝田(Loto)
出处:

如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
评论区回复微信(加好友请注明“+称呼”)发送邮件[email protected]



本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

你可能感兴趣的:(6.4 视频->2.0 视频特效:画中画)