12-24 16:49:58.147: DEBUG/AndroidRuntime(360): Shutting down VM
12-24 16:49:58.147: WARN/dalvikvm(360): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-24 16:49:58.397: ERROR/AndroidRuntime(360): FATAL EXCEPTION: main
12-24 16:49:58.397: ERROR/AndroidRuntime(360): java.lang.RuntimeException: java.io.IOException: prepare failed.
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.camera.VideoCamera.initializeRecorder(VideoCamera.java:942)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.camera.VideoCamera.access$2(VideoCamera.java:868)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.camera.VideoCamera$MainHandler.handleMessage(VideoCamera.java:201)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at android.os.Looper.loop(Looper.java:123)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at java.lang.reflect.Method.invokeNative(Native Method)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at java.lang.reflect.Method.invoke(Method.java:521)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at dalvik.system.NativeStart.main(Native Method)
12-24 16:49:58.397: ERROR/AndroidRuntime(360): Caused by: java.io.IOException: prepare failed.
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at android.media.MediaRecorder._prepare(Native Method)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at android.media.MediaRecorder.prepare(MediaRecorder.java:503)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     at com.android.camera.VideoCamera.initializeRecorder(VideoCamera.java:938)
12-24 16:49:58.397: ERROR/AndroidRuntime(360):     ... 10 more

解决方案 »

  1.   

    补充..我看到抛IO异常就向读写权限方面分析.debug拿到了Video的存储路径 adb shell进去看到里面有Img文件.我想应该不会是读写权限的问题了.拍照的时候Img也存储到了这里.其他问题望各位分享下经验.找条路径
      

  2.   

    没有遇到过~虽然现在做得东西和这个camera都有关联~~~
      

  3.   

    各位有空也去debug一下..分享下经验吧.. thanks..如果我这边有进展也会发个日志记录.到时候分享经验.
      

  4.   

    这么巧,我也是今天碰到的这个问题。也是跟到这个地方,还没找到结果。错误Trace如下:
    E/AuthorDriver( 2284): Command 13 completed with error -17
    E/MediaRecorder( 2937): prepare failed: -17
    E/videocamera( 2937): prepare failed for /mnt/sdcard/DCIM/Camera/VID_20101101_000954.mp4
    V/videocamera( 2937): Releasing media recorder.
    V/videocamera( 2937): Empty video file deleted: /mnt/sdcard/DCIM/Camera/VID_20101101_000954.mp4
    ......试了下录音,也有类似的问题,都有类似下面的Trace:
    E/AuthorDriver( 2284): Command 14 completed with error -10
    E/MediaRecorder( 2937): Start failed: -1
    ......LZ有进展记得分享一下。
      

  5.   

    我用的还好
    Intent intent = new Intent(); // 调用照相机
    intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
    startActivity(intent);
      

  6.   

    我们说的是源码下面的code。不是自己写的code
      

  7.   

    可能是driver或opencore哪里有写问题,具体可能要跟进去源码看一下。E/MediaRecorder( 2937): prepare failed: -17
    这里-17还是不知道什么错误, 可以在此处打印错误的地方再打印出一个字符串: strerror(errno)看到底是什么错误。
    对于froyo版本的,recoder的prepare函数:
    status_t MediaRecorder::prepare()
    {
        LOGV("prepare");
        if(mMediaRecorder == NULL) {
            LOGE("media recorder is not initialized yet");
            return INVALID_OPERATION;
        }
        if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) {
            LOGE("prepare called in an invalid state: %d", mCurrentState);
            return INVALID_OPERATION;
        }
        if (mIsAudioSourceSet != mIsAudioEncoderSet) {
            if (mIsAudioSourceSet) {
                LOGE("audio source is set, but audio encoder is not set");
            } else {  // must not happen, since setAudioEncoder checks this already
                LOGE("audio encoder is set, but audio source is not set");
            }
            return INVALID_OPERATION;
        }    if (mIsVideoSourceSet != mIsVideoEncoderSet) {
            if (mIsVideoSourceSet) {
                LOGE("video source is set, but video encoder is not set");
            } else {  // must not happen, since setVideoEncoder checks this already
                LOGE("video encoder is set, but video source is not set");
            }
            return INVALID_OPERATION;
        }    status_t ret = mMediaRecorder->prepare();
        if (OK != ret) {
            LOGE("prepare failed: %d", ret);
            mCurrentState = MEDIA_RECORDER_ERROR;
            return ret;
        }
        mCurrentState = MEDIA_RECORDER_PREPARED;
        return ret;
    }应该是mMediaRecorder->prepare();出错了, 还需要跟下去看看。
      

  8.   

    LZ搞定了吗?我的搞定了!我的是freescale的imx51平台,这个问题是在从R9.1到R9.2的移植时出现的。相对于R9.1,R9.2更改并删除了大量的lib。移植完后,竟然没有mp3编码lib,所以,需要恢复。具体修改内容如下:
    1.恢复R9.1中下面两个libs:
    device\fsl\proprietary\codec\lib\libfsl_omx_mp3_enc_arm12_elinux.so
    device\fsl\proprietary\codec\lib\lib_mp3_enc_arm12_elinux.so
    2.在的make文件device\fsl\proprietary\codec\fsl-codec.mk中恢复编译项:
    lib/libfsl_omx_mp3_enc_arm12_elinux.so \
    lib/lib_mp3_enc_arm12_elinux.so \
    3.在configure文件device\fsl\proprietary\codec\conf\ComponentRegistry_MX51.txt中恢复配置项:
    libfsl_omx_mp3_enc_arm12_elinux.so Mp3Enc_ComponentInit  OMX.Freescale.std.audio_encoder.mp3.sw-based
      

  9.   

    ...没看懂你说的意思.我是做java应用层的..我是在模拟器下面跑有这个问题.机器上倒是好的.不知道你是什么环境?求详解
      

  10.   

    哦,LZ,我是做Driver的,也就是在真机上跑的。
    这个问题是我们在系统移植的过程中碰到的。