【Unity】VideoPlayerでの動画再生(2)
前回の続きです。
VideoPlayer
Unity 5.6あたりから、VideoPlayerコンポーネントが利用できるようになっています。
VideoClipまたはURLの動画を再生できます。
なお今回の動画素材は、Pexels Videosのこちらからお借りしました。
Free stock video of beach, dawn, drone
Video Clipから再生
一番簡単なのは、動画ファイルをVideo Clipとして取り込み、それを再生することです
なお、Video Clipの取り込みにはQuickTimeのインストールが必要です(Windows版はもうサポートが終了していますが……)そのため、H.265やVP9などでエンコードされた動画は取り込めないようです。
H.264またはVP8にトランスコードすることも可能です。
これをVideoPlayerで指定すると、再生することが出来ます。
カメラに直接描画したり、RenderTextureに描画してそれを用いてオブジェクトを描画するといったことが可能です。
URLから再生
URLを指定すると、Web上にあるファイルやローカルのシステム上にあるファイルを再生することが出来ます。
ローカルのファイルを再生する場合、"file://"を付けると再生することが出来ます。
例えばAndroidで"/mnt/sdcard/Movies"フォルダに動画がコピーされる機種の場合、
URLに「file:///mnt/sdcard/Movies/a.mp4」を指定すれば動画フォルダのa.mp4が再生出来ます。
また、動画ファイルをStreamingAssetsフォルダ内に配置するとVideo Clipへの変換が行われないので、そちらに配置しておく方法もあります。
きちんと使うには、スクリプトでAPIを呼び出して正確な位置を把握して指定する必要があるとおもいます。
この場合、システムで利用できるコーデックが使用されます。システムが対応していれば、ハードウェアデコードの恩恵も受けることが出来ます。H.265やVP9でエンコードされた動画も再生できます。
よくありそうな問題と対策
AndroidでSDカードやインターネット上にある動画ファイルを再生できない
Build Settingで、適切なアクセス権を与える必要があります。
音が遅延する
Edit > Project Settings > Audioで、プロジェクトのオーディオの設定を見てみます。
(AudioManager)
DSP Buffer Siseの項目はデフォルトだと"Best performance"となっていますが、
バッファサイズが大きすぎるため、環境によっては音が遅れて聞こえてきます。
"Good latency"あたりに変更すれば、遅延は軽減されます。
(ゲーム内の効果音にも同じことが言えます。)
代わりに音飛びが発生しやすくなるリスクがありますので、注意してください。