#ChannelPlayer · Quest2 · Unity · VRソフト

zipファイルを開く(続き)

Windowsやandroidのファイルシステム上のzipファイルを開くことは先日出来たが、WebDAV上のファイルも開く必要があるため、調べてみて機能確認用のテストコードを以下のようにしてみた。ZipInputStreamの引数にローカルファイルパスではなく、System.IO.Streamの形でurlを渡せば、WebDAV上のzipファイルも開くことが出来た。zipが開くならcpzファイルも開けることになるので Channel Playerに実装出来そうな気配となって来た。

            ZipInputStream s;
            if (FilePath.StartsWith("http"))
            {
                System.Uri url = new Uri(FilePath);
                Debug.Log("URL:" + url.ToString());
                System.IO.Stream tmp_url = new System.IO.BufferedStream(System.Net.WebRequest.Create(url).GetResponse().GetResponseStream());
                try
                {
                    s = new ZipInputStream(tmp_url);
                    ZipEntry theEntry;

                    // ZipInputStreamから、エントリをtheEntryに取り出す。
                    while ((theEntry = s.GetNextEntry()) != null)
                    {

                        // theEntry.Nameから、ディレクトリ名を取り出す。
                        string directoryName = Path.GetDirectoryName(theEntry.Name);
                        // theEntry.Nameからファイル名を取り出す。
                        string fileName = Path.GetFileName(theEntry.Name);
広告
#ChannelPlayer · Quest2 · Unity · VRソフト

zipファイルを開く

CBR/CBZ Comics in C# – CodeProject https://www.codeproject.com/Articles/28171/CBR-CBZ-Comics-in-C を(ライセンスはCPOLなので、著作権はthund3rstruckさんにあります。)を参考にして、a.zipファイルの情報取得が出来ました。上記のサイトのプログラムでは、一枚ずつ取り出す実装となっているので、指定のページも取り出せるようにする必要がありますが、無事静止画を取り出せそうです。Quest2でも動きました。

以下が、実行したもの。Unityプロジェクトを作り、適当なGame Objectに 以下のコードを入れたmain.csを置き
上記サイトのコード CbzComic.cs, IComic.csをAssets以下に置いてます。またICSharpCode.SharpZipLib.dllも同様です。

Oculus Quest2、いつの間にかDeveloper ModeでもPCから内部ファイルアクセス可能になっていて、サンプル用のa.zipファイルを置くのが簡単でした。

    void Start()
    {
        string scanPath = Application.persistentDataPath;
        string selectFile = "a.zip";
        string error_string = "";
        var myComic = new CbzComic(string.Format("{0}/{1}", scanPath, selectFile));
    
        string Text = string.Format("{0}\r\nSize: {1}MB\r\nPages: {2}", myComic.FileName, myComic.FileSize, myComic.PageCount);

        if (myComic.ErrorMessage != string.Empty)
        {
            error_string = myComic.ErrorMessage;
        }
     
        string CoverPathString = myComic.CoverPath;

        Debug.Log("CoverPathString:" + CoverPathString);
        Debug.Log("Text:" + Text);
        Debug.Log("ErrorMessage" + error_string);

    }

以下が結果。

01-25 23:54:00.173: I/Unity(15201): CoverPathString:/storage/emulated/0/Android/data/com.Applet_LLC.CBP/files/00001.jpg
01-25 23:54:00.174: I/Unity(15201): Text:a.zip
01-25 23:54:00.174: I/Unity(15201): Size: 15MB
01-25 23:54:00.174: I/Unity(15201): Pages: 74
01-25 23:54:00.174: I/Unity(15201): ErrorMessage
#ChannelPlayer · FOVE · Rift · Unity · VRソフト

Channel Player静止画対応

Youtube対応は、正常に再生できないフォーマット(EACのこと)があるので保留として、静止画対応を進めている。
もともとスクリーンいっぱいにサムネイル表示する機能があるため、jpgやpngは表示可能であるが、動画プレイヤーであるため、動画ファイルが存在しないフォルダは再生対象として除外していたので、それを改め含めるように直した。

現在、フォルダに動画ファイルがひとつもない場合、再生開始すると、ファイル名の拡張子を見て、AVProVideoを動作させずに、1枚だけ表示可能となった。AVProVideoのコントローラスクリプトを直して、静止画用に次のファイル表示などを追加する必要がある。

それがまともに出来るようになれば、その次は、cpzあるいはzipファイルがあれば、それをフォルダ相当と捉えて、処理するようにすれば、一応出来るようになるのではと考えている。まだzipファイルをオンザフライで開く方法を理解していないけれども、assetフォルダ直下に、zipのdllを置けば、WebDav同様にPCでもAndroidでも使えるだろうと思う。

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

Youtube対応、静止画対応

Channel Playerは、何故Channel Playerと言う名前かと言えば、もともとはYoutubeのVR Channelの動画を見れるようにしたいという動機からであり、開発当初の1.01や1.02ではブラウザも付けて、PC画面上でYoutubeのコンテンツを選んだら、Riftで再生できるという仕様だったけど、1.03からYoutube対応は取り外して、ローカルファイル再生に注力してきた。

まだ出来ていないことは多いけれども、次はYoutube対応と静止画対応のどちらかだろうと画策している。
Youtube対応は実は難しくて、ミドルウェア(Asset)のAVPro Videoでは、2.0になってもEACのshaderには未だ対応しておらず、Youtube対応をうたうasset (Youtube Playerと、Youtube-DL Player)は、前者は一応対応している(サンプル作って試してみた)ようだが、後者は未だStereoのものには対応していない(質問して回答を得た)。

世の中探せば、EAC ShaderのコードはGitなどで公開されているが、AVPro VideoのShaderとして使おうとして、動かしてみても、思ったようには動作せず、まだ実現していない。

だから、静止画対応(いわゆるコミックビューア)対応が先とも思うが、こちらもただ表示するだけでなく、大きなファイル対応など、難しい問題が出てくるだろうと思う。でもいずれの道も一歩からだからとは思う。

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

Channel Player 1.18リリース

Channel Playerの新しい版をリリースしました。ソフトウェアのページでご案内しています。
改修履歴は以下となります。

2020-01-14 1.18
・以下の機能追加を実施
 - SteamVR版
  AとBボタンおよびXとYボタンを入れ替える機能を追加しました。
  設定ダイアログにて変更可能です。Oculus Touch使用時にAボタンで再生開始、Bボタンで終了となります。
 - 共通
  設定ダイアログにて、左下にバージョン番号を表示するようにした。
・以下の不具合改修を実施
 - Quest版
  Oculus Touchの左右のトリガーにて、WarpJump出来ない不具合修正
 - 共通
  トリックプレイ実行中、再生中のタイトル情報表示上で、音量表示の数値が点滅しないように直しました。
  これはジャンプ時に壊れた音が出ないよう一時的にMuteしていますが、それが見えてしまっていました。