将视频转换为base64会出现“内存不足错误”

时间:2016-04-02 09:52:59

标签: android string video base64 encode

当我转换小视频时,它不会出错。但是当我转换更大的视频时,它会给出以下错误。

FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.util.Base64.encode(Base64.java:534)
at android.util.Base64.encode(Base64.java:494)
at android.util.Base64.encodeToString(Base64.java:456)
at gcm.b4deploy.com.operations2.StartedTasksAdapter.videoToBase64(StartedTasksAdapter.java:402)
at gcm.b4deploy.com.operations2.StartedTasksAdapter.access$200(StartedTasksAdapter.java:57)
gcm.b4deploy.com.operations2.StartedTasksAdapter$2$1.fileSelected(StartedTasksAdapter.java:288)
at gcm.b4deploy.com.operations2.FileChooser$1.onItemClick(FileChooser.java:57)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
at android.widget.AbsListView.performItemClick(AbsListView.java:1114)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2937)
at android.widget.AbsListView$1.run(AbsListView.java:3695)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5037)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)

以下是我的videoToBase64方法;

private String videoToBase64(File file) {
    String encodedString = null;

    InputStream inputStream = null;
    try {
        inputStream = new FileInputStream(file);
    } catch (Exception e) {
        // TODO: handle exception
    }
    byte[] bytes;
    byte[] buffer = new byte[8192];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    try {
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            output.write(buffer, 0, bytesRead);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    bytes = output.toByteArray();
    **encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);**//error is in this line
    Log.i("Strng", encodedString);

    return encodedString;
}

我已经阅读了一些有关此问题的问题,即我应该分割视频并逐个编码,但我不明白该怎么做。

是否有任何关于视频绑定大小的想法是不能得到这个outOfMemoryError? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

在" application"下的Application menifest文件中添加此标记。标记:

 android:largeHeap="true"

实际上android:largeHeap是增加分配内存到app的工具。

答案 1 :(得分:1)

内存是android中的一个问题。您应该将视频分成几个部分,对每个部分进行编码,发送并在目的地重新组合。