Android mediarecording错误启动失败-19 runTimeException

Rob*_*hof 8 java android runtimeexception mediarecorder android-mediarecorder

我的媒体记录存在问题.我正在尝试使用前置摄像头进行录制.这给了我一个错误(但预览工作).每当我使用后置摄像头时一切正常,我认为这很奇怪.可能是什么问题,可能是什么解决方案?我的代码和错误如下所示.

编辑.使用vga前置摄像头录制似乎不起作用.这怎么可能?虽然可以使用HTC相机应用程序录制.

提前感谢你.

protected void startRecording() throws Exception 
{
    mrec = new MediaRecorder();
    mCamera.unlock();

    mrec.setCamera(mCamera);


    mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mrec.setAudioSource(MediaRecorder.AudioSource.MIC); 

    mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
    //mrec.setPreviewDisplay(surfaceHolder.getSurface());

    File picDirectory = new File(Environment.getExternalStorageDirectory() +"/TrouwApp");
    picDirectory.mkdirs();

    File mediaStorageDir = new File(Environment.getExternalStorageDirectory() +"/TrouwApp", "Videos");

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
        }
    }

    mrec.setOutputFile( mediaStorageDir.getPath() + File.separator  + date + "_" + videonr+ ".3gp"); 

    mrec.prepare();
    mrec.start();//line 136

    Log.d(TAG, "Recording started!!");
}
Run Code Online (Sandbox Code Playgroud)

添加到清单的行:

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

错误日志:

 08-25 23:25:25.332: V/MediaRecorderJNI(4989): setup
08-25 23:25:25.362: V/MediaRecorder(4989): constructor
08-25 23:25:25.402: V/MediaRecorder(4989): doCleanUp
08-25 23:25:25.402: V/MediaRecorder(4989): setListener
08-25 23:25:25.402: V/MediaRecorderJNI(4989): setMediaRecorder E: mr = mr
08-25 23:25:25.402: V/MediaRecorderJNI(4989): setMediaRecorder X
08-25 23:25:25.402: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.402: V/MediaRecorderJNI(4989): JNIMediaRecorderListener::setCamera
08-25 23:25:25.402: V/MediaRecorder(4989): setCamera(0x16c2290,0x1c08dc8)
08-25 23:25:25.402: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.402: V/MediaRecorderJNI(4989): setVideoSource(1)
08-25 23:25:25.402: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.402: V/MediaRecorder(4989): setVideoSource(1)
08-25 23:25:25.402: V/MediaRecorder(4989): Call init() since the media recorder is not initialized yet
08-25 23:25:25.402: V/MediaRecorder(4989): init
08-25 23:25:25.412: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.412: V/MediaRecorderJNI(4989): setAudioSource(1)
08-25 23:25:25.412: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.412: V/MediaRecorder(4989): setAudioSource(1)
08-25 23:25:25.412: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.502: V/MediaRecorderJNI(4989): setOutputFormat(2)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.502: V/MediaRecorder(4989): setOutputFormat(2)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.502: V/MediaRecorderJNI(4989): setVideoFrameRate(30)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.502: V/MediaRecorder(4989): setVideoFrameRate(30)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.502: V/MediaRecorderJNI(4989): setVideoSize(1920, 1088)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.502: V/MediaRecorder(4989): setVideoSize(1920, 1088)
08-25 23:25:25.502: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.502: V/MediaRecorderJNI(4989): setParameter()
08-25 23:25:25.502: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.502: V/MediaRecorder(4989): setParameters(video-param-encoding-bitrate=12000000)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.512: V/MediaRecorderJNI(4989): setVideoEncoder(2)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.512: V/MediaRecorder(4989): setVideoEncoder(2)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.512: V/MediaRecorderJNI(4989): setParameter()
08-25 23:25:25.512: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.512: V/MediaRecorder(4989): setParameters(audio-param-encoding-bitrate=96000)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.512: V/MediaRecorderJNI(4989): setParameter()
08-25 23:25:25.512: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.512: V/MediaRecorder(4989): setParameters(audio-param-number-of-channels=1)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.512: V/MediaRecorderJNI(4989): setParameter()
08-25 23:25:25.512: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.512: V/MediaRecorder(4989): setParameters(audio-param-sampling-rate=48000)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.512: V/MediaRecorderJNI(4989): setAudioEncoder(3)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.512: V/MediaRecorder(4989): setAudioEncoder(3)
08-25 23:25:25.512: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.542: V/MediaRecorderJNI(4989): setOutputFile
08-25 23:25:25.542: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.542: V/MediaRecorder(4989): setOutputFile(60, 0, 0)
08-25 23:25:25.542: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.542: V/MediaRecorderJNI(4989): prepare
08-25 23:25:25.542: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.542: V/MediaRecorder(4989): prepare
08-25 23:25:25.542: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.542: V/MediaRecorderJNI(4989): start
08-25 23:25:25.552: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:25.552: V/MediaRecorder(4989): start
08-25 23:25:25.562: E/MediaRecorder(4989): start failed: -19
08-25 23:25:25.562: V/MediaRecorderJNI(4989): process_media_recorder_call
08-25 23:25:25.562: E/MediaRecorder(4989): start failed.
08-25 23:25:25.562: E/MediaRecorder(4989): try to delete broken file: /mnt/sdcard/TrouwApp/Videos/25-8-2013_0.3gp
08-25 23:25:25.562: D/videoActivity(4989): ERROR start failed.
08-25 23:25:25.562: D/videoActivity(4989): ERROR java.lang.RuntimeException: start failed.
08-25 23:25:25.562: D/videoActivity(4989): ERROR java.lang.RuntimeException: start failed.
08-25 23:25:25.562: V/MediaRecorderJNI(4989): release
08-25 23:25:25.562: V/MediaRecorderJNI(4989): setMediaRecorder E: mr = null
08-25 23:25:25.562: V/MediaRecorderJNI(4989): setMediaRecorder X
08-25 23:25:25.562: V/MediaRecorder(4989): setListener
08-25 23:25:25.562: V/MediaRecorder(4989): release
08-25 23:25:25.562: V/MediaRecorder(4989): destructor
08-25 23:25:25.562: D/videoActivity(4989): START RECORDING ERROR
08-25 23:25:25.562: W/System.err(4989): java.lang.RuntimeException: start failed.
08-25 23:25:25.572: W/System.err(4989):     at android.media.MediaRecorder._start(Native Method)
08-25 23:25:25.572: W/System.err(4989):     at android.media.MediaRecorder.start(MediaRecorder.java:712)
08-25 23:25:25.572: W/System.err(4989):     at com.example.trouwapp.VideoActivity.startRecording(VideoActivity.java:136)
08-25 23:25:25.572: W/System.err(4989):     at com.example.trouwapp.VideoActivity.onClick(VideoActivity.java:246)
08-25 23:25:25.572: W/System.err(4989):     at android.view.View.performClick(View.java:3549)
08-25 23:25:25.572: W/System.err(4989):     at android.view.View$PerformClick.run(View.java:14393)
08-25 23:25:25.582: W/System.err(4989):     at android.os.Handler.handleCallback(Handler.java:605)
08-25 23:25:25.582: W/System.err(4989):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-25 23:25:25.582: W/System.err(4989):     at android.os.Looper.loop(Looper.java:154)
08-25 23:25:25.582: W/System.err(4989):     at android.app.ActivityThread.main(ActivityThread.java:4945)
08-25 23:25:25.582: W/System.err(4989):     at java.lang.reflect.Method.invokeNative(Native Method)
08-25 23:25:25.582: W/System.err(4989):     at java.lang.reflect.Method.invoke(Method.java:511)
08-25 23:25:25.582: W/System.err(4989):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-25 23:25:25.582: W/System.err(4989):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-25 23:25:25.592: W/System.err(4989):     at dalvik.system.NativeStart.main(Native Method)
08-25 23:25:55.582: V/MediaRecorderJNI(4989): native_reset
08-25 23:25:55.582: V/MediaRecorderJNI(4989): getMediaRecorder E
08-25 23:25:55.582: V/MediaRecorderJNI(4989): release
08-25 23:25:55.582: V/MediaRecorderJNI(4989): setMediaRecorder E: mr = null
08-25 23:25:55.582: V/MediaRecorderJNI(4989): setMediaRecorder X
08-25 23:25:56.002: D/AndroidRuntime(4989): Shutting down VM
08-25 23:25:56.002: W/dalvikvm(4989): threadid=1: thread exiting with uncaught exception (group=0x40ac8228)

Rob*_*hof 19

找到了解决方案.由于我正在使用前置摄像头,我需要从前置摄像头获取摄像机配置文件.通过这样做我实现了:

mrec.setProfile(CamcorderProfile.get(1, CamcorderProfile.QUALITY_HIGH));
Run Code Online (Sandbox Code Playgroud)

而不是这个:

mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
Run Code Online (Sandbox Code Playgroud)

  • 首选使用Camera.CameraInfo.CAMERA_FACING_FRONT为1 (8认同)
  • 不,相机ID和CameraInfo.facing是两个不同的东西!要获得正确的ID,您应该迭代相机信息并检查哪个CameraInfo.facing等于CAMERA_FACING_FRONT. (2认同)