首页 > 学院 > 开发设计 > 正文

Hololens——视频播放

2019-11-07 23:10:09
字体:
来源:转载
供稿:网友

说明:

HoloLens可支持视频播放,今天讲解的是HoloLens离线视频播放(内置在HoloLens中的视频或通过WWW下载得到的视频)。

视频格式:

HoloLens所支持的视频格式需依赖于Unity中MovieTexture所支持的视频格式,也就是说可以通过MovieTexture方式来进行播放视频(其他的视频播放插件如 EasyMovieTexture、Vuforia中的视频播放组件、MobileMovie等测试暂不支持HoloLens(UWP)平台)。

MovieTexture所支持的视频格式为.ogv,所以需要将其他格式的视频转换成.ogv格式,这里提供一个较小的转换工具:

链接:http://pan.baidu.com/s/1hsqRHAk 密码:0v8b

Unity中处理:

使用一个3D Object——Quad作为视频播放组件(Quad只包含4个顶点,两个三角形)

代码处理:

本地离线播放:

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// Made By XXQQ.Bruce/// </summary>public class MovieTest : MonoBehaviour{    public MovieTexture MovieTextureShow;    void Start()    {        GetComponent<MeshRenderer>().material.mainTexture = MovieTextureShow;        MovieTextureShow.loop = true;        MovieTextureShow.Play();    }}

WWW下载并播放:

下载资源:
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// Load AssetBundle From Server/// </summary>public class LoadAssetBundle : SingleT<LoadAssetBundle>{    public Action<WWW> actionWWW;    WWW www;    public Action<MovieTexture> actionGetMovieTexture;    public Action <AudioClip> actionGetMovieAudioClip;    public Action actionMovieLoadOver;    public IEnumerator LoadMovie(string movieURL)    {        www = WWW.LoadFromCacheOrDownload(movieURL, 5);        actionWWW(www);        yield return www;        if (www.error != null)        {            Debug.Log(www.error);        }        else        {            var movieAssetBundle = www.assetBundle;            var requestMovieTexture = movieAssetBundle.LoadAllAssets(typeof(MovieTexture))[0];            yield return requestMovieTexture;            var movie = requestMovieTexture as MovieTexture;            actionGetMovieTexture(movie);//get MovieTexture            var requestMusic = movieAssetBundle.LoadAllAssets(typeof(AudioClip))[0];            yield return requestMusic;            if (requestMusic != null)            {                var musicClip = requestMusic as AudioClip;                actionGetMovieAudioClip(musicClip);//get AndioClip            }        }        actionMovieLoadOver();    }   }播放控制:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class MovieControl{    public static void MovieControlFun(GameObject moviePlane, MovieTexture movieTexture, AudioClip audioClip, bool isLoop, bool isAutoPlay)    {        if (movieTexture != null)        {            moviePlane.GetComponent<MeshRenderer>().material.mainTexture = movieTexture;            if (isLoop)                movieTexture.loop = true;            else                movieTexture.loop = false;            if (isAutoPlay)                movieTexture.Play();        }        if (audioClip == null)            return;        if (moviePlane.GetComponent<AudioSource>() == null)            moviePlane.AddComponent<AudioSource>();        var s = moviePlane.GetComponent<AudioSource>();        s.clip = audioClip;        if (isAutoPlay)            s.Play();        if (isLoop)            s.loop = true;        else            s.loop = false;    }}

测试效果:

透明视频:链接:http://pan.baidu.com/s/1i5wpszz 密码:8wdx

普通视频:链接:http://pan.baidu.com/s/1c1RrvHI 密码:gts0

注意:

MovieTexture视频播放,视频和音效是分开的,需要单独播放视频和音效


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表