EasyAR应用之iOS原生视频播放【脱卡】

虹藏不见

前言

这是EasyAR应用系列的第二篇,针对AR视频播放,“脱卡”功能是亟待解决的问题。
然而,EasyAR的文档中没有关于iOS原生脱卡的具体实现方式,论坛中提问也没有得到有用的回答。然而,在旧版论坛的请问 iOS 识别好后 播放视频尺寸改变问题中,EasyARSupport给出了视频姿态和尺寸的修改方法,代码由C语言编写。

修改姿态和尺寸

笔者从该方法中得到启发:

追踪器捕捉到目标图像后,若目标图像脱离摄像头范围时,可以调整视频的姿态和尺寸,使视频仍位于视图的中央并维持原尺寸,脱卡问题就迎刃而解。

实现

  • 分析实现原理
    根据EasyARSupport提供的代码截图,可以得知代码做了两件事:
  1. 初始化一个cameraView并为其data属性赋值,其中的下标为12的数值决定了视频的可见范围,为关键参数。
  2. 为视频渲染提供了一个尺寸,用来规定视频的尺寸比例。
    因此,我们可以得出解决方案:在适当的时机调整视频的姿态和尺寸,并实现继续播放视频。
  • 寻找适当的时机
    在EasyAR示例代码的helloar.m的 render()函数中,targetInstances为获取到的目标实例,当目标实例的count > 0'即被认为追踪到目标,此时我们进行一系列视频渲染工作;而当其count > 0`不成立时,我们可以认为目标已脱离摄像头可视范围,此时即为适当的实际。
  • 实现脱卡
    根据上文中C语言代码是参考,我们可以相应地编写OC实现代码:
if (imagetargetSize != nil) { // 脱卡
            // data[12] = 0; 上下位置参数 -0.5(最上), 0(中), 0.5(最下)
            NSArray *data = @[@0, @-1, @0, @0, @-1, @0, @0, @0, @0, @0, @1, @0, @0, @0, @-1, @1]; 
            easyar_Matrix44F *cameraView = [easyar_Matrix44F create:data];
            easyar_Vec2F *size = [easyar_Vec2F create:@[@1.0f, @1.0f]];
            
            [current_video_renderer render:[camera projectionGL:0.2f farPlane:500.f] cameraview:cameraView size:size];
            [video update];
 }

其中的imagetargetSize初始值为nil,并在count > 0中由[imagetarget size]的值赋予。其内在逻辑是,imagetargetSize用于判断目标是否曾被追踪器获取,若未获取,则视频也还不确定,也就不存在调整姿态了。

综述

以上,iOS原生视频视频播放的“脱卡”功能得以实现。
这里有helloar_offcard.m供参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,018评论 3 119
  • 冬日 河水禁锢 空气里满是凋零 我像个觅食的动物 四下找寻 不曾丢失的东西
    谷羽HX阅读 195评论 0 0
  • 有学弟问我,要不要报名计算机二级考试。我对他说,这门考试特别难,那些语言啊程序啊简直天书,根本看不懂。后来学弟告诉...
    张牧阅读 631评论 0 1
  • 假设空降或提拔到一个部门做负责人: 第一铁律=关注外部目标而不是关注内部问题,设定可达成目标,共同完成的目标,可衡...
    Spencer成长持续阅读 248评论 0 0
  • 文/鹿小妮 我十岁,他来了南非二十五岁,我也来了南非 我们活在地球的两端 十岁那年我爸来了南非,从此开启了我无数次...
    鹿小妮在南非阅读 7,469评论 75 251