新バージョン(v1.5.1)から追加された機能はTheta Sのライブプレビューだけではなく、ヘビーユーザーからいただいた細かい機能も実装しております。
修正内容は以下となります。
- Theta SのWifiライブプレビュー対応
- 設定にサンプルを非表示にするオプションを追加
- サムネイル選択時にディスプレイ名を表示する機能を追加
- タッチスクロールで横方向に回転する機能を追加
- バグ修正
- パーミッションの追加
Theta SのWifiライブプレビュー対応
THETA Sからリアルタイムビュー機能が新しく追加され、他サイトでいくつも記事出ています。(注目されている機能の一つといえます。)
Theta Sのライブプレビューはライブビュー(Theta SのWiFi経由)、USBライブストリーミング、HDMIライブストリーミングの3種類あり、Tao360が対応した機能は解像度、フレームレートが一番低いライブビュー機能です。
ライブプレビュー画面の表示方法は簡単です。
Tao360 v1.5.1以上に更新するとメニューに”ライブプレビュー”が追加されます。
お手持ちのスマホをTheta SのWiFiに繋いだ状態で”ライブプレビュー”を選択するとライブプレビュー画面に遷移します。
※開発に関するTIPSはブログの後半に書いてあります
※もっと高品質なライブプレビューを見たい方はUSB or HDMIを使った方法をお勧めいたします。
※HMDでの閲覧は非推奨です。理由は解像度、FPSが低く、酔いの原因になるからです。
設定に”サンプルを非表示にする”オプションを追加
実際に仕事で利用しているユーザーからの要望です。
サムネイル選択時にディスプレイ名を表示する機能を追加
こちらも実際に仕事で利用しているユーザーからの要望です。
デザインを全く考えてません。。。すみません。
タッチスクロールで横方向に回転する機能を追加
PhotoSphere画面、VideoSphere画面、LivePreview画面に追加した機能です。360度見回すのが億劫な人向けに追加した機能です。
バグ修正
一部デバイスで落ちる問題を修正しました。
パーミッションの追加
- “INTERNET”、”ACCESS_NETWORK_STATE”、”ACCESS_WIFI_STATE”はライブプレビュー機能を提供するために利用しています
- “WRITE_EXTERNAL_STORAGE”はサムネイル保存用のディレクトリを作成するために利用しています
ライブプレビューの実装に関するTIPS
開発者のみなさま、お待たせしました。
Tao360が対応したライブビュー仕様はAPI v2 Referenceをベースに実装しております。
大まかな流れはOverviewとGetting Startedを見ればわかります。
また、Tao360では通信用のライブラリとしてOkhttpを使っています。
OKhttpを使った簡易実装イメージを張りますので参考にしていただければ幸いです。
startSession
String result = null; String json = "{\"name\":\"camera.startSession\",\"parameters\":{}}"; RequestBody body = RequestBody.create(JSON, json); // リクエストオブジェクトを作って Request request = new Request.Builder() .url(EXECUTE) .addHeader("Accept", APPLICATION_JSON) .addHeader("Content-Type", CONTENT_TYPE) .post(body) .build(); // クライアントオブジェクトを作る OkHttpClient client = new OkHttpClient(); // リクエストして結果を受け取る try { Response response = client.newCall(request).execute(); result = response.body().string(); } catch (IOException e) { e.printStackTrace(); } // 返す return result;
_getLivePreview
String json = "{\"name\":\"camera._getLivePreview\",\"parameters\":{\"sessionId\":\""+sessionId+"\"}}"; RequestBody body = RequestBody.create(JSON, json); // リクエストオブジェクトを作って Request request = new Request.Builder() .url(EXECUTE) .addHeader("Accept", APPLICATION_JSON) .addHeader("Content-Type", CONTENT_TYPE) .post(body) .build(); // クライアントオブジェクトを作る OkHttpClient client = new OkHttpClient(); // リクエストして結果を受け取る try { Response response = client.newCall(request).execute(); // InputStreamの取得 response.body().byteStream() } catch (IOException e) { e.printStackTrace(); }
表示部分のTIPS
表示部分は以下のような仕様なので既存のコードを大幅に変えてはいません。
天球にテクスチャを張り付けているだけです。
ライブビュー仕様(静止画撮影モードのみ)(RICOH THETA S) ・EquirectangularのMotionJPEG形式で出力されます。 ・画像サイズ: 640x320 ・フレームレート: 10fps
ただし、解像度が低いため画像データのリサイズは行わずにそのまま表示してます。
OpenGL実装なので古い端末のことを考えるとテクスチャサイズを2のべき乗に変えたくなりますが、
画像がとっても汚くなるのでやめました。
あと仕様を知ってる方からしたら当たり前なことですが、動画撮影モード中に_getLivePreviewを叩いても表示できません。
Tao360では実行前に写真撮影モードに変更する処理を入れてます。
そんなタオ360ですがGoogle Playより無料でダウンロードできます。
※まだ更新されていないかもしれません。
今後も実際にご利用されている方の意見を取り入れ、更新していきますのでよろしくお願いします。