はじめに
WebGL + iOS環境でのみ動画が閲覧できない問題でハマってしまった際に調べた内容を記録します。
確認項目
1. VideoClip
Unity公式によるとVideoClipからのビデオ再生には対応していませんので、URLを指定する方法で動画を再生することになります。
2. CORS(Cross-Origin Resouces Sharing)
動画を配置しているサーバーの設定で他ドメインのサーバーからのメディアのアクセスをブロックする様に設定されている場合は許可する必要があります。
同じドメインに配置する場合は気にしなくても問題ありません。
3. 動画フォーマット
iOSでは同じ拡張子でも再生できないフォーマットが存在しているため、iOS上で再生できる動画なのか確認する必要があります。
詳細は以下のページを参照のこと
※2023/08/27追記
H.264(且つプログレッシブ),音声AACのmp4ファイル
だと再生できる傾向にあります。
4. JS側のvideoタグの設定
WebGLのVideoコンポーネントがアタッチされたオブジェクトはHTMLのvideoタグが割り当てられるのですが、videoタグの設定によっては動画を再生に影響が出るようです。
Unityでは以下のファイルにvideoタグの設定が記述されているため、以下のサイトと照らし合わせて修正してください。
Unity\Hub\Editor\[Unityバージョン]\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib
※関連Fourum
5. 画面タップ
Safariのセキュリティ制約により、一度画面をタップしないと動画を再生することができません。
6. ホスティングサーバーの設定
サーバー側でiOS用サファリで使用されているQuickTimeへの動画配信をブロックしている可能性がある。
.htaccessのファイルを編集することで直るケースもありますが、ホスティングサービスを利用している場合は管理者へ確認が必要です。
7. iPhoneの低電力モード
低電力モード中は動画が自動再生されないようです。
8. VideoPlayer - Mute設定
Safariのセキュリティ制約上、音声が有効な場合ブロックされてしまうため、自動再生したい場合は音声をMuteにする必要がある。
また、AudioOutputModeはDirectOutPutに設定しておくこと。
AudioOutputModeはNoneの方が良いです。
※音声を出したい場合は音声ファイルと動画ファイルは別で保管して読み込みましょう。
9. HTMLからVideoタグのテクスチャを受け取る
Videoコンポーネントを使わずに、jslib経由でテクスチャを受け渡しすることで動画再生させることも可能です。
以下のリポジトリをご参照下さい。