版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aiyan1111111/article/details/57407147
说明:
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视频播放,视频和音效是分开的,需要单独播放视频和音效