#ChannelPlayer · FOVE · Quest2 · Rift · VRソフト

Channel Player 1.20リリース

Cahhel Playerの新しい版をリリースしました。ソフトウェアのページやSteam, SideQuestでご案内しています。

今回のアップデイト内容は、ダイレクトジャンプ機能を追加しました。ダイレクトジャンプ機能とは、動画再生中にYボタンをクリックするとダイアログが表示されます。そのダイアログではフォルダ内のファイルの一覧がボタンで表示され、上下移動してトリガーで直接選択出来る他、左右にマーカーを移動させて、動画ファイルの任意の位置にジャンプして再生指示することが可能です。ぜひお試しください。

その他更新履歴に記載した内容は以下となります。

2020-03-21 1.20
・以下の機能追加を実施

  • ダイレクトジャンプ機能の実装
    動画再生中にYボタンでダイアログが表示されます。
      上下左右にスティックを操作して、トリガーにて選択したファイルのマーカー位置にジャンプします。
  • Quest2版において、内蔵ストレージでの動画再生の際、動画をキャプチャーしてサムネイルする機能の有効化

・以下の仕様変更や機能修正を実施

  • キャプチャ機能操作方法変更
    動画再生のポーズ中に、Yボタンでキャプチャできる機能は、Yボタンをダイレクトジャンプ用のプロパティダイアログ表示に変更したため、プロパティダイアログ内のキャプチャーボタンとして実装を変更しました。
  • 拡張子 大文字対応
    拡張子が大文字となるZIPやJPG、MP4も表示対象となります。以前は無視していました。
  • フォルダ名表示文字数拡張
    タイトル選択画面や動画再生中の情報表示では、省略せずに表示可能な文字数を100文字から140文字に広げました。

・制限事項

  • トリガー操作によるトリックプレイにおいて、ダブル、トリプルクリックやワープジャンプが機能しないことがあり
    制限事項に追記しました。なおスティック操作やプロパティダイアログからのジャンプ操作は可能です。
広告
#ChannelPlayer · Unity · VRソフト

ダイレクトジャンプ機能実装

ダイレクトジャンプとは勝手に名付けた機能だが、これはフォルダ内に複数の動画ファイルが存在し、そのうちのひとつを再生中に、別のファイルの任意の位置からの再生を実現する機能である。#ChannelPlayerにおいて、それを操作したいと思った場合でも、現在の実装では、一つ先のファイルあるいは一つ前のファイルへの再生切り替えのみが実施可能である。しかし2個先、2個前あるいは一番最後のファイルの再生を開始したいと思えば、2回以上次のファイルへの切り替えを実施する。あるいは再生をとりやめ、プロパティ画面からファイル選択して再生開始するしか実現手段が無い。また、それよりさらに一歩進んで、そのファイルを再生開始せずに、任意の位置にジャンプできる機能は存在しない。これはどこのプレイヤーでも実装されているのを見たことが無いが実装してみた。一応動くようになったので、次の#ChannelPlayerで公開予定となる。

現在はSteamVR版では動作できているので、Quest2版でも動作するか確認する予定。またダイレクトジャンプが実装できたら、次は、インデックスジャンプ(任意の位置をインデックスとして覚えさせて、そのインデックス位置に対してジャンプする機能)だろうと考えている。これが実現すると、ABリピートも実装可能となるが、これは順次とは思う。

#ChannelPlayer · Unity · VRソフト

AVProVideo Ver.2調査

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を使うときに使用する様子。

#ChannelPlayer · Quest2

Quest 2に挿したUSBメモリ内の動画ファイルにアクセスする

X plore File Manger の最新版4.25のapkファイルをインストールすれば、USB OTGアダプタ経由のFAT32フォーマットのUSBメモリにアクセス可能であり、X plore File Manger上から動画などを選んで再生できる。

https://www.lonelycatgames.com/apps/xplore
https://m.apkpure.com/jp/x-plore-file-manager/com.lonelycatgames.Xplore
X plore File Manager_v4.25.00_apkpure.com.apk

OTG経由のUSBメモリがQuest 2によって自動的にマウントされなくても、X ploreからアクセスできるという記述がX ploreのドキュメントにある。追加のモジュール(exFAT/NTFS for USB by Paragon Software)を入れればexFATとNTFSも読めるようだが、それは試していない。

元々はOculus Questでは当初USB OTG経由のUSBアクセスをOculusギャラリーから実行できたが現在は、OculusギャラリーはOculusテレビに変わってしまい、そしてその機能は削除されている。

「Oculus QuestからUSBストレージデバイスのファイルにアクセスするにはどうすればよいですか。 https://support.oculus.com/2289814927920267/?locale=ja_JP
リンク先がいつしか無くなったので、Internet Archiveへのリンクはこちら(すでに無い機能なので参考情報でしかないけれども)

X ploreがアクセスしているUSBメモリをX plore自身がWebDAVで公開してもらえるとChannel Playerからはアクセス可能になるだろうが、要はこのアプリが実現している内容を実装すれば、Channel Playerからアクセスできるということにはなると思う。

GitHubを検索してみるとJavaで書かれたlibaumsというライブラリがあり、それを使ってC#にてFile Readerを作られているのを発見する。これらはFAT32のみ対応とあるので、X ploreもこの派生技術を使っている可能性はあるだろう。
https://github.com/magnusja/libaums
https://github.com/vividos/UsbOtgFileReader

さらに探すと、libaumsをexFAT対応させようとしているプロジェクトも見つかるが、残念ながら更新されていない。https://github.com/azrael8576/libaums_exFat