Android大视频上传到PHP服务器,我在stackoverflow中阅读了很多答案.
uploading video upto 50MB to the server
Android: OutOfMemoryError while uploading video – how best to chunk?
How to send HTTP POST request and receive response?
我尝试了它,但是即使使用setChunkedStreamingMode()也无法为我工作.当我上传视频时,它给了我OutOfMemoryError
当我录制视频5秒钟时,效果很好,但是由于OutOfMemoryError而导致8或10秒钟以上的视频应用程序强制关闭
我的代码::
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编码的String上传视频.我知道由于内存多于Heap-size而导致的内存错误.但是我无法上传视频.
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.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)
解决方法:
您不应该为实体设置大byte [].它势必会耗尽内存.您可以在此处使用fileEntity.
http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
一些相关的问题和链接
Android send photo using HttpPost/HttpGet
尝试这个:
Sending images using Http Post
以上是内存溢出为你收集整理的Android大视频上传到服务器?全部内容,希望文章能够帮你解决Android大视频上传到服务器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)