Hololens——视频播放

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

猜你喜欢

转载自blog.csdn.net/aiyan1111111/article/details/57407147