【问题标题】:What is a faster way of uploading video to server using android app?使用 android 应用程序将视频上​​传到服务器的更快方法是什么?
【发布时间】: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


【解决方案1】:

减少上传时间的最明显方法是压缩视频,假设您可以忍受这可能带来的任何质量下降(质量难以量化,因此您可能值得您离线尝试各种压缩率的视频先看看)。

不幸的是,在 Android 中没有方便的 'compress()' 方法,但有许多不同的方法:

我个人使用了 ffmpeg 方法 - 当我这样做时,我找不到我满意的 Android ffmpeg 库,所以我自己创建了一个包装器,但如果我再次使用 ti,我可能会使用以下 ffmpeg 包装器:

这似乎有据可查和使用,它包括经过深思熟虑的功能,例如根据处理器架构加载不同二进制文件的能力。

一旦有了 ffmpeg 包装器,您就可以简单地使用标准的 ffmpeg 命令行(如语法)来压缩视频。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2012-06-06
    • 1970-01-01
    • 2017-07-21
    • 2013-01-25
    • 2011-06-28
    • 2014-11-12
    相关资源
    最近更新 更多