2015-02-11 1 views
0

Я пытаюсь записать видео в моем приложении, и я заметил, что отображение их продолжительности, я вижу неправильные минуты \ секунды. Это происходит только с видео, записанным через следующий код. С видео, записанного с помощью других приложений, продолжительность отображается справа:Неправильная ПРОДОЛЖИТЕЛЬНОСТЬ в MediaStore.Video.Media.DURATION

public void recordStream() { 

      //Release Camera before MediaRecorder start 
      releaseCamera(); 

      if(!prepareMediaRecorder()){ 
       Toast.makeText(MainActivity.this, 
         "Fail in prepareMediaRecorder()!\n - Ended -", 
         Toast.LENGTH_LONG).show(); 

      } 

     mediaRecorder.start(); 


     } 
    } 



     private boolean prepareMediaRecorder(){ 

     myCamera = getCameraInstance(); 
     mediaRecorder = new MediaRecorder(); 
     myCamera.stopPreview(); 
     myCamera.unlock(); 
     mediaRecorder.setCamera(myCamera); 

     mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

     CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 

      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);    
      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);    
      mediaRecorder.setVideoFrameRate(profile.videoFrameRate);     
      mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);    
      mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);     
      mediaRecorder.setAudioEncodingBitRate(profile.audioBitRate);     
      mediaRecorder.setAudioChannels(profile.audioChannels);    
      mediaRecorder.setAudioSamplingRate(profile.audioSampleRate);     
      mediaRecorder.setVideoEncoder(profile.videoCodec);    
      mediaRecorder.setAudioEncoder(profile.audioCodec); 
     } 


     //String outputfilename; 
     Date date=new Date(); 
     outputfilename="/sdcard/video/"+date.toString().replace(" ", "_").replace(":", "_")+".mp4"; 

     mediaRecorder.setOutputFile(outputfilename); 
     mediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface()); 

     try { 
      mediaRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      releaseMediaRecorder(); 
      return false; 
     } catch (IOException e) { 
      releaseMediaRecorder(); 
      return false; 
     } 

     return true; 

    } 

Это, как я получаю длительность из видео:

   video_column_index = videocursor 
         .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION); 
       videocursor.moveToPosition(position); 

       long duration = videocursor.getLong(video_column_index); 

String converted = String.format("%02d:%02d", 
         TimeUnit.MILLISECONDS.toMinutes(duration), 
         TimeUnit.MILLISECONDS.toSeconds(duration) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)) 
        ); 

       holder.txtDuration.setText(converted); 

ответ

1

решается таким образом:

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(outputfilename)); 
    int duration = mp.getDuration(); 
    mp.release(); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.Video.Media.DATA, outputfilename); 
    values.put(MediaStore.Video.Media.DATE_TAKEN, dateTaken); 
    values.put(MediaStore.Video.Media.DURATION, duration); 

Необходимо было вычислить и добавить продолжительность видео в свойства MediaStore.

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