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

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

一、引言

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

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

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

?


1

2

#import <AVKit/AVKit.h>

#import <AVFoundation/AVFoundation.h>

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

?


1

2

3

4

5

    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中还有如下属性和方法提供给开发者使用:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

@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中的方法可以对用户画中画的操作进行监听:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

//将要开始画中画时调用的方法

- (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{

}

时间: 2024-12-06 18:40:10

iOS新的视频开发框架AVPlayerViewContoller与画中画技术的相关文章

ios 一个关于视频中人脸识别的技术

问题描述 ios 一个关于视频中人脸识别的技术 10C 目前需要做的功能是在**视频中跟着指令转动头像进行人脸识别**没有思路希望有大神能够指点指点多谢了!!! 解决方案 用opencvhttp://blog.csdn.net/augusdi/article/details/9012365 解决方案二: iOS开发技术之人脸识别senseTime,FaceU人脸识别技术

iOS 新特性分列式 之 iOS 6.x - 主要内容:自动布局、集合视图、UI 状态保持

iOS 新特性分列式 之 iOS 6.x - 主要内容:自动布局.集合视图.UI 状态保持 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. iOS6.1 地图开发包搜索功能 MapKit Sea

Twitter视频分享应用Vine提供了一个新的视频平台

摘要: Twitter视频分享应用Vine给年轻人.有抱负的演员和YouTube明星提供了展示其离奇创造力的新平台.现在,这个平台已成就了一大批视频明星,让他们一夜成名,获得了无数粉丝的追捧. Twitter视频分享应用Vine给年轻人.有抱负的演员和YouTube明星提供了展示其离奇创造力的新平台.现在,这个平台已成就了一大批视频明星,让他们一夜成名,获得了无数粉丝的追捧. 据美国科技资讯网CNET报道,布里塔尼-杰恩-弗兰(Brittany-Jayne Furlan)会千方百计地搞怪,只求博

iOS 9 概念视频曝光 - 苹果的下一代 iOS 还能够怎么玩?

class="post_content" itemprop="articleBody"> 从 iOS 7 到 iOS 8,苹果在新系统中呈现出的惊喜并不如上一次更迭来得震撼,但是这并没有停止我们对下一代 iOS 版本的更多期待.那么,你期待 iOS 9 还能怎么玩?日前,知名概念设计师 Ralph Theodory 带来了一组惊艳十足的 iOS 9 概念设计-- Ralph Theodory 表示,这组 iOS 9 概念是在前一代系统版本的基础上"移

新浪Flash下载器 [HttpWebRequest | 新浪视频]

前言      哈哈,好久不写小工具了,去年写的笨笨图片批量下载器 V0.3 beta平时还是帮了一些忙的,今天的小工具是 新浪Flash下载器 .可以直接下载swf结尾的文件,如果下载新浪视频文件,你需要右键源代码找到这个flash的伪链接,如http://music.sina.com.cn/yueku/flashPlayer.swf?vid=6851105,然后把这里连接复制到软件输入框点下载就可以了.   运行环境      1.     Microsoft .NET Framework

如何用傲游云浏览器下载新浪视频

  首先打开傲游云浏览器,并且进入新浪视频,打开想下载视频文件的页面 在浏览器后面有个下拉的小箭头,里面可以选"资源嗅探器" 选中后弹出一个窗口 等待嗅探器找到你想下载的视频的下载地址,选中,并且选择下载选中的文件 设定好下载路径后下载下来就可以本地观看了!

新浪视频无法安装sina tv插件怎么办

  新浪视频无法安装sina tv插件怎么办?新浪视频无法安装sina tv插件解决方法.新浪电视的收看需要您确保在安装新浪网提供的P2P播放器插件的情况下才能观看(该插件不会对您的计算机产生任何危害).在自动化的安装过程中,需要您解除浏览器对弹出窗口的阻止,并启用Active控件和插件.那么新浪视频无法安装sina tv插件怎么办?让小编告诉大家新浪视频无法安装sina tv插件解决方法吧! Android版iPhone版Mac版iPad版 1.解除浏览器对弹出窗口的阻止 打开浏览器的"工具&

ios m3u8加密视频格式不能播放

问题描述 ios m3u8加密视频格式不能播放 我现在有一个M3U8文件的URL .它是一个加密的.ts文件上.该M3U8文件还包含的URI解密密钥,服务器那边说不需要我进行任何的解密,但是我现在使用的AVplayer不能播放,有没有人遇见过这种问题呢?安卓端可以播放 解决方案 AVplayer可以播放m3u8文件,看看是不是其他地方出的问题 解决方案二: 你好? 如何播放加密的m3u8视频?你的问题解决了吗? 解决方案三: 我最近也在做播放加密视频这款,你有什么解决方案,方便交流一下吗? em

流媒体-ios开发手机视频客户端,不知道再怎么嵌入一个视频播放窗口

问题描述 ios开发手机视频客户端,不知道再怎么嵌入一个视频播放窗口 要给一个网站做一个ios的视频播放器,视频资源从它的网站下载,听说要用到流媒体技术,不知道怎么回事,怎么在代码中嵌入一个播放器啊,怎么把网站发来的数据包解析成视频文件呢?