2017-01-17 3 views

ответ

3

Я добавил ProgressDialog используя время видео

final int msec = MediaPlayer.create(this, Uri.fromFile(new File(path))).getDuration(); 

final ProgressDialog dialog = new ProgressDialog(this); 
     dialog.setMax(msec); 
     dialog.setMessage("Progress"); 
     dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     dialog.setProgress(0); 

затем в OnStart Метод ExecuteBinaryResponseHandler вызова dialog.show() и обновить Прогресс в onProgress(String message) Метод

@Override 
public void onProgress(String message) { 
    int start = message.indexOf("time="); 
     int end = message.indexOf(" bitrate"); 
     if (start != -1 && end != -1) { 
      String duration = message.substring(start + 5, end); 
      if (duration != "") { 
       try { 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
        sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
        dialog.setProgress((int)sdf.parse("1970-01-01 " + duration).getTime());       
       }catch (ParseException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
    } 
} 

закрыть диалоговое окно в OnFinish()

@Override 
public void onFinish() { 
    String s = System.currentTimeMillis() - MainActivity.this.startTime + ""; 
    dialog.dismiss(); 
} 
2

Для того, чтобы рассчитать FFMPEG прогресс в процентах

ffmpeg.execute(command, new ExecuteBinaryResponseHandler() { 
      @Override 
      public void onFailure(String s) { 
       Log.d(TAG, "FAILED with output : " + s); 
      } 

      @Override 
      public void onSuccess(String s) { 
       Log.d(TAG, "SUCCESS with output : " + s); 
      } 

      @Override 
      public void onProgress(String s) { 
       Log.d(TAG, "Started command : ffmpeg " + Arrays.toString(command)); 
       Log.d(TAG, "progress : " + s); 
       Pattern timePattern = Pattern.compile("(?<=time=)[\\d:.]*"); 
       Scanner sc = new Scanner(s); 

       String match = sc.findWithinHorizon(timePattern, 0); 
       if (match != null) { 
        String[] matchSplit = match.split(":"); 
        if (totalDur != 0) { 
         float progress = (Integer.parseInt(matchSplit[0]) * 3600 + 
           Integer.parseInt(matchSplit[1]) * 60 + 
           Float.parseFloat(matchSplit[2]))/totalDur; 
         float showProgress = (progress * 100); 
         Log.d(TAG, "=======PROGRESS======== " + showProgress); 
        } 
       } 
      } 

      @Override 
      public void onStart() { 
       Log.d(TAG, "Started command : ffmpeg " + Arrays.toString(command)); 
       progressDialog.setMessage("Processing..."); 
       progressDialog.show(); 
      } 

      @Override 
      public void onFinish() { 
       Log.d(TAG, "Finished command : ffmpeg " + Arrays.toString(command)); 
       progressDialog.dismiss(); 
      } 
     }); 

totalDur = 25; // за 25 сек. Видео

Но totalDur изменится в соответствии с работой, как для 2x Slow Video, вы должны дать totalDur = 2 * 25; // 50 сек. Видео

+0

@ Dastan.lqbal Что делать, если вы не знаете длину видео, которое будет сохранено? –

+0

В этом случае вы можете захватить полные кадры из видео, а затем вы можете сопоставить – dastan

+0

Можете ли вы отредактировать/расширить свой ответ и дать пример того, как я могу это достичь? –

Смежные вопросы