展示用にVR動画を再生するアプリを作っていた。Android開発は初めてだったがストア配布しないしサンプルあるし楽勝と考えていたら、はまった。loadVideoFromAsset()は大きなファイルの場合ヒープエラーになる。メモリに全部入れてるのだろうか?
そもそもストア配布するAPKには100MBの制限があるので、大きなファイルを再生することは想定してなさそう。拡張ファイルを使う方法があるみたいだけど、今回はコンピュータから直接動画とアプリを入れられれば良い。という訳でloadVideo()を使う。
Android File Transferで端末のDOWNLOADSフォルダ以下に動画を置き、
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "MOVIEFILENAME.mp4"); Uri fileUri = Uri.fromFile(file);
とする。loadVideoFromAsset()はassets以下に置いたファイル名を指定すれば良かったが、loadVideo()にはファイルのUriオブジェクトを渡す。