426 Views
June 08, 24
スライド概要
とっとるびー第51回で発表したUnrealEngineの動画再生事情の資料です
エンジニアです
UnrealEngineの動画再生事情 @mechamogera
自己紹介 • mechamogera • 主にQiitaで活動:https://qiita.com/mechamogera • 第2種電気工事士の筆記試験合格、実技試験受験予定 2
今日お話しする内容 • 動画再生をすることになった背景 • UnrealEngineと動画再生フレームワーク • 動画再生フレームワーク利用で直面した問題 3
最近の仕事 • UnrealEngineを使ったVRコミュニケーションサービス作成 • 3Dデータ読込などマシンパワーが必要なためPC VRを利用 • Windows環境で動作 4
アプリ内で動画プレイヤー提供をしたい • アプリ内でローカルにある動画ファイルをプレイヤーで再生 できるようにしたい • プロモーション動画を複数人で閲覧したい • => UnrealEngine(当時5.2)で実装 • 実際に実装してみるとサイズを変更できるのもあって迫 力ある • 複数人で見ていると映画館みたい 5
UnrealEngine • 3D制作プラットフォーム • C++で作成 • UE5.4から年間100万米ドル以上の収益がある会社でノンゲーム が利用が有料化、$1,850/年/人 o 個人的所感 ▪ Unityで炎上した値上げよりはスマート ▪ 企業内でお試し利用がしづらくなった (とはいえUnity使ってもお金はかかる) 6
UnrealEngineの動画再生フレームワーク • MediaFramework • UnrealEngineで動画を再生する仕組み • 動画再生用のリソース o MediaSource:ファイルやWeb上の動画を指定 o MediaPlaylist:プレイリスト o MediaSound:動画再生時のオーディオ再生用 o MediaTexture:動画を反映するテクスチャ o MediaPlayer:動画プレイヤー • 各プラットフォームのメディア(WindowsMediaFoundation、 AndroidMedia、、、)をラップ 7
他の動画再生方法 • MarketPlace o あまり良いプレイヤーを見つけられなかった • その他 o UEでOpenCVは扱えるがOpenCVで音声再生を同期するのが未サポート o 有料のソリューションはいくつかありそう • => MediaFrameworkを利用 8
MediaFrameworkのマルチプレイでの同期 • 複数人の同期再生は未サポート • UnrealEngineの同期の仕組みでは大容量データは未サポート o 既存の仕組みを利用して動画ファイルをAWS S3経由で共有 o 動画が小さめなのと工数の関係でストリーム配信はしない o UnrealEngineのレプリケーションの仕組みで再生状態や再生位置などを 同期 9
MediaFramework利用で起きた問題 • シークバーが正しく動作しない • 動画再生用のリソースを動的に生成できない • 再生できる動画が限られている 10
シークバーが正しく動作しない • シークバーを操作するとしばらく画面が停止 • UDN(UnrealEngineDeveloperNetwork)に聞いてみた o デフォルトでプレイヤーで使われているWMF(Windows Media Foundation)Mediaの問題 o WMFMediaはDeperecated o ElectraPlayer(UnrealEngine用のマルチプラットフォーム対応のメディア プレイヤー)利用が推奨 • => ElectraPlayerを利用すると問題なくシーク可能 o 基本的にはElectraPlayer Pluginを有効化するだけ 11
動画再生用のリソースを動的に生成できない • 動画再生用のリソース(MediaTexsture)を動的に生成すると動画 が再生されない • コンテンツブラウザであらかじめアセットとして生成している と再生可能 • => 初回はMediaTextureを10個用意して対応 • => フォーラムにあった情報により、MediaTexture生成後に UpdateResourceメソッド(Blueprint非公開)して再生可能に o UnrealEngineでMediaFrameworkのリソースを動的に作成して動画を再生 する #UnrealEngine - Qiita 12
ElectraPlayerで再生できる動画形式が限られている 実装時はUE5.2でmp4のみ対応 • UE5.2 o メディア形式:mp4 o ビデオコーデック:H.264/AVC o オーディオコーデック:AAC • UE5.3 o メディア形式:mp4、mov、mkv、mka、webm o ビデオコーデック:H.264、H.265、VP8、VP9、Apple ProRes、Avid DNxHD、 HAP o オーディオコーデック:AAC、Opus o 公式ドキュメントなし、、、(なぜ) https://blog.alche.studio/posts/uCwkxl0f3fh1SCya73DtK/ 13
ElectraPlayerで再生できる動画形式が限られている • Windows11にも搭載されているMicrosoft Clipchampで書き出した 動画が再生可能 • ひとまず動画変換で対応 14
ElectraPlayerでiPhone/iPadの動画が再生できない • UE5.3でmov対応しているが、IPhone/iPadで撮影した動画が再生 不可 • コーデックはそのままでメディア形式をmkvに変換すると再生 できた o => メディア形式の問題の感じ • UDNでサポートの要望は出したがUE5.4.1時点では未対応っぽい 15
まとめ • UnrealEngineのMediaFrameworkを使って動画再生 • 実装で直面した問題 o シークバーが正しく動作しない ▪ => ElectraPlayerを利用 o 動画再生用のリソースを動的に生成できない ▪ => 特定の関数呼び出しをすることで生成可能に o 再生できる動画形式が限られている ▪ => 動画変換で対応 16
所感 • 世の中のゲームでばんばん動画再生しているのでUnrealEngine でさっくりいけるかと思ったらいけなかった • 基本ゲームだと用意された動画を再生できればいいのでほとん ど問題にならなかった? • ノンゲーム環境に力を入れてきているのでElectraPlayer用意して いる? 17