Android大视频上传到服务器?

Android大视频上传到服务器?,第1张

概述Android大视频上传到php服务器,我在stackoverflow中阅读了很多答案.uploadingvideoupto50MBtotheserverAndroid:OutOfMemoryErrorwhileuploadingvideo–howbesttochunk?HowtosendHTTPPOSTrequestandreceiveresponse?我尝试了它,但是即使使用setChunkedS

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大视频上传到服务器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存