ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Unity】VideoPlayerを使ってみた

最近、Unityでの動画再生について調べる必要があったので自身の備忘録としてまとめました。

VideoPlayer

Unityの動画再生はUnity5.6から追加された VideoPlayer コンポーネントを使う必要があります。Unity5.6より前は MovieTexture を使っていましたが Unity2018.3 から廃止されてしまったので VideoPlayer 一択となりました。

設定方法

VideoPlayerで動画の再生を確認するだけであれば割と簡単です。

  1. 動画ファイルをProjectビューに配置します。 f:id:aki517:20181229124056p:plain

  2. Main Camera が設定されている GameObject に VideoPlayerコンポーネントを追加
    f:id:aki517:20181229123808p:plain

  3. VideoPlayerコンポーネンとの Video Clip に動画ファイルを設定
    f:id:aki517:20181229125744p:plain

  4. Unityエディタを再生
    f:id:aki517:20181229130311g:plain

事前読込

VideoPlayer.Prepare() を使えばバッファへ動画データを事前に読込んでおくことができます。VideoPlayer.prepareComplete にコールバックを設定すれば読込完了を検出することができます。

void Start()
{
    // VideoPlayerコンポーネント取得.
    videoPlayer = obj.GetComponent<VideoPlayer>();
    // 即再生されるのを防ぐ.
    videoPlayer.playOnAwake = false;
    // パス or VideoClip を設定.
    videoPlayer.url = "Assets/Resources/testfile.mp4";
    // videoPlayer.clip = videoClip;
    // 読込完了時のコールバックを設定.
    videoPlayer.prepareCompleted = OnCompletePrepare;
    
    // 読込開始.
    videoPlayer.Prepare();
}

// 読込完了時のコールバック.
void OnCompletePrepare()
{
    // 読込が完了したら再生.
    videoPlayer.Play();
}
その他

あと動画に関する知識があまりに無かったので、その辺もメモしておきます ^_^;

コーデック

データ(映像、音声)の圧縮・変換と復元の方法です。COmpression/DEcompressionを縮めたもので映像と音声でコーデックがそれぞれ異なります。圧縮・変換を「エンコード」復元を「デコード」と言います。

映像コーデック
コーデック 概要
MPEG-4 第三世代携帯電話や携帯ゲーム機などモバイルで主流になりつつある
H.264 ビットレートで高画質を維持することができるため、動画配信サービスやiPhone,Androidなどのスマホに採用されている、現時点で最も主流な映像コーデック
H.265 H.264の後継、H.264よりも圧縮効率に優れているがエンコード時の負荷が高い、また、Unity2018.3時点ではVideoPlayerで再生サポートされていない(Unity2019.1aから公式サポートとのこと)
WMV9 マイクロソフトが開発、Windowsでの普及率は高い
Divx Divx, Inc がMPEG-4をベースに独自開発、DVDプレイヤー、カーナビなどのデジタル家電でよく利用される
Xvid フリーの映像コーデック、エンコードDivxより速いと言われている、商業使用時はそのソフトのソースコードを公開する義務が発生するので殆ど使用されていない
音声コーデック
コーデック 概要
MP3 最も使用されている音声コーデック
AAC MP3の後継、同程度のビットレートであればMP3より高い音声品質が実現、
AC3 5.1chの出力に対応、圧縮率が高い場合は他音声コーデックより音声品質が良い、DVD・Blu-ray等に使用される
コンテナ(動画形式)

映像コーデック + 音声コーデックのセット、正式名称は「コンテナフォーマット」と言うそうです。コンテナごとに扱える映像コーデックと音声コーデックが決まっているので目的に応じたコンテナを選択する必要があります。以下に代表的なものをまとめてみました。

コンテナ 映像コーデック 音声コーデック 拡張子
MP4 MPEG-4, H.264, H.265 AAC, AC3, MP3 .mp4, .m4a
MOV MPEG-4, H.264, MJEG AAC, MP3, LPCM .mov, .qt
WMV WMV9 WMA,AAC,MP3 .wmv
AVI MPEG-4, Divx, Xvid, H.264, H.265 AAC, MP3 .avi

MP4 が割と一般的なのかなと思いました。iPhone,Android, 携帯ゲーム機などで広く使われていますし ^_^

また、iPhone, Androidの端末やOSバージョンで対応しているコーデックは以下ページで確認できます。

iPhone
「Video Playback」「Audio Playback」参照
iPhone - Compare Models - Apple

Android
Supported media formats  |  Android Developers

参考

Unity - Scripting API: VideoPlayer