【发布时间】:2023-03-05 22:42:01
【问题描述】:
我目前有一个应用程序,允许用户使用设备摄像头录制视频,录制完成后,视频会上传到服务器。我目前正在使用以下代码上传视频并且效果很好,我遇到的唯一问题是它花费的时间太长。上传一段 30 秒的视频大约需要 20 分钟。有什么方法可以使用不同的更快的方法来上传这些视频吗?我到处寻找,我只找到与我使用的代码相同的帖子。这是我的代码:
public class UploadActivity extends Activity {
private String filePath = null;
private String name, email, videoTitle;
long totalSize = 0;
private DonutProgress donutProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload);
donutProgress = (DonutProgress) findViewById(R.id.donut_progress);
Intent intent = getIntent();
filePath = intent.getStringExtra("filePath");
name = intent.getStringExtra("name");
email = intent.getStringExtra("email");
new UploadFileToServer().execute();
}
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
donutProgress.setProgress(0);
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
donutProgress.setProgress(progress[0]);
}
@Override
protected String doInBackground(Void... params) {
return uploadFile();
}
@SuppressWarnings("deprecation")
private String uploadFile() {
String responseString;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(AppConfig.URL_UPLOAD);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(new ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
entity.addPart("image", new FileBody(sourceFile));
totalSize = entity.getContentLength();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred. Http Status Code: " + statusCode;
}
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
videoTitle = result;
super.onPostExecute(result);
finish();
}
}
}
【问题讨论】:
-
这应该如何更快地工作? “30 秒视频”也没有说明文件大小。上传速度受带宽限制,也许你应该买一个磁通电容器来加速一切:D
-
视频的文件大小是多少?以 60fps 的 1080p 拍摄的 30 秒视频很容易达到 1GB 或更多。
-
@NoChinDeluxe 30 秒视频的文件大小约为 60MB
标签: android video file-upload