2016-03-29 8 views
1

Şu anda kullanıcının cihaz kamera ile bir video kaydetmesine olanak sağlayan bir uygulama var, kayıt bittikten sonra, video bir sunucuya yüklenir. Şu anda videoyu yüklemek için şu kodu kullanıyorum ve iyi çalışıyor, sahip olduğum tek sorun çok uzun sürüyor. 30 saniyelik bir videonun yüklenmesi yaklaşık 20 dakika sürebilir. Bu videoları yüklemek için farklı ve daha hızlı bir yöntem kullanmanın bir yolu var mı? Her yere baktım ve yalnızca kullandığım kodun aynısını buluyorum. Bu benim kodudur: onun muhtemelen değer yüzden herhangi Bu getirebilir kalitesinde azalma (zor ölçmek için kalite ile yaşayabilir varsayarakAndroid uygulamasını kullanarak sunucuya video yüklemenin daha hızlı bir yolu nedir?

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

    } 

} 
+0

Bu nasıl daha hızlı çalışır? Ayrıca '30 saniyelik bir video', dosyalar hakkında hiçbir şey ifade etmiyor. Yükleme hızı bant genişliği ile sınırlıdır, belki her şeyi hızlandırmak için bir akı kapasitörü satın almalısınız: D –

+0

Videonun dosya boyutu nedir? 1080p'de 60 fps hızında 30 saniyelik bir video çekimi kolayca 1GB veya daha fazla olabilir. – NoChinDeluxe

+0

@NoChinDeluxe 30 saniyelik bir video için aldığım dosya boyutu yaklaşık 60MB oldu –

cevap

2

yükleme süresini azaltmak için en belirgin yolu video sıkıştırma size ilk görmek için çeşitli sıkıştırma oranlarına sahip bir video ile çevrimdışı deneme).

Maalesef, Android hiçbir kullanışlı 'kompres()' yöntemi vardır ancak farklı bir takım yaklaşımlar vardır: videoyu

  • kullanım videoresampler kütüphanesi sıkıştırmak için

    Ben şahsen ffmpeg yaklaşım kullandık - onu ne zaman ben bu yüzden bir sargıyı kendim yarattı memnun olduğunu bir Android ffmpeg kütüphanesi bulamadık, ama tekrar ti yapıyordu, herhalde aşağıdaki kullanırsınız ffmpeg sarıcı:

    Bu iyi belgelenmiş ve kullanılmış ve iyi işlemci mimarisine bağlı olarak farklı ikililer yüklemek getirme gibi özellikler düşünülmüş içerir görünüyor.

    Bir ffmpeg sarıcısına sahip olduğunuzda, videoyu sıkıştırmak için sözdizimi gibi standart bir ffmpeg komut satırı kullanabilirsiniz.

  • İlgili konular