Android的大型视频上传到服务器? [英] Android Large Video Uploading to server?

查看:208
本文介绍了Android的大型视频上传到服务器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android的大型视频上传到PHP服务器,我读计算器许多答案。

上传高达50MB视频服务器

<一个href="http://stackoverflow.com/questions/2599305/android-outofmemoryerror-while-uploading-video-how-best-to-chunk">Android:的OutOfMemoryError而上传视频 - 如何最好地块

<一个href="http://stackoverflow.com/questions/3038409/how-to-send-http-post-request-and-recieve-response/3038747#3038747">How发送HTTP POST请求,并接受她的反应?

我尝试过,但不能为我的作品,即使使用 setChunkedStreamingMode() ..当我上传视频的给我的OutOfMemoryError

当我录制的视频5秒它的作品不错,但超过8或10秒的视频应用程序强制关闭,由于的OutOfMemoryError

我的code ::

  HttpClient的HttpClient的=新DefaultHttpClient();
                HttpPost httppost =新HttpPost(的getString(R.string.login_url)
                        +uploadvideo);
                HTT presponse响应= NULL;
                InputStream中的InputStream = getContentResolver()。openInputStream(
                        Uri.fromFile(MYFILE));
                byte []的数据= IOUtils.toByteArray(InputStream的);
                字符串类型= getFileExtension(myFile.getName()的toString());

                字符串连接$ C $卷曲= Base64.en codeBytes(数据);

                尝试 {

                    名单&LT;的NameValuePair&GT; namevaluepairs中=新的ArrayList&LT;的NameValuePair&GT;(
                            6);
                    nameValuePairs.add(新BasicNameValuePair(returnformat
                            JSON));
                    nameValuePairs.add(新BasicNameValuePair(用户id
                            strUserid));

                    nameValuePairs.add(新BasicNameValuePair(视频,
                            data.toString()));

                    nameValuePairs.add(新BasicNameValuePair(类型,输入));
                    nameValuePairs.add(新BasicNameValuePair(标题,
                            strVideoName));
                    nameValuePairs.add(新BasicNameValuePair(说明,
                            strVideoComments));
                    httppost.setEntity(新UrlEn codedFormEntity(namevaluepairs中));

                    //执行HTTP POST请求
                    响应= httpclient.execute(httppost);

                    的System.out.println(&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&GT;&gt;中+ response.toString());

                }赶上(ClientProtocolException E){
                    e.printStackTrace();
                }赶上(IOException异常E){
                    e.printStackTrace();
                }
 

和我需要上传视频的的Base64恩codeD字符串。而我知道,内存错误是由于更多的内存比堆size.but我上传失败视频。

的logcat

  05-31 23:16:12.114:E / AndroidRuntime(17255):java.lang.RuntimeException的:一个错误而执行doInBackground发生()
05-31 23:16:12.114:E / AndroidRuntime(17255):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:274)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.FutureTask.setException(FutureTask.java:125)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:308)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.lang.Thread.run(Thread.java:1027)
05-31 23:16:12.114:E / AndroidRuntime(17255):java.lang.OutOfMemoryError:产生的原因(堆大小= 20103KB,分配= 15700KB,位图大小= 0KB)
。05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.CharArrayBuffer&LT; INIT&GT;(CharArrayBuffer.java:43)
。05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.ReadWriteCharArrayBuffer&LT; INIT&GT;(ReadWriteCharArrayBuffer.java:47)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.BufferFactory.newCharBuffer(BufferFactory.java:82)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.CharBuffer.allocate(CharBuffer.java:53)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.charset.CharsetDe coder.allocateMore(CharsetDe coder.java:261)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.charset.CharsetDe coder.de code(CharsetDe coder.java:218)
05-31 23:16:12.114:E / AndroidRuntime(17255):在java.nio.charset.Charset.de code(Charset.java:488)
。05-31 23:16:12.114:E / AndroidRuntime(17255):在java.lang.String中&LT; INIT&GT;(String.java:181)
。05-31 23:16:12.114:E / AndroidRuntime(17255):在java.lang.String中&LT; INIT&GT;(String.java:141)
 

解决方案

您不应该设置一个大型的byte []的实体。它势必会耗尽内存。你可以在这里使用一个FileEntity。

http://developer.android.com/reference/组织/阿帕奇/ HTTP /实体/ FileEntity.html

一些相关的问题,并链接

Android的寄照片使用HttpPost / HTTPGET

试试这个: 发送使用HTTP POST图像

Android large video uploading to php server ,I read many answer in stackoverflow.

uploading video upto 50MB to the server

Android: OutOfMemoryError while uploading video - how best to chunk?

How to send HTTP POST request and recieve response?

i tried it but can't works for me even using setChunkedStreamingMode()..When i upload video its give me OutOfMemoryError

when i record video 5 second its works nice but more than 8 or 10 second video app force close due to OutOfMemoryError

MY CODE::

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

And i need upload video in Base64 Encoded String.And I know that memory error due to more memory than Heap-size.but i failed to upload video.

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)

解决方案

You shouldn't be setting a large byte[] to the entity. It's bound to run out of memory. You could use a FileEntity here.

http://developer.android.com/reference/org/apache/http/entity/FileEntity.html

Some related questions and links

Android send photo using HttpPost/HttpGet

Try this: Sending images using Http Post

这篇关于Android的大型视频上传到服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆