4

を使用して短いビデオクリップを作成したいのですがMediaRecorder、使用方法がわかりません。

マニフェストファイルで、application-end-tagの前に次の権限を追加しました。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
</application>

そしてMediaRecorder、ユーザーがボタンを押すと、このコードでを作成します。

    private void startRecording() {
    mRecorder = new MediaRecorder();
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setOutputFile("myvideo.mpeg4");

    try {
        mRecorder.prepare();
    } catch (IOException e) {

    }
    mRecorder.start();
}

しかし、そのコードを実行すると、「強制終了-アプリケーションが予期せず停止しました。再試行してください」というメッセージが表示されます。例外の原因を確認するために、どのように使用MediaRecorderし、どのようにアプリケーションをデバッグできますか?マニフェストファイルに他のユーザー権限を追加する必要がありますか?

4

2 に答える 2

3

まず、マニフェストファイルで権限を宣言します...

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.Camera"/>

次に、メインのアプリコードで...

Camera cam = Camera.open();
cam.unlock();

if(recorder == null) { recorder=new MediaRecorder(); }

recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(fileName);
recorder.setPreviewDisplay(holder.getSurface());

try{ recorder.prepare(); recorder.start(); } 
catch( IOException e ) { e.printStackTrace(); }
于 2015-02-23T08:55:51.843 に答える
1

アプリケーションがカメラの所有に依存していることをアドバタイズするには、マニフェストファイルにタグを付けます。

<manifest ... >
<uses-feature android:name="android.hardware.camera"
              android:required="true" />
...

カメラアプリでビデオを録画する

    static final int REQUEST_VIDEO_CAPTURE = 1;

 private void dispatchTakeVideoIntent() {
        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
        }
    }

//ビデオを見る

 @Override
       protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) 
    {
        Uri videoUri = intent.getData();
        mVideoView.setVideoURI(videoUri);
    }
}
于 2017-05-26T05:59:57.220 に答える