2016-04-02 11 views
1

Wenn ich kleine Videos konvertiere, gibt es keinen Fehler. Aber wenn ich größere Videos konvertiere, gibt es den Fehler unten.Konvertieren von Video zu Base64 gibt "nicht genügend Speicherfehler"

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) 

Und folgendes ist meine videoToBase64 Methode;

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; 
} 

Ich habe einige Fragen zu diesem Thema gelesen, die sagt, dass ich ein Video und kodieren Teil für Teil aufspalten soll, aber ich verstehe nicht, wie es zu tun.

Und gibt es eine Idee darüber, was ist die gebundene Größe des Videos, um dieses outOfMemoryError nicht zu bekommen? Vielen Dank im Voraus.

Antwort

2

diesen Tag in Anwendung menifest Datei hinzufügen unter "Anwendung" tag:

android:largeHeap="true" 

Eigentlich android: largeHeap das Instrument ist Ihren zugewiesenen Speicher App zu erhöhen.

1

Der Speicher ist ein Problem in Android. Sie sollten das Video in wenigen Teilen aufteilen, jedes Teil kodieren, senden und am Ziel neu kombinieren.