Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试从字段';intandroid.media.camcoderprofile.fileFormat';关于空对象引用_Android_Video_Camera_Video Recording - Fatal编程技术网

尝试从字段';intandroid.media.camcoderprofile.fileFormat';关于空对象引用

尝试从字段';intandroid.media.camcoderprofile.fileFormat';关于空对象引用,android,video,camera,video-recording,Android,Video,Camera,Video Recording,我正在使用Nexus 7 2012上的定制摄像头录制视频,并在其他设备,如Zenfone 2、Galaxy S3、S6、HTC One M7、Oppo N1、Sony Xperia M4。。。工作得很好 public static boolean prepareVideoRecorder(Context mContext, int mode) { // Should release before use new Preview for Recording Video mode C

我正在使用Nexus 7 2012上的定制摄像头录制视频,并在其他设备,如Zenfone 2、Galaxy S3、S6、HTC One M7、Oppo N1、Sony Xperia M4。。。工作得很好

public static boolean prepareVideoRecorder(Context mContext, int mode) {
    // Should release before use new Preview for Recording Video mode
    CustomCamera.releaseCamera();

    // Initialize camera
    CustomCamera.mCamera = CustomCamera.getCameraInstance(mode);

    CustomCamera.mCamera.startPreview();

    // Set orientation display
    setCameraDisplayOrientation((Activity) mContext, mode);

    // Should release before use new Preview for Recording Video mode
    CustomCamera.releaseMediaRecorder();

    CustomCamera.mMediaRecorder = new MediaRecorder();

    // Step 1: Unlock and set camera to MediaRecorder
    CustomCamera.mCamera.unlock();
    CustomCamera.mMediaRecorder.setCamera(CustomCamera.mCamera);

    // Step 2: Set sources
    CustomCamera.mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    CustomCamera.mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
    // todo NullPointerException: Attempt to read from field 'int android.media.CamcorderProfile.fileFormat' on a null object reference
    //     

   // returned true value, go inside
   if (CamcorderProfile.hasProfile(current_camera_id, CamcorderProfile.QUALITY_LOW)) {
    // CamcorderProfile.get(CamcorderProfile.QUALITY_LOW) RETURNED NULL VALUE, SO I CAN NOT SET PROFILE     
    CustomCamera.mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));

    // Step 4: Set output file - pass False value to indicate choose Video mode
    RECORDED_FILE_PATH = getOutputMediaFile(mContext, false).toString();
    CustomCamera.mMediaRecorder.setOutputFile(RECORDED_FILE_PATH);

    // Step 5: Set the preview output
    /**
     * Define Orientation of image in here,
     * if in portrait mode, use value = 90,
     * if in landscape mode, use value = 0
     */
    if (current_camera_id == define.Camera.CAMERA_BACK)
        // Back Camera
        CustomCamera.mMediaRecorder = Utils.rotateBackVideo(CustomCamera.mMediaRecorder);
    else
        // Front Camera
        CustomCamera.mMediaRecorder = Utils.rotateFrontVideo(CustomCamera.mMediaRecorder);

    // Set preview display to refresh current screen
    CustomCamera.mMediaRecorder.setPreviewDisplay(mCameraPreview.getHolder().getSurface());

    // Step 6: Prepare configured MediaRecorder
    try {
        CustomCamera.mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        CustomCamera.releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        CustomCamera.releaseMediaRecorder();
        return false;
    }

    return true;
}
我设置的这些权限:

<uses-feature android:name="android.hardware.camera.front" />
<uses-feature android:name="android.hardware.microphone"/>

<uses-permission android:name = "android.permission.CAMERA" />
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name = "android.permission.RECORD_AUDIO" />
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name = "android.permission.WRITE_INTERNAL_STORAGE" />

调用get()时必须传递摄影机id,这与调用hasProfile()时完全相同。否则,它将从它创建的第一个后摄像头获取配置文件

Nexus 7 2012因没有后置摄像头而崩溃

您需要这样做:

CustomCamera.mMediaRecorder.setProfile(CamcorderProfile.get(当前摄像头id,CamcorderProfile.QUALITY_LOW))

07-31 14:33:39.936  25960-25960/com.panasonic_Upload E/MediaRecorder﹕ setOutputFile called in an invalid state(2)
07-31 14:33:39.942  25960-25960/com.panasonic_Upload W/System.err﹕ java.lang.IllegalStateException
07-31 14:33:39.950  25960-25960/com.panasonic_Upload W/System.err﹕ at android.media.MediaRecorder._setOutputFile(Native Method)
07-31 14:33:39.950  25960-25960/com.panasonic_Upload W/System.err﹕ at android.media.MediaRecorder.prepare(MediaRecorder.java:740)
07-31 14:33:39.950  25960-25960/com.panasonic_Upload W/System.err﹕ at ui.fragment.camera.CameraPreviewFragment.prepareVideoRecorder(CameraPreviewFragment.java:533)
07-31 14:33:39.950  25960-25960/com.panasonic_Upload W/System.err﹕ at ui.fragment.camera.CameraPreviewFragment.onClick(CameraPreviewFragment.java:223)
07-31 14:33:39.950  25960-25960/com.panasonic_Upload W/System.err﹕ at android.view.View.performClick(View.java:4780)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at android.view.View$PerformClick.run(View.java:19866)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-31 14:33:39.951  25960-25960/com.panasonic_Upload W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-31 14:33:39.952  25960-25960/com.panasonic_Upload W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
 07-31 14:33:39.952  25960-25960/com.panasonic_Upload W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)