文档章节

iOS新的视频开发框架AVPlayerViewContoller与画中画技术

珲少
 珲少
发布于 2016/02/25 23:54
字数 1051
阅读 4452
收藏 6

iOS新的视频开发框架AVPlayerViewContoller与画中画技术

一、引言

        前面有一篇博客探讨了iOS中视频播放的开发相关类和方法,那篇博客中主要讲解的是MeidaPlayer框架中的MPMoviePlayerController类和MPMoviePlayerViewController类。在iOS8中,iOS开发框架中引入了一个新的视频框架AVKit,其中提供了视频开发类AVPlayerViewController用于在应用中嵌入播放视频的控件。在iOS8中,这两个框架中的视频播放功能并无太大差异,基本都可以满足开发者的需求。iOS9系统后,iPad Air正式开始支持多任务与画中画的分屏功能,所谓画中画,即是用户可以将当前播放的视频缩小放在屏幕上同时进行其他应用程序的使用。这个革命性的功能将极大的方便用户的使用。于此同时,在iOS9中,MPMoviePlayerController与MPMoviePlayerViewController类也被完全易用,开发者使用AVPlayerViewController可以十分方便的实现视频播放的功能并在一些型号的iPad上集成画中画的功能。

二、AVPlayerViewController的使用与其中方法属性解析

        使用AVPlayerViewController首先需要引入两个框架,如下:

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

使用如下代码进行视频的播放:

    NSString * path = [[NSBundle mainBundle]pathForResource:@"iphone" ofType:@"mp4"];
    NSURL *url = [NSURL fileURLWithPath:path];
    AVPlayerViewController * play = [[AVPlayerViewController alloc]init];
    play.player = [[AVPlayer alloc]initWithURL:url];
    [self presentViewController:play animated:YES completion:nil];

运行工程,可以看到如下图所示的视频播放界面:

AVPlayerViewController中还有如下属性和方法提供给开发者使用:

//是否显示视频播放控制控件
@property (nonatomic) BOOL showsPlaybackControls;
//设置视频播放界面的尺寸缩放选项
/*
可以设置的值及意义如下:
AVLayerVideoGravityResizeAspect   不进行比例缩放 以宽高中长的一边充满为基准
AVLayerVideoGravityResizeAspectFill 不进行比例缩放 以宽高中短的一边充满为基准
AVLayerVideoGravityResize     进行缩放充满屏幕
*/
@property (nonatomic, copy) NSString *videoGravity;
//获取是否已经准备好开始播放
@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;
//获取视频播放界面的尺寸
@property (nonatomic, readonly) CGRect videoBounds;
//视频播放器的视图 自定义的控件可以添加在其上
@property (nonatomic, readonly, nullable) UIView *contentOverlayView;
//画中画代理 iOS9后可用
@property (nonatomic, weak, nullable) id <AVPlayerViewControllerDelegate> delegate NS_AVAILABLE_IOS(9_0);
//是否支持画中画 iOS9后可用 默认支持
@property (nonatomic) BOOL allowsPictureInPicturePlayback NS_AVAILABLE_IOS(9_0);

三、画中画编程技术应用

        AVPlayerViewController是默认支持画中画操作的,如上图所示,视频的播放界面右下角出现一个画中画的按钮,点击这个按钮当前播放的视频界面会缩小显示在屏幕角落,这时点击Home键回到主界面,或者切换到其他应用程序,视频播放不会中断。如下图所示:

两指的捏合操作可以将缩小的视频播放窗口进行任意尺寸的放大,如果将视频窗口拖进屏幕的边界,视频窗口会被吸进边界,用户可以通过拖拽手势将其拉出,如下图:

AVPlayerViewControllerDelegate中的方法可以对用户画中画的操作进行监听:

//将要开始画中画时调用的方法
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController{
}
//已经开始画中画时调用的方法
- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController{
}
//开始画中画失败调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error{
}
//将要停止画中画时调用的方法
- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController{
}
//已经停止画中画时调用的方法
- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController{
}
//是否在开始画中画时自动将当前的播放界面dismiss掉 返回YES则自动dismiss 返回NO则不会自动dismiss
- (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{
    return YES;
}
//用户点击还原按钮 从画中画模式还原回app内嵌模式时调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler{
}

 

 

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

 

© 著作权归作者所有

珲少

珲少

粉丝 874
博文 390
码字总数 469911
作品 0
上海
iOS工程师
私信 提问
iOS开发之AVKit框架使用

iOS开发之AVKit框架使用 一、引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFoundation的一层视图层封装。其中相关文件和类都十分简单,本篇博客主要整理和总结AVKit...

珲少
2018/10/11
0
0
极光开发者沙龙 JIGUANG MEETUP——iOS 技术综合实践

活动背景 相信各位 iOSer 已经在 WWDC 结束后亲身体验过相关的技术。今年 WWDC 后,开发者们要适配的工作并不像以前那么繁重,在各大论坛中也可以搜到相关的技术实战分享。但因为每个公司的技...

极光推送
2017/10/24
0
0
您不能错过的 Safari 10.0 新特性

作为一名前端,您可以忽略昨晚 WWDC 的更新,但您一定不能错过这篇文章。Safari 10.0 随之发布,带来了不少新的特性,为开发者带来福音。小编参照官方文档,为大家整理翻译,便于阅读,么么哒...

oschina
2016/06/15
6.9K
9
极光开发者沙龙 JIGUANG MEETUP——iOS 技术综合实践

活动背景 相信各位 iOSer 已经在 WWDC 结束后亲身体验过相关的技术。今年 WWDC 后,开发者们要适配的工作并不像以前那么繁重,在各大论坛中也可以搜到相关的技术实战分享。但因为每个公司的技...

极光推送
2017/10/24
1
0
iOS 9应用开发教程之iOS 9新特性

iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统。该操作系统于2015年6月8号(美国时间)被发布。本章将主要讲解iOS 9的新特...

大学霸
2015/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
今天
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部