MRが楽しい

MRやVRについて学習したことを書き残す

HoloLensアプリでVideoPlayerを使って動的に動画ファイルを読み込んで再生する

本日は HoloLens の技術調査枠です。
HoloLensアプリでVideoPlayerを使って動的に動画ファイルを読み込んで再生してみます。
f:id:bluebirdofoz:20210326084111j:plain

VideoPlayer

Unity のシーン上で動画を再生する場合、VideoPlayer コンポーネントを利用します。
docs.unity3d.com
docs.unity3d.com

サンプルプロジェクトの作成

動画を再生するシーンを作成します。
以下の記事に従って MRTK をインポートしたサンプルプロジェクトを作成します。
bluebirdofoz.hatenablog.com
f:id:bluebirdofoz:20210326084150j:plain

VideoPlayer コンポーネントを追加するための Panel オブジェクトを追加します。
f:id:bluebirdofoz:20210326084201j:plain
f:id:bluebirdofoz:20210326084211j:plain

[Add Component]ボタンで Panel オブジェクトに[Video Player]コンポーネントを追加します。
f:id:bluebirdofoz:20210326084220j:plain

Video Player へ動的に動画ファイルを設定する以下のスクリプトを作成しました。
・VideoPlayerTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;

// 必須コンポーネントの指定
[RequireComponent(typeof(VideoPlayer))]
public class VideoPlayerTest : MonoBehaviour
{
    /// <summary>
    /// 起動処理
    /// </summary>
    void Start()
    {
        // VideoPlayerの参照を取得する
        VideoPlayer videoPlayer = this.gameObject.GetComponent<VideoPlayer>();

        // 自動再生OFF
        videoPlayer.playOnAwake = false;
        
        // ループON
        videoPlayer.isLooping = true;

        // 指定ディレクトリ配下の HoloMonLife.mp4 を再生する
        string filename = string.Format(@"HoloMonLife.mp4");
        string filePath = System.IO.Path.Combine(VideoFileDirectoryPath(), filename);
        
        // パスを指定する
        videoPlayer.url = filePath;

        // 動画を再生する
        videoPlayer.Play();
    }

    /// <summary>
    /// 定期処理
    /// </summary>
    void Update()
    {
        
    }
    /// <summary>
    /// ビデオ保存ディレクトリパスの取得
    /// 実行環境によって参照ディレクトリを変更する
    /// </summary>
    static private string VideoFileDirectoryPath()
    {
        string directorypath = "";
#if WINDOWS_UWP
        // HoloLens上での動作の場合、LocalAppData/AppName/LocalStateフォルダを参照する
        directorypath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
#else
        // Unity上での動作の場合、Assets/StreamingAssetsフォルダを参照する
        directorypath = UnityEngine.Application.streamingAssetsPath;
#endif
        return directorypath;
    }
}

f:id:bluebirdofoz:20210326084234j:plain

作成したスクリプトを Panel オブジェクトに追加します。
f:id:bluebirdofoz:20210326084243j:plain

エディター上での動作確認

エディター上で動作確認を行います。
Assets/StreamingAssets フォルダに参照する動画ファイルを配置します。
f:id:bluebirdofoz:20210326084251j:plain

シーンを再生すると Panel オブジェクトに動画が再生されます。
f:id:bluebirdofoz:20210326084303j:plain

HoloLens2上での動作確認

次に HoloLens2 上での動作確認を行います。
HoloLens2 ではアプリの LocalState フォルダを参照するように設定しているので、ここに動画ファイルを配置します。
f:id:bluebirdofoz:20210326084312j:plain

アプリを起動して、動画が再生されれば成功です。
f:id:bluebirdofoz:20210326084322j:plain