2014-06-14 20 views
6

Próbuję nagrać wideo i chcę pokazać sekundy rozpoczęcia nagrywania.Czy jest jakiś sposób na uzyskanie czasu trwania trwającego przekodowywania?

jak powinienem to zrobić?

public void startRecording (Zobacz v) {

flipCamera.setVisibility(View.GONE); 
    captureImage.setVisibility(View.GONE); 
    String deviceMan = android.os.Build.MANUFACTURER; 
    this.mediaRecorder = new MediaRecorder(); 
    this.mediaRecorder.setCamera(this.camera); 

    camera.unlock(); 
    this.mediaRecorder.setCamera(camera); 
    this.mediaRecorder.setOrientationHint(90); 

    this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    this.mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    CamcorderProfile camcorderProfile_HQ = CamcorderProfile 
      .get(CamcorderProfile.QUALITY_480P); 
    this.mediaRecorder.setProfile(camcorderProfile_HQ); 
    this.mediaRecorder.setOutputFile(this.initFile().getAbsolutePath()); 
    this.mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec. 
    this.mediaRecorder.setMaxFileSize(5000000); 
    this.mediaRecorder.setPreviewDisplay(this.cameraPreview.getHolder() 
      .getSurface()); 

    this.mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 

    try { 
     this.mediaRecorder.prepare(); 
     // start the actual recording 
     // throws IllegalStateException if not prepared 
     this.mediaRecorder.start(); 
     Toast.makeText(this, R.string.recording, Toast.LENGTH_SHORT).show(); 

     this.toggleButtons(true); 

    } catch (Exception e) { 
     Log.wtf(TAG, "Failed to prepare MediaRecorder", e); 
     Toast.makeText(this, R.string.cannot_record, Toast.LENGTH_SHORT) 
       .show(); 
     this.releaseMediaRecorder(); 
    } 
} 

jestem całkiem nowy Android więc proszę jeśli ktoś może pomóc.

Odpowiedz

10

Możesz użyć timera i handler'a, aby to osiągnąć. W poniższym przykładzie widok tekstowy służy do wyświetlania czasu trwania w formacie 00min: 00sek. Używam tego w usługach w tle, ale możesz też użyć w działaniu.

public TextView timerTextView; 
private long startHTime = 0L; 
private Handler customHandler = new Handler(); 
long timeInMilliseconds = 0L; 
long timeSwapBuff = 0L; 
long updatedTime = 0L; 


private Runnable updateTimerThread = new Runnable() { 

      public void run() { 

       timeInMilliseconds = SystemClock.uptimeMillis() - startHTime; 

       updatedTime = timeSwapBuff + timeInMilliseconds; 

       int secs = (int) (updatedTime/1000); 
       int mins = secs/60; 
       secs = secs % 60; 
       if (timerTextView != null) 
       timerTextView.setText("" + String.format("%02d", mins) + ":" 
         + String.format("%02d", secs)); 
       customHandler.postDelayed(this, 0); 
      } 

     }; 

Gdzie rozpocząć nagrywanie:

 ...... 
      this.mediaRecorder.start() 
      startHTime = SystemClock.uptimeMillis(); 
      customHandler.postDelayed(updateTimerThread, 0); 

Gdzie zatrzymać nagrywanie:

 mediaRecorder.stop() 
    timeSwapBuff += timeInMilliseconds; 
customHandler.removeCallbacks(updateTimerThread); 
+0

Heyy @Nana Ghartey rozwiązanie działa .. Ale rzeczą jest .. za każdym razem mogę nagrać wideo czas zostaje dodany. Na przykład nagrałem pierwszy film wideo przez 5 sekund i drugi film na 3 sekundy, a następnie pokazałem 00:00 - 00:05 dla pierwszego wideo i 00:00 - 00:08 dla drugiego wideo zamiast tego, że powinien pokazywać 00:00 - 00:05 dla pierwszego filmu i 00:00 - 00:03 dla drugiego filmu. Czy możesz mi pomóc tutaj? Każda pomoc jest doceniana. Z góry dziękuję;) :) – MashukKhan

+0

Po prostu zatrzymaj/uruchom stoper po nagraniu każdej fazy wideo –