Android большой загрузки видео на сервер php, я прочитал много ответов в stackoverflow.
загрузка видео до 50 МБ на сервер
Android: OutOfMemoryError при загрузке видео - как лучше всего кушать?
Как отправить запрос HTTP POST и получить ответ?
Я попробовал, но не может работать для меня, даже используя setChunkedStreamingMode()
Когда я загружаю видео, оно дает мне OutOfMemoryError
когда я записываю видео 5 секунд, он работает хорошо, но более 8 или 10 секунд сила приложения видео закрывается из-за OutOfMemoryError
МОЙ КОД ::
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(getString(R.string.login_url)
+ "uploadvideo");
HttpResponse response = null;
InputStream inputStream = getContentResolver().openInputStream(
Uri.fromFile(myFile));
byte[] data = IOUtils.toByteArray(inputStream);
String type = getFileExtension(myFile.getName().toString());
String encodeurl = Base64.encodeBytes(data);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
6);
nameValuePairs.add(new BasicNameValuePair("returnformat",
"json"));
nameValuePairs.add(new BasicNameValuePair("userid",
strUserid));
nameValuePairs.add(new BasicNameValuePair("video",
data.toString()));
nameValuePairs.add(new BasicNameValuePair("type", type));
nameValuePairs.add(new BasicNameValuePair("title",
strVideoName));
nameValuePairs.add(new BasicNameValuePair("description",
strVideoComments));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
response = httpclient.execute(httppost);
System.out.println(">>>>>>>>>>" + response.toString());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
И мне нужно загружать видео в Base64 Encoded String
И я знаю, что ошибка памяти из-за большего объема памяти, чем Heap-size.but, я не смог загрузить видео.
LogCat
05-31 23:16:12.114: E/AndroidRuntime(17255): java.lang.RuntimeException: An error occured while executing doInBackground()
05-31 23:16:12.114: E/AndroidRuntime(17255): at android.os.AsyncTask$3.done(AsyncTask.java:200)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.lang.Thread.run(Thread.java:1027)
05-31 23:16:12.114: E/AndroidRuntime(17255): Caused by: java.lang.OutOfMemoryError: (Heap Size=20103KB, Allocated=15700KB, Bitmap Size=0KB)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.CharArrayBuffer.<init>(CharArrayBuffer.java:43)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.ReadWriteCharArrayBuffer.<init>(ReadWriteCharArrayBuffer.java:47)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.BufferFactory.newCharBuffer(BufferFactory.java:82)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.CharBuffer.allocate(CharBuffer.java:53)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.charset.CharsetDecoder.allocateMore(CharsetDecoder.java:261)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:218)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.nio.charset.Charset.decode(Charset.java:488)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.lang.String.<init>(String.java:181)
05-31 23:16:12.114: E/AndroidRuntime(17255): at java.lang.String.<init>(String.java:141)
Вы не должны устанавливать большой байт [] для объекта. Это связано с исчерпанием памяти. Здесь вы можете использовать FileEntity.
http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
Некоторые связанные вопросы и ссылки
Android отправить фотографию с помощью HttpPost/HttpGet
Попробуйте следующее: отправка изображений с помощью Http Post
Если ошибка OutOfMemory исходит от сервера, быстрым решением будет обновление ваших переменных php.ini:
upload_max_filesize = 100M
(или что вам комфортно)
или если вы POSTING, то вы также захотите изменить
post_max_size = 100M