AR、VR开发特刊(虚拟与现实开发特辑)Unity技术VR/AR分享

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

2018-11-22  本文已影响12人  无忌不悔
虹藏不见

前言

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

修改姿态和尺寸
笔者从该方法中得到启发:

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

实现

  1. 初始化一个cameraView并为其`data'属性赋值,其中的下标为12的数值决定了视频的可见范围,为关键参数。
  2. 为视频渲染提供了一个尺寸,用来规定视频的尺寸比例。
    因此,我们可以得出解决方案:在适当的时机调整视频的姿态和尺寸,并实现继续播放视频。
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供参考。

上一篇下一篇

猜你喜欢

热点阅读