7

ビデオ録画を複数回開始および停止し、ビデオ データを .csv に蓄積できる機能を実装しようとしていFileます。

これは、メディアレコーダーを準備する方法です。

private boolean prepareVideoRecorder(){
    mMediaRecorder = new MediaRecorder();

    //0 for landscape
    //90 for portrait

    //Check for available profile
    CamcorderProfile profile = null;
    if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P)){
        Log.d(TAG, "480p");
        profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
    }else if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)){
        Log.d(TAG, "720p");
        profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
    }else{
        Log.d(TAG, "LOW");
        profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
    }

    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);

    // Step 2: Set sources
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Step 3: Set profile
    mMediaRecorder.setProfile(profile);

    // Step 4: Set output file and pass media recorder the file descriptor
    if(mStoreFile == null){
        mStoreFile = MediaUtil.getOutputMediaFile(MediaUtil.MEDIA_TYPE_VIDEO);
        try {
            mStoreFile.createNewFile();
        } catch (Exception e) {  
            e.printStackTrace();
        }
    }

    try {
        mOutputStream = new FileOutputStream(mStoreFile, true);
        mMediaRecorder.setOutputFile(mOutputStream.getFD());
    } catch (Exception e1) {
        e1.printStackTrace();
    }

    mMediaRecorder.setMaxDuration(30000);


    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreviewSurface.getHolder().getSurface());

    //Check orientation and set hint
    switch(mOrientation){
    case ORIENTATION_PORTRAIT_NORMAL:
        mMediaRecorder.setOrientationHint(90); 
        break;
    case ORIENTATION_PORTRAIT_INVERTED:
        mMediaRecorder.setOrientationHint(270); 
        break;
    case ORIENTATION_LANDSCAPE_NORMAL:
        mMediaRecorder.setOrientationHint(0); 
        break;
    case ORIENTATION_LANDSCAPE_INVERTED:
        mMediaRecorder.setOrientationHint(180); 
        break;
    }

    // Step 6: Prepare configured MediaRecorder
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    }
    return true;
}

これはクリック コードのボタンです。

@Override
        public void onClick(View v) {
            if (isRecording) {
                try{
                    mOutputStream.close();
                }catch(Exception ee){
                }

                // stop recording and release camera
                mMediaRecorder.stop();  // stop the recording

                mMediaRecorder.reset();
                mCamera.lock();         // take camera access back from MediaRecorder

                // inform the user that recording has stopped
                mRecordButton.setImageResource(R.drawable.record_button);
                isRecording = false;

            } else {
                // initialize video camera
                if (prepareVideoRecorder()) {
                    // Camera is available and unlocked, MediaRecorder is prepared,
                    // now you can start recording
                    mMediaRecorder.start();

                    // inform the user that recording has started
                    mRecordButton.setImageResource(R.drawable.record_button_on);
                    isRecording = true;
                } else {
                    // prepare didn't work, release the camera
                    releaseMediaRecorder();
                    // inform user
                }
            }
        }
    });

MediaUtil.getOutputMediaFile(MediaUtil.MEDIA_TYPE_VIDEO)次のようなものが表示されます: /storage/sdcard0/Pictures/Project/VID_2013.mp4

現在の問題:

現時点でテストする方法は次のとおりです。

  1. 録音開始
  2. 記録を停止
  3. 録音開始
  4. 録音を停止
  5. /Pictures/Project パスの Android のファイル マネージャーに移動します。
  6. 作成され、複数のデータ セグメントが「追加」されたファイルを確認できます。しかし、それは再生されません。また、他のビデオ ファイルのようなカバー画像はありません。

どこかで、ファイルが壊れていますか? 一度録音してストレージ内のファイルを確認するだけではうまくいきません。に を定義するだけでビデオを録画できますが、複数の撮影のFileためにビデオ データを追加しようとしていますMediaRecordersetOutputFileこれは可能ですか?

4

0 に答える 0