2017-01-18 4 views
0

私はビデオキャプチャが必要なアプリケーションで作業しています。時間限定ビデオ録画:カメラアプリで最大時間を表示

すべてが罰金のような作業をされています

  1. オープンカメラをビデオ録画のために。
  2. ビデオが20秒間録画されています。
  3. ビデオプレビューとすべて。

問題:

問題は、私はビデオ録画を開始すると、カメラアプリは(正しい)20秒後に録画を停止しているが、ユーザーは、最大再符号化時間に達した「ことを唯一の20秒後に通知を受けます"

及び記録中、それが表示されている:

(再符号化時間)/(記録することができる合計時間)。

は、私が欲しいもの:

iは、ユーザ(残り時間)/(20秒)を示したいと思います。

それを実装することができますどのように
public class MainActivity extends AppCompatActivity { 

    private static final int REQUEST_VIDEO_CAPTURE = 1; 
    private static final int MAXIMUM_VIDEO_RECORDING_LIMIT = 20; 
    private static final int VIDEO_RECORDING_QUALITY = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     dispatchTakeVideoIntent(); 
    } 

    private void dispatchTakeVideoIntent() { 

     Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     takeVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, MAXIMUM_VIDEO_RECORDING_LIMIT); 
     takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, VIDEO_RECORDING_QUALITY); 

     if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { 

      Uri file = data.getData(); 

     } 
    } 
} 

、助けてください:

は、ここに私のコードです。ここで

+0

SDカードのメモリまたはスナップチャットの残り時間を表示して、10秒または20秒のビデオしか記録できないようにしたいですか? – Naitik

+0

@Naitik:私は20秒のビデオだけを記録することができます。 – Sangeeta

答えて

0

はMediaRecorderを使用して簡単なビデオ録画例です。この中

あなたにも、ビデオ録画最大時間制限やファイルサイズを定義することができます。

public class VideoCapture extends Activity implements OnClickListener, SurfaceHolder.Callback { 
    MediaRecorder recorder; 
    SurfaceHolder holder; 
    boolean recording = false; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     recorder = new MediaRecorder(); 
     initRecorder(); 
     setContentView(R.layout.main); 

     SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView); 
     holder = cameraView.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     cameraView.setClickable(true); 
     cameraView.setOnClickListener(this); 
    } 

    private void initRecorder() { 
     recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
     recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

     CamcorderProfile cpHigh = CamcorderProfile 
       .get(CamcorderProfile.QUALITY_HIGH); 
     recorder.setProfile(cpHigh); 
     recorder.setOutputFile("/sdcard/videocapture_example.mp4"); 
     recorder.setMaxDuration(50000); // 50 seconds 
     recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 
    } 

    private void prepareRecorder() { 
     recorder.setPreviewDisplay(holder.getSurface()); 

     try { 
      recorder.prepare(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
      finish(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      finish(); 
     } 
    } 

    public void onClick(View v) { 
     if (recording) { 
      recorder.stop(); 
      recording = false; 

      // Let's initRecorder so we can record again 
      initRecorder(); 
      prepareRecorder(); 
     } else { 
      recording = true; 
      recorder.start(); 
     } 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     prepareRecorder(); 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     if (recording) { 
      recorder.stop(); 
      recording = false; 
     } 
     recorder.release(); 
     finish(); 
    } 
} 
+0

いくつかのインテント値を使用することは可能でしょうか? – Sangeeta

+0

あなたの必要に応じて別の答えを掲載しました! – Naitik

関連する問題