当前位置: 首页 > wzjs >正文

creo二次开发快速排名优化推广价格

creo二次开发,快速排名优化推广价格,推荐网站建设话术,只有asp网站代码可以重新编译吗以下是一篇关于在 iOS 中实现画中画(PiP)功能的技术博客: iOS 画中画(PiP)功能实现指南 效果 简介 画中画(Picture in Picture, PiP)是一项允许用户在使用其他应用时继续观看视频内容的功能。本文将详细介绍如何在 iOS 应用中实现 PiP 功能,包括自定义内容渲染和…

以下是一篇关于在 iOS 中实现画中画(PiP)功能的技术博客:

iOS 画中画(PiP)功能实现指南

效果

请添加图片描述

简介

画中画(Picture in Picture, PiP)是一项允许用户在使用其他应用时继续观看视频内容的功能。本文将详细介绍如何在 iOS 应用中实现 PiP 功能,包括自定义内容渲染和控制系统控件的显示。

项目地址

github
pub.dev

系统要求

  • iOS 15.0 及以上版本
  • AVKit 框架

核心组件

实现 PiP 功能主要涉及以下几个核心组件:

  1. AVPictureInPictureController - 负责管理 PiP 会话
  2. AVPictureInPictureControllerContentSource - 定义 PiP 内容源
  3. AVSampleBufferDisplayLayer - 用于显示视频内容的图层
  4. AVPictureInPictureSampleBufferPlaybackDelegate - 处理视频播放相关的回调

实现步骤

1. 检查设备支持

首先需要检查设备是否支持 PiP 功能:

- (BOOL)isSupported {if (@available(iOS 15.0, *)) {return [AVPictureInPictureController isPictureInPictureSupported];}return NO;
}

2. 创建 PiP 视图

需要创建一个自定义视图来显示 PiP 内容:

@interface PipView : UIView
@property(nonatomic, strong) AVSampleBufferDisplayLayer *sampleBufferDisplayLayer;
@end@implementation PipView
+ (Class)layerClass {return [AVSampleBufferDisplayLayer class];
}- (instancetype)init {self = [super init];if (self) {_sampleBufferDisplayLayer = (AVSampleBufferDisplayLayer *)self.layer;}return self;
}
@end

3. 配置 PiP 控制器

设置 PiP 控制器需要以下步骤:

- (BOOL)setup:(PipOptions *)options {if (!self.isSupported) {return NO;}if (@available(iOS 15.0, *)) {// 创建 PiP 视图_pipView = [[PipView alloc] init];_pipView.translatesAutoresizingMaskIntoConstraints = NO;// 设置内容视图_contentView = (UIView *)options.contentView;// 创建内容源AVPictureInPictureControllerContentSource *contentSource =[[AVPictureInPictureControllerContentSource alloc]initWithSampleBufferDisplayLayer:_pipView.sampleBufferDisplayLayerplaybackDelegate:self];// 初始化 PiP 控制器_pipController = [[AVPictureInPictureController alloc]initWithContentSource:contentSource];_pipController.delegate = self;_pipController.canStartPictureInPictureAutomaticallyFromInline = options.autoEnterEnabled;// 设置控制样式_pipController.requiresLinearPlayback = options.controlStyle > 0;return YES;}return NO;
}

4. 实现播放代理

通过实现 AVPictureInPictureSampleBufferPlaybackDelegate 协议来处理视频播放:

- (void)pictureInPictureController:(nonnull AVPictureInPictureController *)pictureInPictureControllerdidTransitionToRenderSize:(CMVideoDimensions)newRenderSize {// 处理渲染尺寸变化
}- (void)pictureInPictureController:(nonnull AVPictureInPictureController *)pictureInPictureControllersetPlaying:(BOOL)playing {// 处理播放状态变化
}- (BOOL)pictureInPictureControllerIsPlaybackPaused:(nonnull AVPictureInPictureController *)pictureInPictureController {return NO;
}- (CMTimeRange)pictureInPictureControllerTimeRangeForPlayback:(nonnull AVPictureInPictureController *)pictureInPictureController {return CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity);
}

5. 控制 PiP 会话

启动 PiP:
- (BOOL)start {if (!self.isSupported) {return NO;}dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.1),dispatch_get_main_queue(), ^{if (self->_pipController.isPictureInPicturePossible) {[self->_pipController startPictureInPicture];}});return YES;
}
停止 PiP:
- (void)stop {if (self->_pipController.isPictureInPictureActive) {[self->_pipController stopPictureInPicture];}
}
释放资源:
- (void)dispose {if (@available(iOS 15.0, *)) {self->_pipController.contentSource = nil;}if (self->_isPipActived) {self->_isPipActived = NO;[self->_pipStateDelegate pipStateChanged:PipStateStopped error:nil];}
}

控制样式

PiP 窗口支持四种不同的控制样式:

  1. Style 0: 显示所有系统控件(默认)
  2. Style 1: 隐藏前进和后退按钮
  3. Style 2: 隐藏播放/暂停按钮和进度条(推荐)
  4. Style 3: 隐藏所有系统控件,包括关闭和恢复按钮

自定义内容渲染

  1. 通过 contentView 参数指定要在 PiP 窗口中显示的自定义视图
  2. pictureInPictureControllerDidStartPictureInPicture 回调中将自定义视图添加到 PiP 窗口
  3. 使用 AVSampleBufferDisplayLayer 来显示视频内容
  4. 通过 pictureInPictureControllerTimeRangeForPlayback 返回正确的时间范围来避免加载指示器

注意事项

  1. PiP 功能仅支持 iOS 15.0 及以上版本
  2. 启动 PiP 时需要适当延迟以确保正常显示
  3. 自动进入 PiP 模式需要在 setup 时配置 autoEnterEnabled 选项
  4. 释放资源时建议使用 contentSource = nil 而不是直接调用 stopPictureInPicture
  5. PiP 窗口的默认大小建议设置为至少 100x100,否则可能导致启动失败
  6. 使用 kCMTimePositiveInfinity 作为时间范围的 duration 可以避免加载指示器
  7. 自定义内容视图需要正确处理布局约束

最佳实践

  1. 在初始化时检查设备是否支持 PiP 功能
  2. 实现适当的错误处理和状态回调
  3. 在应用进入后台时,如果启用了自动进入选项,PiP 会自动启动
  4. 注意内存管理,及时释放不需要的资源
  5. 根据需求选择合适的控制样式
  6. 确保自定义内容视图的渲染性能

总结

iOS 的 PiP 功能实现主要依赖于 AVKit 框架,通过合理配置 AVPictureInPictureController 及其相关组件,可以为用户提供流畅的画中画体验。在实现过程中需要注意版本兼容性、状态管理和资源释放等问题。同时,通过自定义内容渲染和控制系统控件的显示,可以提供更好的用户体验。

参考

  • Adopting Picture in Picture for video calls
  • AVPictureInPictureController
  • AVSampleBufferDisplayLayer

PS

这个文档我偷懒了,让cursor自己更新了下,主要是效果展示。另外有个坑点是,用了两个没有公开的接口,如果影响上架了,一定通知我,我也想知道会不会影响上架。


文章转载自:

http://1W410V0r.fpkdd.cn
http://oQAGDpta.fpkdd.cn
http://izSaSPhv.fpkdd.cn
http://GrtSxHxL.fpkdd.cn
http://Kke1VVAY.fpkdd.cn
http://2oYJRmPa.fpkdd.cn
http://qDW7pJ9v.fpkdd.cn
http://kQEr6rQi.fpkdd.cn
http://1wzBz4Ct.fpkdd.cn
http://9XNBfrC9.fpkdd.cn
http://ObqkbGkq.fpkdd.cn
http://9EOJ7FmK.fpkdd.cn
http://Z4rlBdS3.fpkdd.cn
http://SAlOgEjJ.fpkdd.cn
http://5H3Vm4kg.fpkdd.cn
http://HurRzKYU.fpkdd.cn
http://JBPh0X0Y.fpkdd.cn
http://A1dI2H7u.fpkdd.cn
http://UIPQL8Iu.fpkdd.cn
http://qYeuO2UC.fpkdd.cn
http://LX0j4lMC.fpkdd.cn
http://6zYsjJ0b.fpkdd.cn
http://CfhUWCQF.fpkdd.cn
http://dRVgXivC.fpkdd.cn
http://UGguqrJ4.fpkdd.cn
http://bYM3e1ud.fpkdd.cn
http://jJKiPBIw.fpkdd.cn
http://mtP9T9Xd.fpkdd.cn
http://lzi7KOxZ.fpkdd.cn
http://kmVgUrXk.fpkdd.cn
http://www.dtcms.com/wzjs/754893.html

相关文章:

  • 微网站自助建站后台免费装修效果图大全
  • 白沙网站建设wordpress拖拽建站
  • 哪里可以做网站优化网络广告的优势有哪些
  • 网站建设周末培训网站怎么做外联
  • 孔夫子旧书网网站谁做的软件开发主要是干什么的
  • 织梦服务行业手机网站模板wordpress弹出插件
  • 网站备案网站类型做北京电梯招标的网站
  • 邢台最新通告今天长沙网站优化页面
  • 南昌网站建设公司渠道如何利用ftp上传网站
  • 上网站 ftp南通网站建设制作
  • 做外贸哪个网站看外汇织梦网站怎么加入引导页
  • 网站建设费属于广告费成都网络推广运营公司
  • 宁波网站建设服务电话杭州关键词排名工具
  • 软件开发可以做网站么宝安网站建设推广
  • 做3d任务的网站网站图片如何做水印
  • 中国建设银行网站登陆做网上商城网站哪家好
  • 北京手机网站搭建多少钱怎么自己弄网站免费
  • 企业网站开发成本sap.net怎么做网站
  • .net做网站之前设置如何做网站在网上销售
  • ui设计和网站开发佛山网络公司哪个好
  • 需要登陆的网站如何做爬虫织梦搭建网站
  • 微信官方微网站吗盐城市网站建设
  • 企业网站制作 徐州推广普通话活动总结
  • yy陪玩网站怎么做企业网站建设的申请
  • 国外网站 设计沈阳百度seo关键词优化排名
  • 免费团购网站模板公司建设网站成果预测
  • 购物网站页面网上做广告宣传
  • 龙海市住房和城乡建设局网站如何搭建虚拟专用网络
  • 网站优化是在哪里做修改厦门seo
  • 登录网站后没有转页面无锡建设局网站一号通