[Oculus]3D動画をストリーミング再生する方法 – 16 –

前回は、ThetaとAndroidを連携した画像保存についてご紹介いたしました。
今回は、Thetaを使用した状態での、画像アップロードを試してみました。

画像のアップロードについては以前の記事でもご紹介させていただきましたが
前回から、動画作成用に用意する画像を、Thetaで撮影したものを使用する形に変更となっているため
新しい環境でどの程度のfpsが出るかを計りました。

まず初めに、前回のアップロード時の環境と異なる点として
今回の記事から使用しているサーバーが外部サーバーとなりました。
これまでは、自社サーバーを使用して検証していましたが
現在作成している機能を実際に使用する時の環境により近づけるため
サーバー環境を、レンタルした外部のものへと移行しております。

また、クライアント側のソケット通信を、ウェブビューを使用してhtmlのフォーム部品で行っていましたが、C++に移植しています。

上記環境にて、再度画像アップロードを試したところ、4fpsのパフォーマンスしか出ませんでした。
1回の通信に要する時間は約2秒で、アップロードしている画像は1枚です。
今までは、複数の画像をフォームに設定して、まとめてアップロードしていましたが
現環境では、1枚ずつアップロードするのが一番早いという結果になったため
複数送信を採用せずに単発アップロードとなっております。
4fps以上の設定値で動作させると、1回の通信に要する時間が徐々に長くなり
通信未完了状態のものがたまり、アプリが動かないという状態にまでなってしまいます。

このままでは、ストレスなく使用することは困難であるため
落ちてしまったパフォーマンスを取り戻さなければなりません。
パフォーマンス低下原因として、Theta連携したことによる負荷の増加を考えました。
しかし、Thetaを起動せずにあらかじめThetaで撮影しておいた画像を読みこんで
アップロードするようにしても、状況は改善されなかったため、原因は他にあります。

次に、Thetaを使用したことで、以前のアップロードを試した時から、画像サイズが4倍以上になっているため
アップロードファイルの軽量化が必要だと思い、再度WEBP形式の使用を試みましたが
結果として、ファイル自体のサイズは小さくなるが、変換に時間がかかってしまい、さらにパフォーマンスが低下してしまいました。
他の方法として、jpeg保存時のクオリティを下げることでファイルサイズを小さくすることは可能ですが
今回の環境で使用している画像は、保存する際に50まで落としているため、これ以上クオリティを下げることができません。

その為、残す方法としては、C++を使用して画像を減色することでファイルサイズを軽量化が出来ると考えています。
こちらは、実際にはまだ試せてはいないので、今後のパフォーマンス改善の中で実施する予定です。

ここまで、画像に関連する原因ばかり書いてきましたが、通信自体の問題という可能性も十分に考えられます。
現状はサーバー環境にNode.jsを使用しソケット通信でファイルアップロードを行っていますが、http通信を使用する選択肢もあります。
有名なWebサーバーとしてApacheがありますが、最近ではnginxというApacheよりも高速に動作するWebサーバーも人気があります。
現在使用している外部サーバーに既にnginx環境を構築しており、アップロード時のファイル保存をnginxに移譲すると
アップロードの高速化が計れるようなので、この構成を使用することで、今とどの程度パフォーマンスが変わるかがとても興味があります。
また、Node.jsにはアップロードを早くするためのプラグインが存在するため、こちらも試してみる価値は十分にあります。
これらを試してもパフォーマンスを改善できない場合は、クライアントの構成を1から見直したり
別の通信プロトコルを使用する選択も考えていく必要があるため、改善は簡単には解決出来そうにありません。

しかし、目的としている機能の実現には、アップロードのパフォーマンス改善は必須項目となるため
試行錯誤を重ねながら考え付くことを1つずつ試していき、今まで以上のパフォーマンスを出せるよう頑張っていこうと思います。

今回ご紹介したパフォーマンス改善案を実際に行った際の結果は
今後の記事にてご紹介しますので、皆さん是非見て下さい。


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*