2016-04-02 110 views
1

当我转换小视频时,它不会报错。但是当我转换更大的视频时,它会给出下面的错误。将视频转换为base64会导致“内存不足错误”

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

添加在应用menifest文件这个标签下的“应用程序”标签:

android:largeHeap="true" 

其实安卓largeHeap是增加你的内存分配给应用程序的工具。

1

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

相关问题