【Unity】WebGLでVideoPlayerの再生を行う

WebGLでVideoPlayerの動画を再生しようとしても、上手く再生できないみたいなの…😥

WebGL環境だとビデオクリップ指定での再生が出来ないわ。URL指定で再生する必要があるわ。

UnityのVideoPlayerコンポーネントは、指定されたビデオクリップやURLの動画を再生する機能を提供します。

しかし、WebGLプラットフォームに限り、ビデオクリップ指定での再生ができず、必ずURLで動画ファイルの場所を指定する必要があります。

再生対象の動画のURLは、パブリックアクセス可能なURLである必要があり、例えば次のような形で予めサーバーにアップロードされている必要があります。

アップロードの例
  • StreamingAssetsフォルダ配下に動画ファイルを格納し、ビルドファイルと一緒にアップロードする
  • 任意のストレージサーバー等に動画ファイルをアップロードする

特に、ゲームのビルドファイルと一緒にStreamingAssetsフォルダをアップロードできる環境でない場合は、別のストレージサーバー等に動画ファイルを配置しておく必要があります。 [1]

本記事では、このような注意点を含め、WebGLプラットフォームでVideoPlayerの動画を再生する流れについて解説していきます。

この作品はユニティちゃんライセンス条項の元に提供されています

動作環境
  • Unity 2022.1.15f1

スポンサーリンク

前提条件

WebGLプラットフォームでUnityプロジェクトが開かれているものとします。

本記事では、次のようなQuadメッシュオブジェクトにVideoPlayerを適用して動画を再生できるようにしていきます。

メッシュ等に描画したい場合、Video Playerの以下項目でマテリアルの描画先を設定しておきます。

設定項目の詳細は、以下マニュアルをご覧ください。

インスペクタから動画URLを設定する

インスペクタからURLを設定する場合、Video PlayerコンポーネントSource項目URL、その下のURL項目動画ファイルのURLを指定します。

2つ目のURL項目には、ご自身でアップロードした動画ファイル等のURLを指定します。

実行結果

存在する動画のURLを指定すると、指定されたURLの動画が再生されるようになります。

スクリプトからURLを設定して再生する

スクリプトから動的にURLを指定して動画再生したい場合、次のように該当するVideoPlayerコンポーネントurlプロパティにURL文字列を指定します。

var videoPlayer = GetComponent<VideoPlayer>();

・・・(中略)・・・

// URL指定
videoPlayer.source = VideoSource.Url;
videoPlayer.url = "動画ファイルのURL";

// 再生
videoPlayer.Play();

サンプルスクリプト

以下、指定されたURLを再生するサンプルスクリプトです。

PlayMovieExample.cs
using UnityEngine;
using UnityEngine.Video;

public class PlayMovieExample : MonoBehaviour
{
    // VideoPlayerコンポーネント
    [SerializeField] private VideoPlayer _videoPlayer;

    // 動画ファイルのURL
    [SerializeField] private string _url;

    private void Start()
    {
        // URL指定
        _videoPlayer.source = VideoSource.Url;
        _videoPlayer.url = _url;

        // 再生
        _videoPlayer.Play();
    }
}

上記をPlayMovieExample.csという名前でUnityプロジェクトに保存し、適当なオブジェクトにアタッチし、インスペクタより各種項目を設定すると昨日するようになります。

実行結果は1つ目の例と同様のため、割愛させていただきます。

StreamingAssetsフォルダに配置した動画を再生する

WebGL環境では、ビデオクリップ指定の動画を再生できませんが、Streaming Assetsの動画をURLとして指定する形なら可能です。

注意

WebGL実行環境では、アプリURLと同階層にStreamingAssetsフォルダを配置する形になります。StreamingAssetsフォルダが使用不可なサーバー環境では実施できない手順のためご注意ください。

以下、Streaming Assets経由で動画再生させる手順です。

動画ファイルをStreamingAssetsフォルダ配下に置く

UnityプロジェクトのStreamingAssetsフォルダ配下に動画ファイルを配置します。StreamingAssetsフォルダが存在しない場合は作成してください。

スクリプトの実装

Streaming Assetsの動画ファイルを再生するためのスクリプトを実装します。

以下、実装例です。

StreamingAssetsExample.cs
using System.IO;
using UnityEngine;
using UnityEngine.Video;

public class StreamingAssetsExample : MonoBehaviour
{
    // VideoPlayerコンポーネント
    [SerializeField] private VideoPlayer _videoPlayer;

    // StreamingAssetsの動画ファイルへのパス
    [SerializeField] private string _streamingAssetsMoviePath;

    private void Start()
    {
        // URL指定
        _videoPlayer.source = VideoSource.Url;

        // StreamingAssetsフォルダ配下のパスの動画をURLとして指定する
        _videoPlayer.url = Path.Combine(Application.streamingAssetsPath, _streamingAssetsMoviePath);

        // 再生
        _videoPlayer.Play();
    }
}

上記スクリプトをStreamingAssetsExample.csという名前でUnityプロジェクトに保存し、インスペクタより各種設定を行います。

Streaming Assets Movie Path項目には、StreamingAssetsフォルダより下のパスを設定してください。

ここまでの手順を成功させると動画が再生されるようになります。

Tips

WebGLとしてビルドすると、Streaming Assetsファイルは1つのStreamingAssetsフォルダ配下にまとめられるようになります。

WebGL環境でサポートされる動画形式

ここまで解説した例では、MP4形式の動画を再生していました。これ以外の形式もブラウザによっては再生可能です。

例えば、より軽量なWebM形式IEとOpera miniを除くブラウザで再生可能です。 [2]

参考:WebM video format | Can I use... Support tables for HTML5, CSS3, etc

対応する環境次第では検討してみるのも良いでしょう。

注意

VP9コーデックのWebM動画はUnityエディタ上では扱えないことにご注意ください。ただし、ビルド後では問題なく再生可能です(非対応ブラウザを除く)。Unityエディタ上でWebM形式動画を再生するためには、VP8コーデックである必要があります。

さいごに

WebGLプラットフォームでVideo Playerから動画再生するためには、動画ファイルのURLを指定する必要があることを解説しました。

Streaming Assetsが使えない環境では、別のストレージサーバー等で動画ファイルを管理する必要がある点にはご注意ください。

参考サイト

スポンサーリンク