美文网首页
(AR)实现扫图播网络视频

(AR)实现扫图播网络视频

作者: OneMore2018 | 来源:发表于2017-07-19 18:51 被阅读194次

最近看到一个app,叫扫动, 很神奇,通过在扫动官网上传自己的视频和识别图, 不管是自己还是别人, 只要下载有这个app的用户,都可以扫描图片播放视频,实现了动态更新视频(广告之类都可以通过这个来宣传,做大的话就厉害了 ),看下大概原理吧
原理 :使用朋友的网站,把视频和识别图传上去,识别图大小不能大于2M,使用VoidAR的接口地址,把拼接后的视频地址(即包含视频的宽高字段)和识别图返回给VoidAR云识别服务器,扫描时,通过地址下载服务器的视频

  1. 使用工具
    void ar最新版0.1.g
    unity3d 5.6.2
  2. 做前准备
    2.1


    Paste_Image.png

    这张图即为要实现的功能
    2.2
    首先准备好视频的识别图,我直接把视频截图当做识别图,结果识别率只有惨淡的两星,所以大家最好是用识别率高的图


    2_2.png
    视频和识别图传到网站后,在VoidAR的云识别空间里可以看到自己上传的一个列表,包含识别图,星数,拼接后的视频地址,如下图
2_3.png

这里一定要注意,必须要拼接视频地址,不然之后不好做视频自适应
视频格式为“视频地址|视频宽度|视频高度”

  1. 开工
    首先我先说下,上面我提到的为什么要做自适应,因为我想实现当丢失识别后,要将视频变为横屏全屏播放,所以这里必须得知道视频宽高比

先实现普通的扫描播放视频,这个简单,在识别图脚本的OnFind实现播放,这里重点说下丢失以后的操作

3.1 首先在识别到的时候把videoplayer赋值给公共变量VideoPlayer类,然后获取当前屏幕的宽高比 Pratio = (float) Screen.witdh / (float)Screen.height , 在VideoPlayBehaviour中获取视频宽高比 Vratio = (float)videoplayer.texture.witdh / (float)videoplayer.texture.height
(这里获取视频的宽高比,是通过播放视频组件上材质的宽高来的)
3.2 新建Camera,设置为正交投影,新建plane,在其上创建脚本test
// 丢失后全屏播放
public class test : MonoBehaviour
{
Camera camera;

void Start()
{
    // 获取到plane父物体Camera
    camera = transform.parent.GetComponent<Camera>();
    // 设置camera 为正交投影
    camera.orthographic = true;
    //设置 orthographicSize 尺寸, 这里乘以10 ,是方便之后plane下的子物体都可以通过像素来计算
    camera.orthographicSize = Screen.height / 2 * 10;
    // 设置plane大小为摄像机像素大小,保证整个plane正好在camera 视野中
    transform.localScale = new Vector3(camera.pixelWidth,1,camera.pixelHeight);
}

}

下一步就是丢失后将播放视频的组件放在plane下面作为子物体,在OnLost函数中调整视频的大小

videoplayer.localscale = (1 * Pratio * Vratio ,1,1);

需要注意的部分就是这些, 但坑爹的是,太虚的设置播放视频那块是在Editor状态下写的,所以打包到移动端,就丢失后不能全屏(代码都没经过那块),所以把Editor去掉后,可以了,但是特别卡,而且没有声音 ,很蛋疼, 如果有大神知道有其他的方法,麻烦告诉下我~ ,谢谢啦!(这几天又看了下,发现其实voidar是有提供接口的--,在CloudContorl里面, 实现OnReady函数,然后在父方法里面监听该方法即可)

相关文章

网友评论

      本文标题:(AR)实现扫图播网络视频

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