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

作者: 无忌不悔 | 来源:发表于2018-11-22 18:08 被阅读12次
    虹藏不见

    前言

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

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

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

    实现

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

    相关文章

      网友评论

        本文标题:EasyAR应用之iOS原生视频播放【脱卡】

        本文链接:https://www.haomeiwen.com/subject/dqalqqtx.html