iOS开发之AVKit框架使用

简介: iOS开发之AVKit框架使用

一、引言


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


二、AVRoutePickerView


   AVRoutePickerView是iOS 11后新加入的类,AirPlay是iOS设备方便用户使用的一大特点。其作用是将当前手机播放的音频或者视频投送到其他外部设备上,例如支持AirPlay的电视,车载设备等。AVRoutePickerView只是一个按钮,其用来方便用户可以直接在应用程序内唤出AirPlay选择窗口。示例如下:


- (void)viewDidLoad {

   [super viewDidLoad];

   AVRoutePickerView * view = [[AVRoutePickerView alloc]initWithFrame:CGRectMake(100, 100, 60, 60)];

   //活跃状态颜色

   view.activeTintColor = [UIColor redColor];

   //设置代理

   view.delegate = self;

   [self.view addSubview:view];

}

//AirPlay界面弹出时回调

- (void)routePickerViewWillBeginPresentingRoutes:(AVRoutePickerView *)routePickerView{

   NSLog(@"!!!!!!!!");

}

//AirPlay界面结束时回调

- (void)routePickerViewDidEndPresentingRoutes:(AVRoutePickerView *)routePickerView{

   NSLog(@"@@@@@@@@");

}

按钮和弹出界面效果如下:


image.png




从上面的示例代码也可以看出,对于AVRoutePickerView,我们基本没有任何可以进行自定义的余地,从UI效果到按钮的触发方法全部由AVKit封装好了,它只是一个唤出系统功能的接口。


三、AVPlayerViewController


   AVPlayerViewController是对AVFoundation中的AVPlayer与AVPlayerLayer的封装,它是一个封装好的视图控制器,包含了视频的播放和控制功能。这个类在iOS8之后可用,解析如下:


@interface AVPlayerViewController : UIViewController

//视频播放器对象

@property (nonatomic, strong, nullable) AVPlayer *player;

//是否显示视频播放控制组件

@property (nonatomic) BOOL showsPlaybackControls;

//设置视频的填充方式

/*

//按比例缩放

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResizeAspect NS_AVAILABLE(10_7, 4_0);

//按比例填充

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResizeAspectFill NS_AVAILABLE(10_7, 4_0);

//充满

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResize NS_AVAILABLE(10_7, 4_0);

*/

@property (nonatomic, copy) AVLayerVideoGravity videoGravity;

//视频的第一帧是否已经准备好了

@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;

//获取视频的尺寸

@property (nonatomic, readonly) CGRect videoBounds;

//内容覆盖层 可以向其上添加子视图 会出现在视频层与控制层之间

@property (nonatomic, readonly, nullable) UIView *contentOverlayView;

//是否允许画中画  iOS9以上可用 ipad可用

@property (nonatomic) BOOL allowsPictureInPicturePlayback API_AVAILABLE(ios(9.0));

//是否对信息中心的播放器信息进行更新 默认为YES

@property (nonatomic) BOOL updatesNowPlayingInfoCenter API_AVAILABLE(ios(10.0));

//是否默认进行全屏播放

@property (nonatomic) BOOL entersFullScreenWhenPlaybackBegins API_AVAILABLE(ios(11.0));

//播放结束后 是否默认退出全屏

@property (nonatomic) BOOL exitsFullScreenWhenPlaybackEnds API_AVAILABLE(ios(11.0));

//代理

@property (nonatomic, weak, nullable) id <AVPlayerViewControllerDelegate> delegate API_AVAILABLE(ios(9.0));

@end

AVPlayerViewControllerDelegate解析如下:


//将要开始画中画时调用

- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController;

//已经开始画中画时调用

- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController;

//开启画中画失败调用

- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error;

//将要结束画中画调用

- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController;

//已经结束画中画调用

- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController;

//是否自动关闭控制器当画中画开始时

- (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController;

//画中画结束后回复之前的用户界面

- (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler;

四、AVPictureInPictureController


     AVPictureInPictureController是一个控制器,用来对画中画进行相关操作,解析如下:


@interface AVPictureInPictureController : NSObject

//获取当前设备是否支持画中画

+ (BOOL)isPictureInPictureSupported;

//画中画转换开始按钮图像

+ (UIImage *)pictureInPictureButtonStartImageCompatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection;

//画中画转换结束按钮图像

+ (UIImage *)pictureInPictureButtonStopImageCompatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection;

//构造方法

- (nullable instancetype)initWithPlayerLayer:(AVPlayerLayer *)playerLayer;

//播放器视图

@property (nonatomic, readonly) AVPlayerLayer *playerLayer;

//代理

@property (nonatomic, weak, nullable) id <AVPictureInPictureControllerDelegate> delegate;

//开始画中画

- (void)startPictureInPicture;

//结束画中画

- (void)stopPictureInPicture;

//画中画目前是否可用

@property (nonatomic, readonly, getter = isPictureInPicturePossible) BOOL pictureInPicturePossible;

//画中画是否激活

@property (nonatomic, readonly, getter = isPictureInPictureActive) BOOL pictureInPictureActive;

//是否支持画中画

@property (nonatomic, readonly, getter = isPictureInPictureSuspended) BOOL pictureInPictureSuspended;

目录
相关文章
|
11月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
647 60
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
RainbowChat是一套基于开源IM即时通讯聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题。RainbowChat可能是市面上提供im即时通讯聊天源码的,唯一一款同时支持TCP、UDP两种通信协议的IM产品。与姊妹产品RainbowTalk和RainbowChat-Web 技术同源,历经考验。
36 0
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
|
11月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
9月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
497 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
8月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
264 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
10月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
290 66
|
8月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
161 0
|
10月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
892 11
|
10月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
305 3
|
10月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。

热门文章

最新文章