美文网首页iOS视屏
6.4 视频->2.0 视频特效:画中画

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

作者: 蓝田_Loto | 来源:发表于2016-11-10 15:56 被阅读128次

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


    本文相关目录:
    ===================== 所属文集: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:画中画 demo

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

    【OC语言】
    #import "ViewController.h"
    #import <AVKit/AVKit.h>  // 框架
    #import <AVFoundation/AVFoundation.h>  // AVPlayer
    
    @interface ViewController ()<AVPlayerViewControllerDelegate>
    @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)
    出处: 简书

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



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

    相关文章

      网友评论

        本文标题:6.4 视频->2.0 视频特效:画中画

        本文链接:https://www.haomeiwen.com/subject/acdxpttx.html