Android的大型视频上传到服务器? [英] Android Large Video Uploading to server?
问题描述
Android的大型视频上传到PHP服务器,我读计算器许多答案。
<一个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屋!