17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityで動画再生(VideoPlayer、AVProVideo)

Posted at

#概要
Unityのバージョンは2019.3

Unityで動画再生をするためのメモです。
標準コンポーネントの VideoPlayer と Asset の AVProVideo の使い方を説明。

VideoPlayer のコンポーネントの内容はマニュアルを見ると詳しく載っています。
https://docs.unity3d.com/ja/2018.4/Manual/class-VideoPlayer.html

AVProVideo のドキュメントはストアページからダウンロードできます(ただし英語)
https://assetstore.unity.com/packages/tools/video/avpro-video-56355
Assetは各OS向けに安いものも提供されているのでWindowsでしか使わないならそちらWindows版のみ購入した方がいい

#VideoPlayer の使い方
uGUI の RawImage に動画を表示する

  • シーンに RawImage を追加して Add Component > Video > Video Player で追加
  • Assets で右クリックし Create > Render Texture を作成
  • 作成した Render Texture を Raw Image の Texture と Video Player の TargetTexture にアタッチする
  • Video Player の Source を選択
  • Asset内のファイルを再生するなら Video Clip を選択して再生するファイルをアタッチする
  • 外部ファイルを再生するなら URL を選択して再生するファイルのパスを指定する
  • Play on Awake にチェックを入れると、シーン起動時にビデオ再生を開始
  • Loop にチェックを入れると、ビデオ再生を繰り返す

参考ページ
https://xr-hub.com/archives/15798
https://gametukurikata.com/basic/videoplayer
https://goisagi-517.hatenablog.com/entry/2018/12/29/131952

#VideoPlayer のSprict制御

.cs
  using UnityEngine.Video;

  VideoPlayer video = this.GetComponent<VideoPlayer>();

  // 再生するファイル指定
  video.url = System.Environment.CurrentDirectory + @"\movie\file.mp4";
 
  // 再生時に呼ばれるイベント登録
  video.started += OnStarted;

  // 終了時に呼ばれるイベント登録
  video.loopPointReached += OnLoopPointReached;

  // 再生 
  video.Play();

  // 停止
  video.Stop();


  void OnStarted(VideoPlayer vp)
  {
      Debug.Log("start");
  } 

  void OnLoopPointReached(VideoPlayer vp)
  {
      Debug.Log("End");
  }

参考ページ
https://docs.unity3d.com/ja/2018.4/ScriptReference/Video.VideoPlayer.html
https://atsushishi.xyz/2017/12/videoplayer_support/

#AVProVideo の使い方
Display uGUIに動画を表示する

  • AVProVideo をインポートして Component > AVPro Video > Media Player で追加
  • Media Player の Source Path で Relative To Streaming Assets Folder を ABsolute Path Or URL に変更
  • ここに再生するファイルパスを指定する
  • Auto Open は動画ファイルをスクリプトで指定するのでチェックをはずす
  • Auto Play も自動で再生されないようにチェックをはずす
  • Canvas の下に空の GameObject を追加して > Add Component > AVPro Video > Display uGUI を追加
  • Display uGUI の Media Player にさっき作った Media Player オブジェクトをアタッチ
  • Default Texture にテクスチャを指定して No Default Display のチェックをはずす(動画再生してないときのサムネイル表示)

参考ページ
https://qiita.com/neon-izm/items/d2ab9f10341d54e35163
http://www.asset-sale.net/entry/AVPro_Video180506

#AVProVideo のSprict制御

.cs

  using RenderHeads.Media.AVProVideo;

  MediaPlayer avPro = this.GetComponent<MediaPlayer>();

  // イベントリスナー登録
  avPro.Events.AddListener(OnMediaPlayerEvent);

  // ファイル読み込み
  string path = System.Environment.CurrentDirectory + @"\movie\file.mp4";
  avPro.OpenVideoFromFile(MediaPlayer.FileLocation.AbsolutePathOrURL, path, ture);

  // リトライ
  avPro.Rewind(false);


  void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode ec)
  {
      switch (et)
      {
          case MediaPlayerEvent.EventType.MetaDataReady:    // 読み込み時のイベント
              // 再生 
              avPro.Play();
              break;
          case MediaPlayerEvent.EventType.FinishedPlaying:    // 再生終了時のイベント
              // 閉じる
              avPro.CloseVideo();
              break;
      }
  }

AVProVideoをインポートすると中にサンプルがあるのでこれが参考になる(Demos > Scenes)

参考ページ
https://psychic-vr-lab.com/blog/unity/%E5%85%A8%E5%A4%A9%E7%90%83%E5%8B%95%E7%94%BB%E5%86%8D%E7%94%9F%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/

#VideoPlayer と AVProVideo の比較

  • 軽い動画を再生させるだけなら VideoPlayer だけで十分(パフォーマンスに関しては比較してない)
  • 8KやVRの動画再生や字幕つけたりなどやりたいなら AVProVideo が対応しているようなのでこちらを使う方がよさそう
17
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?