2016-06-15 4 views
0

У меня есть следующий метод, чтобы начать просмотр камеры и подготовить MediaRecorderCamcorderProfile.QUALITY_HIGH не работает на конкретном устройстве

private boolean prepareVideoRecorder(){ 

    // BEGIN_INCLUDE (configure_preview) 
    //mCamera = CameraHelper.getDefaultCameraInstance(); 

    if(Utils.hasFrontCamera()) 
     mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
    else 
     mCamera = Camera.open(); 

    // We need to make sure that our preview and recording video size are supported by the 
    // camera. Query camera to find all the sizes and choose the optimal size given the 
    // dimensions of our preview surface. 
    Camera.Parameters parameters = mCamera.getParameters(); 
    List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes(); 
    Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(mSupportedPreviewSizes, 
      mSurfaceView.getWidth(), mSurfaceView.getHeight()); 


    // Use the same size for recording profile. 
    CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); 
    profile.audioChannels = 2; 
// profile.videoFrameWidth = optimalSize.width; 
// profile.videoFrameHeight = optimalSize.height; 

    Log.e("Resolution ",profile.videoFrameWidth + " - "+profile.videoFrameHeight); 
    //profile.videoBitRate = 3000000; 
    //profile.videoFrameRate = 24; 

    // likewise for the camera object itself. 
    parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight); 
    mCamera.setParameters(parameters); 
    try { 
     // Requires API level 11+, For backward compatibility use {@link setPreviewDisplay} 
     // with {@link SurfaceView} 
     mCamera.setPreviewDisplay(mSurfaceView.getHolder()); 

     if (Utils.isModeCameraLandScape(getActivity())) { 
      mCamera.setDisplayOrientation(ORIENTATIONS_LAND.get(Utils.getRotation(context))); 
      Log.e("IMAGE", "preCreateCamera land "+Utils.getRotation(context)); 
     } else { 
      mCamera.setDisplayOrientation(ORIENTATIONS_PORT.get(Utils.getRotation(context))); 
      Log.e("IMAGE", "preCreateCamera port "+Utils.getRotation(context)); 
     } 
     //mCamera.setDisplayOrientation(90); 

    } catch (IOException e) { 
     Log.e(TAG, "Surface texture is unavailable or unsuitable" + e.getMessage()); 
     return false; 
    } 
    // END_INCLUDE (configure_preview) 


    // BEGIN_INCLUDE (configure_media_recorder) 
    mMediaRecorder = new MediaRecorder(); 

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

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

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
    mMediaRecorder.setProfile(profile); 

    // Step 4: Set output file 
    String path = getVideoFile(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO).getAbsolutePath(); 
    currentFile = path; 
    mMediaRecorder.setOutputFile(path); 
    mMediaRecorder.setOrientationHint(270); 

    // END_INCLUDE (configure_media_recorder) 

    // Step 5: Prepare configured MediaRecorder 
    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 
} 

я должен был прокомментировать это, потому что, по-видимому, в определенной device я имел для испытаний (и я предположим, что происходит на других) я не мог видеть предварительный просмотр видео и я получил MediaRecorder - «Не удалось запустить: -19»

//  profile.videoFrameWidth = optimalSize.width; 
//  profile.videoFrameHeight = optimalSize.height; 

Моя проблема

Когда я установить

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); 

в

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 

камера не кажется, чтобы начать просмотр, и на Log.ei получить "E/Разрешение: 1280 - 720", но из что я видел по спецификациям device, он должен идти только до 640 - 480

Нужно ли устанавливать другие параметры?

ответ

0

Перед настройкой качества вы должны проверить, поддерживает ли камера это качество.

0

Я столкнулся с этой проблемой на связующей 6р устройства при установке QUALITY_HIGH на MediaRecorder.

Я нашел этот вопрос в вызове метода setMaxDuration() вызвало MediaRecorder врезаться со значением, которое было слишком велико.

Смежные вопросы