开发iPad 画中画功能遇到的一些问题
1.如何获取画中画的暂停和播放状态。
在AVPlayer中监听timeControlStatus
self->player = [[AVPlayer alloc] initWithPlayerItem:item];
[self->player addObserver:self forKeyPath:@"timeControlStatus" options:NSKeyValueObservingOptionNew context:nil];//监听 timeControlStatus(为了监听画中画模式的暂停播放)
/*** kVC监听播放状态** @param keyPath* @param object* @param change* @param context*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{if ([player isEqual:object] && [@"timeControlStatus" isEqualToString:keyPath]){if (IS_IOS10_OR_LATER && pipController.isPictureInPictureActive) {//画中画启动状态switch (player.timeControlStatus) {case AVPlayerTimeControlStatusPaused://暂停break;case AVPlayerTimeControlStatusPlaying://播放}break;default:break;}}}
}
2.视频全屏的时候按HOME键退到后台,自动启动画中画功能。
经查明:
重要:苹果想让画中画功能一直能被用户操控,只有用户明确请求画中画功能才响应。尤其是退到后台时不能立即响应用户唤起画中画功能,这样的App会被App Store拒绝。
当用户按压Home键或触发一个把他们带入其他App的通知时,iOS 9自动将一个全屏播放的视频转到PiP播放。视频播放使用该功能的要求如下:
按照本章之前的描述那样让App支持画中画功能。
使用视图的视图填充窗口的边界来全屏播放视频。
提示:用户可以在禁用画中画自动唤起,通过设置 Settings > General > Multitasking > Persistent Video Overlay。如果你认为一切已设置妥当,但当你按下Home键时,发现你的视频不会进入画中画,请检查此项设置。
当App播放的视频转到画中画播放时,系统将管理视频内容的呈现,而你的App会继续在后台运行。当你的应用程序在后台运行,请确保丢弃不需要的资源,如视图控制器、视图、图像和数据缓存。在这种情况下,你期望执行适当且必须的操作,如视频合成、音频处理、下载接下来播放的内容等操作,但你必须注意尽可能少地消耗资源。如果你的应用程序在后台消耗太多的资源,系统将终止它。
参考资料:https://www.jianshu.com/p/27ce4ada48da iOS 9 分屏多任务:画中画(PiP)快速入门
3.播放一个错误的视频地址,没有fail、没有end。
目前没有好的解决办法,具体原因也没有查明。(难道是AVPictureInPictureController的问题?)
解决办法是,记一个标记:
BOOL isLoadedTimeEmpty;
然后监听 AVPlayerItem的status和loadedTimeRanges
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:self->asset];item.canUseNetworkResourcesForLiveStreamingWhilePaused = YES;//添加观察者[item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];[item addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];
/*** kVC监听播放状态** @param keyPath* @param object* @param change* @param context*/
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{if ([player.currentItem isEqual:object] && [@"status" isEqualToString:keyPath]){switch (player.status) {case AVPlayerStatusReadyToPlay:{if (isPlaying) {NSArray *loadedTimeRanges = [[player currentItem] loadedTimeRanges];if (loadedTimeRanges.count==0) {isLoadedTimeEmpty = YES;//此处应走停止播放回调/代理return;}//此处应走播放的回调/代理}}break;case AVPlayerStatusFailed:{DDLogDebug(@"AVPlayerStatusFailed");}break;case AVPlayerStatusUnknown:{DDLogDebug(@"AVPlayerStatusUnknown");}break;default:break;}}else if ([player.currentItem isEqual:object] && [@"loadedTimeRanges" isEqualToString:keyPath]){NSArray *loadedTimeRanges = [[player currentItem] loadedTimeRanges];if (isLoadedTimeEmpty && loadedTimeRanges.count>=0) {//此处应走播放的回调/代理(防止其实能播,但是因为回来的先后顺序不能播的情况)}}
}
开发iPad 画中画功能遇到的一些问题相关推荐
- surface 哪个系列适合java开发,iPad Pro和Surface Pro两大顶级平板该如何选择?
平板和电脑之间的争议,在平板出现的那一年就开始存在,这也是移动端和PC端的一场战争,不过移动端会战胜PC端的结论似乎不需要等待时间的证明,因为每一个创业者,厂商都在朝这个方向努力.错过手机发展的最好时 ...
- iPad应用开发实践指南:菜鸟如何用ios 5开发ipad上的复杂应用程序
<iPad应用开发实践指南>前言 2011年10月,苹果公司首席执行官Tim Cook公布了有关iPad的一些有趣数据,包括: 财富500强公司有92%在测试或部署iPad: 美国本土80 ...
- AVPictureInPictureController(iPad画中画)
画中画仅支持iPad(iOS 9级以上) 首先,来一波效果图: 当前应用内开启画中画的效果 类介绍 @available(iOS 9.0, *) open class AVPictureInPictu ...
- 如何用ios 5开发ipad上的复杂应用程序
2011年10月,苹果公司首席执行官Tim Cook公布了有关iPad的一些有趣数据,包括: 财富500强公司有92%在测试或部署iPad: 美国本土80%的医院在测试或用iPad控制流程: 美国的每 ...
- 腾讯回复微信好友上限约为 1 万个;曝苹果正开发 iPad Air 6:搭载 M2 自研芯片;百度开源 BifroMQ|极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- shell开发跳板机功能脚本
利用Shell开发跳板机功能脚本案例 范例17_6:开发企业级Shell跳板机案例.要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式中断脚本到跳板机服务器上执行任何系统命令 方法1: ...
- php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果
对于很多视频编辑工具,小编都会想要操作看看效果咋样,这不,小编刚找到一款视频编辑工具,使用了一下觉得制作效果很是不错,可以进行视频加画面特效.照片制作成电子相册.视频合并加转场特效.添加字幕等等操作. ...
- quartus 修改 时钟_Clock Quartus II 开发的多功能数字时钟,有计时、调 闹铃、警报等 Other systems 其他 274万源代码下载- www.pudn.com...
文件名称: Clock下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Others 文件大小: 530 KB 上传时间: 2017-04-20 下载次数: 0 提 供 者: 墨离非 ...
- HTML5开发 桌面提醒功能
桌面提醒的介绍 桌面通知功能能够让浏览器即使是最小化状态也能将消息通知给用户.这和WebIM是最为天然的结合.不过,目前支持Desktop Notification功能的浏览器只有Chrome5+. ...
最新文章
- Nessus 4.4 windows and linux 安装手册
- 编程将 .Net Assembly 里的类注册成 COM 类
- 微信8.0.6正式发布,新增了7大变化,个个实用~
- spring之AOP(转)
- linux-squirrel
- 强联通分量算法的个人详解Tarjan算法(包含缩点)
- “请先做自我介绍”:高手都是这样做自我介绍,这样介绍最加分
- java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()
- 详解Android Touch事件的传递机制
- 怎样在linux系统上安装r,Linux系统之路——如何在CentOS7.2安装R(示例代码)
- 单进程服务器-epoll版
- 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题
- UI设计师经常去的提升欣赏水平的社区网站
- php oci_bind_array_by_name查询,PHP - 函数:OCIBindByName()
- 小强的HTML5移动开发之路(20)——HTML5 Web SQL Database
- PostgreSQL 之 CREATE FUNCTION
- erps 单环基本原理
- dmg2iso使用及转换DMG文件遇到的问题
- 解析微信小程序码的地址scene
- 语音识别之wave文件(*.wav)格式、PCM数据格式介绍
热门文章
- 钉钉直播下载解决方法
- Spring OXM使用体验
- 计算机组装与维护----第十二次作业
- linux用户注销的方法,linux退出登录_Linux下注销登录用户的方法
- LaTeX中打出双竖线符号
- VTK多个多边形数据的合并 - vtkAppendPolyData
- 手机wps如何转换html,手机版wpsoffice怎么转换成电脑版
- amd r7 2700u linux,AMD锐龙APU R7 2700U性能如何?锐龙R7 2700U版宏碁Swift 3 15轻薄本横评...
- 2022款联想拯救者r7000p和联想小新pro16评测哪个好哪个更值得入手
- Linux shell验证邮箱的有效性