setOutputFormat called in an invalid state: 1

来源:互联网 发布:3000元左右手机 知乎 编辑:程序博客网 时间:2024/06/08 17:30

在编写一个简单的录像应用程序的时候,爆出如下异常:

E MediaRecorder: setOutputFormat called in an invalid state: 1
E AndroidRuntime: java.lang.IllegalStateException
E AndroidRuntime: at android.media.MediaRecorder.setOutputFormat(Native Method)


因为code是完全按照google的Demo写的,觉得比较奇怪。

看描述是说setOutputFormat的时候,状态应该错乱了,最后又看了一下google文档,原因在于google对于设定MediaRecorder是有要求的:


所以在写代码的时候应该完全按照人家要求的设定顺序来写,具体如下:

    mCamera.unlock();    mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);        //1st. Initial state    mMediaRecorder = new MediaRecorder();    mMediaRecorder.setCamera(mCamera);        //2st. Initialized state    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);        //3st. config        mMediaRecorder.setOutputFormat(mProfile.fileFormat);        mMediaRecorder.setAudioEncoder(mProfile.audioCodec);        mMediaRecorder.setVideoEncoder(mProfile.videoCodec);        mMediaRecorder.setOutputFile("/sdcard/FBVideo.3gp");        mMediaRecorder.setVideoSize(mProfile.videoFrameWidth, mProfile.videoFrameHeight);        mMediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);        mMediaRecorder.setVideoEncodingBitRate(mProfile.videoBitRate);        mMediaRecorder.setAudioEncodingBitRate(mProfile.audioBitRate);        mMediaRecorder.setAudioChannels(mProfile.audioChannels);        mMediaRecorder.setAudioSamplingRate(mProfile.audioSampleRate);        mMediaRecorder.setPreviewDisplay(mHolder.getSurface());        try {mMediaRecorder.prepare();mMediaRecorder.start();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}


1 0
原创粉丝点击