In general, I try to change the quality of the video when recording, but nothing comes out. In the logs I see use: width = 1920 height = 1080 and in fact 800x480.
@Override public void onCreate() { mRecordingStatus = false; mServiceCamera = MainActivity.mCameraBack; mSurfaceView = MainActivity.mSurfaceView; mSurfaceHolder = MainActivity.mSurfaceHolder;// для обновления изображения из фоновых потоков. super.onCreate(); } @Override public IBinder onBind( Intent intent) {//возвращает канал связи, который используют клиенты, чтобы взаимодействовать со службой. // TODO Auto-generated method stub return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); if (mRecordingStatus == false) { startRecording(); } return START_STICKY;//будет вызываться при повторном запуске сервиса после преждевременного завершения работы. } @Override public void onDestroy() { stopRecording(); mRecordingStatus = false; super.onDestroy(); } @SuppressWarnings("deprecation") public boolean startRecording() { try { Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show(); // mServiceCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); mServiceCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); //mServiceCamera = Camera.open(); Camera.Parameters params = mServiceCamera.getParameters();//получить текущие настройки камеры. params.set("cam_mode", 1); params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); mServiceCamera.setParameters(params); Camera.Parameters p = mServiceCamera.getParameters(); final List<Size> listSize = p.getSupportedPreviewSizes(); Size mPreviewSize = listSize.get(1); mPreviewSize.width = 1920; mPreviewSize.height = 1080; Log.v(TAG, "use: width = " + mPreviewSize.width + " height = " + mPreviewSize.height); p.setPreviewSize(mPreviewSize.width, mPreviewSize.height); p.setPreviewFormat(PixelFormat.YCbCr_420_SP); mServiceCamera.setParameters(p); try { mServiceCamera.setPreviewDisplay(mSurfaceHolder); mServiceCamera.startPreview(); } catch (IOException e) { Log.e(TAG, e.getMessage()); e.printStackTrace(); } mServiceCamera.lock(); mServiceCamera.unlock(); mMediaRecorder = new MediaRecorder(); mMediaRecorder.setCamera(mServiceCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); String externalFilesDir = new String(Environment.DIRECTORY_DOWNLOADS); //mMediaRecorder.setOutputFile(getExternalFilesDir(externalFilesDir) + "BLE_Video_Record_" + System.currentTimeMillis()+".mp4"); mMediaRecorder.setOutputFile( Environment.getExternalStorageDirectory().getPath() + "/video.mp4"); // mMediaRecorder.setProfile(CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH)); mMediaRecorder.setVideoFrameRate(30); // mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height); mMediaRecorder.setVideoSize(1920, 1080); // mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); mMediaRecorder.prepare(); mMediaRecorder.start(); mRecordingStatus = true; return true; } catch (IllegalStateException e) { String err = (e.getMessage() == null) ? "SD Card failed" : e.getMessage(); Log.e("sdcard-err2:", err); e.printStackTrace(); return false; } catch (IOException e) { Log.d(TAG, e.getMessage()); e.printStackTrace(); return false; } } public void stopRecording() { Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show(); try { mServiceCamera.reconnect(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (!mRecordingStatus) { return; } mMediaRecorder.stop(); mMediaRecorder.reset(); mServiceCamera.stopPreview(); mMediaRecorder.release(); mServiceCamera.release(); mServiceCamera = null; } }
Run like this:
Intent intent = new Intent(MainActivity.this, RecorderService.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startService(intent); finish();