Ошибка setMaxDuration при создании видеокодера Android - PullRequest
0 голосов
/ 13 июня 2011

В настоящее время я пытаюсь создать очень простой видеомагнитофон на Android без использования намерений, просто пользовательское приложение. Мой фрагмент кода следующий

import java.io.IOException;</p>

<p>import android.app.Activity;
import android.media.MediaRecorder;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;</p>

<p>public class CameraActivity extends Activity implements SurfaceHolder.Callback {
    public enum State {
        UNKNOWN, CONNECTED, NOT_CONNECTED
    }</p>

<code>SurfaceView cameraView;
SurfaceHolder holder;
public boolean mListening;
public Object mState;
public NetworkInfo mNetworkInfo;

public boolean mSending;

boolean recording = false;
public static final String TAG = "VIDEOCAPTURE";
private MediaRecorder recorder;

protected void captureVideo() {
    if (recording) {
        recorder.stop();
        // recorder.release();
        recording = false;
        Log.v(TAG, "Recording Stopped");
        // Let's initRecorder so we can record again
        initRecorder();
        prepareRecorder();
    } else {
        recording = true;
        recorder.start();
        Log.v(TAG, "Recording Started");
    }

}

private void initRecorder() {
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFile("/sdcard/videocapture_example.mp4");
    recorder.setMaxDuration(50000); // 50 seconds
    recorder.setMaxFileSize(5000000); 
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    recorder = new MediaRecorder();
    initRecorder();
    setContentView(R.layout.main);
    cameraView = (SurfaceView) this.findViewById(R.id.CameraView);
    holder = cameraView.getHolder();
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.addCallback(this);
}

private void prepareRecorder() {
    recorder.setPreviewDisplay(holder.getSurface());
    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        e.printStackTrace();
        finish();
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    Log.v(TAG, "surfaceCreated");
    prepareRecorder();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // camera.stopPreview();
    // camera.release();
    Log.v(TAG, "surfaceDestroyed");
    if (recording) {
        recorder.stop();
        recording = false;
    }
    recorder.release();
    finish();
}
</code>

}

Но когда я развернул этот код в эмуляторе, в LogCat я получил несколько таких ошибок.

java.lang.RuntimeException: невозможно запустить действие ComponentInfo ...

java.lang.RuntimeException: setMaxDuration не удалось. atroid.media.MediaRecorder.setMaxDuration (собственный метод)

Что не так с моим кодом?

1 Ответ

0 голосов
/ 23 августа 2011

Цитата из http://developer.android.com/reference/android/media/MediaRecorder.html: "Примечание. В настоящее время MediaRecorder не работает на эмуляторе."

...