あらまし
Unity 5.6 以降動画再生用のライブラリとして VideoPlayer
が導入された
ローカルファイルから動画再生ができることは知っていたが、
ストリーミング再生ができるか公式に記述が無かったため調査してみた
※ 英語なので見逃している可能性がある
Video.VideoPlayer - Unity スクリプトリファレンス
利用する動画
動画はこちらのサイトのものを利用させていただく
www.home-movie.biz
ローカルの動画を再生
ローカルの動画を再生するなら下記コードでできる
using UnityEngine; using UnityEngine.Video; public class StreamingVideoPlayer : MonoBehaviour { [SerializeField] private VideoPlayer _videoPlayer; private void Awake() { _videoPlayer.playOnAwake = false; _videoPlayer.waitForFirstFrame = true; _videoPlayer.renderMode = VideoRenderMode.CameraFarPlane; _videoPlayer.targetCamera = Camera.main; _videoPlayer.Play(); } }
ストリーミング再生
ストリーミング再生を行うためには source
を VideoSource.Url
に変更して url に .mp4
のリンクを指定する
※拡張子が mp4
以外のファイルではストリーミング再生ができないので注意
Prepare
と Play
を同時に呼び出すか、prepareCompleted
が呼ばれたタイミングで
Play
を呼ぶ事でストリーミング再生を行える
もし Prepare
のみ呼び出した場合動画のロードを待ってから再生を自動的に行う
using UnityEngine; using UnityEngine.Video; public class StreamingVideoPlayer : MonoBehaviour { private VideoPlayer _videoPlayer; private void Awake() { _videoPlayer = gameObject.AddComponent<VideoPlayer>(); // ロードするまで再生させないため false _videoPlayer.playOnAwake = false; // 最初のフレームのロード待ち _videoPlayer.waitForFirstFrame = true; // ビデオをurl からロードする _videoPlayer.source = VideoSource.Url; _videoPlayer.url = "https://www.home-movie.biz/mov/hts-samp003.mp4"; // カメラにの背面に表示する _videoPlayer.renderMode = VideoRenderMode.CameraFarPlane; // カメラをセット _videoPlayer.targetCamera = Camera.main; _videoPlayer.prepareCompleted += VideoPlayerOnPrepareCompleted; // 動画ロードを開始 _videoPlayer.Prepare(); } private void VideoPlayerOnPrepareCompleted(VideoPlayer source) { // Prepare の Completed 時にPlay を同時に呼ぶことでストリーミング再生を行う source.Play(); } }