Android录制无video的video

Android可以在没有audiostream的情况下从相机录制video吗?

目标:减less输出文件的大小。

Solutions Collecting From Web of "Android录制无video的video"

您可以在不调用setAudio *的情况下使用MediaRecorder。 这是我第一次使用MediaRecorder,但这个例子似乎工作:

public class CamcorderView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; private MediaRecorder mRecorder; public CamcorderView(Context context, AttributeSet attrs) { super(context, attrs); mHolder = getHolder(); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mHolder.addCallback(this); mCamera = Camera.open(); mRecorder = new MediaRecorder(); } public void stop() { mRecorder.stop(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void surfaceCreated(SurfaceHolder holder) { mCamera.unlock(); mRecorder.setCamera(mCamera); mRecorder.setPreviewDisplay(mHolder.getSurface()); // You may want to change these mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); // You'll definitely want to change this mRecorder.setOutputFile("/mnt/sdcard/out"); try { mRecorder.prepare(); } catch (IllegalStateException e) { Log.e("IllegalStateException", e.toString()); } catch (IOException e) { Log.e("IOException", e.toString()); } mRecorder.start(); } } 

你也可以打电话给:

  • setVideoSize(int, int);
  • setVideoFrameRate(int);

您可以通过从内置configuration文件(CamcorderProfile)复制必需的字段来准备MediaRecorder。 只是忽略了audio设置,你应该很好去。 编辑下面的代码为您的需要,第3步是这里的重要部分。

 private boolean prepareVideoRecorder() { mCamera = getCameraInstance(); mMediaRecorder = new MediaRecorder(); // store the quality profile required CamcorderProfile profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_HIGH); // Step 1: Unlock and set camera to MediaRecorder mCamera.unlock(); mMediaRecorder.setCamera(mCamera); // Step 2: Set sources mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set all values contained in profile except audio settings mMediaRecorder.setOutputFormat(profile.fileFormat); mMediaRecorder.setVideoEncoder(profile.videoCodec); mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); // Step 4: Set output file mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); // Step 5: Set the preview output mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder try { mMediaRecorder.prepare(); } catch (IllegalStateException e) { releaseMediaRecorder(); return false; } catch (IOException e) { releaseMediaRecorder(); return false; } return true; }