7

Android SDK によると、MediaRecorder.setCamera を使用して、プレビューをリセットせずに、ビデオのキャプチャとプレビューのために既存のカメラ インスタンスをリサイクルできます。サンプルを見つけることができず、すべての試みは無駄でした: 間違った状態の例外が発生するか、MediaRecorder.prepare が失敗します。

  • この方法がまったく使用可能かどうかは誰にもわかりませんか?
  • じゃあどうやって使えばいいの?
  • Web で入手できるサンプルはありますか?

参考: http://developer.android.com/reference/android/media/MediaRecorder.html#setCamera(android.hardware.Camera)

4

6 に答える 6

9

私は同じ問題に遭遇し、それがどのように機能するかを見つけました。いくつかのことを正しく行う必要があります。まず、 Android ドキュメントからステート チャートを確認する必要があります。

コマンドの動作順序は次のとおりです。

mCamera = Camera.open();
rec = new MediaRecorder();                               // state "Initial"

mCamera.lock();
mCamera.unlock();

rec.setCamera(mCamera);                                  // state still "Initial"
rec.setVideoSource(MediaRecorder.VideoSource.CAMERA);    // state "Initialized"
rec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  // state "DataSourceConfigured"
rec.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

rec.setPreviewDisplay(surfaceHolder.getSurface());

rec.setOutputFile(Environment.getExternalStorageDirectory() + "/test.mp4");

rec.prepare();                                           // state "Prepared"
rec.start();                                             // state "Recording"

// ...

rec.stop();                                              // state "Initial"

完全な例はここにあります。

于 2013-08-19T12:01:55.310 に答える
7

Android Camera アプリのソースは、最良の例を提供します。調査の結果、recorder.setCamera(camera)のインスタンス化直後MediaRecorder、または少なくとも設定が適用される前に を呼び出す必要があることがわかりました。呼び出す前に設定 (setVideoSource()など) を適用するsetCamera()と、エラーが発生します。

于 2011-04-21T18:39:00.033 に答える
3

@lyron からヒントをもらいました。

まず、フロントカメラを開きます。

    int cameraId = -1;
    int camNums = Camera.getNumberOfCameras();

    for( int i = 0 ; i < camNums ; i++) {
        CameraInfo info = new CameraInfo();
        Camera.getCameraInfo(i, info);
        if( info.facing == CameraInfo.CAMERA_FACING_FRONT ) {
            cameraId = i;
            break;
        }
    }
    mCamera = Camera.open(cameraId);
    mCamera.unlock();

上記のようにフロントカメラを使用する必要があります。

そして、カメラのロックを解除することを忘れないでください。

そうしないと、以下のエラーが表示されます。

E/MediaRecorder(15509): start failed: -19
E/SampleVideoRecorder(15509): Exception : 
E/SampleVideoRecorder(15509): java.lang.RuntimeException: start failed.
E/SampleVideoRecorder(15509):   at android.media.MediaRecorder.start(Native Method)

次に、このように他の設定を行う前にカメラを設定します。

                recorder = new MediaRecorder();
                recorder.setCamera( mCamera );   // like this!

                recorder.setAudioSource( MediaRecorder.AudioSource.MIC);
                recorder.setVideoSource( MediaRecorder.VideoSource.CAMERA);
                recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

                recorder.setVideoSize( 2560, 1440 );
                recorder.setVideoFrameRate(30);

                recorder.setPreviewDisplay(holder.getSurface());
                recorder.setOutputFile( s_dir );

                try {
                    recorder.prepare();
                    recorder.start();
                } catch( Exception e ) {
                    Log.e("SampleVideoRecorder", "Exception : ", e );

                    recorder.release();
                    recorder = null;
                }

prepare() の前に setCamera() を呼び出す必要があると誰かが言っています。

しかし、私は自分のコードが機能していることを見ています。

于 2015-06-02T09:01:24.920 に答える
1

mediarecorder のインスタンスを作成した後、次の関数を使用しようとしましたか?

//カメラのロックを解除して、別のプロセスがアクセスできるようにします。

mCameraDevice.unlock();

//録画に使用するカメラを設定します。この関数を使用して、カメラ オブジェクトを分解せずに、プレビュー モードと //キャプチャ モードをすばやく切り替えます。

mMediaRecorder.setCamera(mCameraDevice);

于 2011-08-26T07:14:18.403 に答える
-4

役立つリンクが 2 つ見つかりました。Android Camera git リポジトリMediaRecorder の例

于 2011-02-04T01:05:48.350 に答える