您好我要上传我的视频文件转换成Android中的Web服务器。 我跟着这个教程:
将文件上传到Android上使用POST HTTP服务器。
但。 我在logcat中得到这个错误。 我得到了来自服务器的消息了。
09-11 10:20:55.088: D/dalvikvm(284): GC_FOR_MALLOC freed 1137 objects / 74200 bytes in 70ms
09-11 10:20:55.768: I/dalvikvm-heap(284): Grow heap (frag case) to 3.611MB for 1048592-byte allocation
09-11 10:20:55.918: D/dalvikvm(284): GC_FOR_MALLOC freed 202 objects / 10144 bytes in 142ms
09-11 10:20:56.178: D/dalvikvm(284): GC_FOR_MALLOC freed 86 objects / 3424 bytes in 91ms
09-11 10:20:56.568: I/dalvikvm-heap(284): Grow heap (frag case) to 5.601MB for 2097364-byte allocation
09-11 10:20:56.868: D/dalvikvm(284): GC_FOR_MALLOC freed 2 objects / 56 bytes in 304ms
09-11 10:20:57.178: D/dalvikvm(284): GC_FOR_MALLOC freed 4 objects / 1120 bytes in 48ms
09-11 10:20:57.748: I/dalvikvm-heap(284): Grow heap (frag case) to 11.600MB for 6291668-byte allocation
09-11 10:20:57.918: D/dalvikvm(284): GC_FOR_MALLOC freed 0 objects / 0 bytes in 168ms
09-11 10:21:24.827: I/uploadFile(284): HTTP Response is : OK: 200
09-11 10:21:24.847: E/Debug(284): Server Response There was an error uploading the file, please try again!
09-11 10:21:24.858: I/System.out(284): RES : 200
09-11 10:21:24.997: WARN/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44ff6cc8
09-11 10:23:34.277: DEBUG/SntpClient(59): request time failed: java.net. Socket Exception: Address family not supported by protocol
按照此过程中,我要上传的视频文件为wowza媒体服务器。 我怎样才能解决这个问题。 我怎么能继续在wowza服务器? 任何人可以帮助我实现这一目标? 提前致谢。
从字节发送视频服务器[]可能导致的OutOfMemoryError所以它能够更好地从多后视频。 你可以从这个链接下载jar文件。 http://hc.apache.org/downloads.cgi 。 下载并httpmime-4.2.jar添加到项目中。
public void uploadVideo(Context context, String videoPath) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(context.getString(R.string.url_service_fbpost));
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
if(!videoPath.isEmpty()){
FileBody filebodyVideo = new FileBody(new File(videoPath));
reqEntity.addPart("uploaded", filebodyVideo);
}
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
Log.e("Response: ", s.toString());
return true;
} catch (Exception e) {
Log.e(e.getClass().getName(), e.getMessage());
return false;
}
}
它只是因为大尺寸的视频的。 使用大文件/视频上传块的方法。
下面是示例代码张贴在服务器块数据。
public void upload(String filename, byte[] image) {
// 1MB of chunk
byte[][] divideByte = divideArray(image, ((1024 * 1024)/2));
int length = divideByte.length;
String token = "" + (int)System.currentTimeMillis();
Log.i("System out", "divideByte:" + length);
Log.i("System out", "token:" + token);
for (int i = 0; i < length; i++) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
String link = "<your link>";
nameValuePairs.add(new BasicNameValuePair("filename", filename));// filename
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(link);
Log.i("System out", "divideByte[" + i + "] length :"
+ divideByte[i].length);
String img = Base64.encodeBytes(divideByte[i]);
nameValuePairs.add(new BasicNameValuePair("file64", img));
nameValuePairs.add(new BasicNameValuePair("token", new String(""
+ token)));
nameValuePairs.add(new BasicNameValuePair("chunksize", new String(""+
divideByte[i].length)));
nameValuePairs.add(new BasicNameValuePair("chunkcount", new String(
"" + length)));
nameValuePairs.add(new BasicNameValuePair("index", new String(""
+ i)));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
String res = EntityUtils.toString(httpEntity).toString();
Log.i("System out", "response is :" + res);
}
httpEntity = null;
response = null;
} catch (Exception e) {
e.printStackTrace();
}finally{
httppost = null;
httpclient = null;
}
}
}
public static byte[][] divideArray(byte[] source, int chucksize) {
byte[][] ret = new byte[(int) Math.ceil(source.length
/ (double) chucksize)][chucksize];
Log.i("System out","ret: "+ret.length);
int start = 0;
for (int i = 0; i < ret.length; i++) {
if (start + chucksize > source.length) {
System.arraycopy(source, start, ret[i], 0, source.length
- start);
} else {
System.arraycopy(source, start, ret[i], 0, chucksize);
}
start += chucksize;
}
return ret;
}
并在服务器端得到的所有数据块索引明智和组成一个视频文件。
希望对您有所帮助。