Channel Playerで使っているデコーダー AVProVideo は、現状Ver 1.9.12と古いものを使っている。しかしAVProVideo自身は、昨年末にVer2になっていて、先週の2021-02-26に、2.0.8がリリースされた。
新しいAVProVideoでは、いろいろ機能拡張されていて、Channel Playerにとってもフォーマットの自動認識が気になっていた。これは映像ファイルにMeta Dataが埋め込まれているならば、それをみて、Stereo Packing(Top-Bottom, Left-Right, None)の切り替えを自動で実施するものである(https://www.renderheads.com/content/docs/AVProVideo/articles/feature-arvrxr.html のAuto-DetectionやManually Specifyingを参照)。残念ながらVideoLayoutMapping(360度、180度、FishEye, 2D)の方の自動認識機能ではない。
ここの記述によれば自動認識がオンの際、もしMeta Dataが無い場合には自動認識できないので、ヒントを与える変数 MediaHints hintsがある。これをセットすると再生開始時には機能する。またメンバー変数としてはAutomaticStereoPackingやOverrideStereoPackingが用意されていて、手動設定できることになっているが、こちらに値を入れても再生中には反映されることは無く、次回の再生開始時に機能するようである。普通ゲームなどのアプリで動画再生をさせたい場合、コンテンツは決まっているのが普通だから、再生する前にすでにフォーマットは自明であり、あるいは気にしなくても自動認識が出来る方が良いので、この機能で必要充分なんだろうとは思う。
しかしながら、この機能だと、再生しながらフォーマットを変更する手段が存在しないので、もしも自動認識失敗して正しくないフォーマットで再生中である場合、再生を止めてからでないとフォーマット変更が出来ないことになる。
それでは、プレイヤーアプリとしては使い勝手が悪すぎるので、Shaderに手を入れて、自動認識とは無関係に直接パラメータを設定することで、Top-Bottom, Left-Right, Noneの切り替えが出来るようにしてみた。一応機能しているように見える。また、FishEye対応については、Channel Playerで使っているShaderコードの差分を反映させることで対応できた。
ただし自動認識が全く動かなくなっているので、まだまだ調整が必要である。なお備忘録として、AVProVideo 1.0から2.0に変える際、上述したStereo Packing以外で変更した箇所を以下にまとめてみた。
1. ファイル指定の関数は、OpenVideoFormFile()から OpenMedia()に変更になっている。
//mp.OpenVideoFromFile(MediaPlayer.FileLocation.AbsolutePathOrURL, filePath, true);
mp.OpenMedia(MediaPathType.AbsolutePathOrURL, filePath, false);
2. 再生終了の関数は、CloseVideo()からCloseMedia()になっている。
//mp.CloseVideo();
mp.CloseMedia();
3. 時間情報は、msからsecに変更になっている。
//_current_time = Mathf.RoundToInt(mp.Control.GetCurrentTimeMs() / 1000);
_current_time = Mathf.RoundToInt((float)mp.Control.GetCurrentTime());
//_total_time = Mathf.RoundToInt(mp.Info.GetDurationMs() / 1000);
_total_time = Mathf.RoundToInt((float)mp.Info.GetDuration());
//mp.Control.SeekFast(timeMs: distinationTime);
mp.Control.SeekFast((double)(distinationTime / 1000f));
4. その他
UpdateMultiPassStereo.csのアタッチが必要だが
UpdateStereoMaterial.csは無くなっており、
ApplyToMaterial.csがあるが、これはSkyboxを使うときに使用する様子。
追伸。Channel Playerにおいて、再生したいファイルのプロパティでフォーマットをAutoに設定して、再生開始すれば、自動認識し、かつ再生中に他のフォーマットに変更できるようになりました。VRや2Dでも問題無いです。ただし再生中にAutoに設定しても、そこでは自動認識できないので、再生を停止して再度再生を始める必要があるという仕様になりそうです。また全く未設定の場合、Autoになるように動作するようにも実装しました。
いいねいいね