Android无音频录制视频
在安卓系统中,是否可以在没有音频流的情况下从摄像头录制视频Android无音频录制视频,android,android-camera,mediarecorder,android-mediarecorder,Android,Android Camera,Mediarecorder,Android Mediarecorder,在安卓系统中,是否可以在没有音频流的情况下从摄像头录制视频 目标:减少输出文件大小。您可以使用MediaRecorder,而无需调用setAudio*。这是我第一次使用MediaRecorder,但这个示例似乎有效: public class CamcorderView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private C
目标:减少输出文件大小。您可以使用MediaRecorder,而无需调用setAudio*。这是我第一次使用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)代码>
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;
}
谢谢它真的有效!也许您知道如何将此设置应用于CamcorderProfile?因为我正在使用自动生成的参数作为
camcorderProfile=camcorderProfile.get(camcorderProfile.QUALITY\u HIGH)
,然后所有设置都作为mediaRecorder.setProfile(摄像机配置文件)应用
你能提供更多信息吗,因为它不能正常工作。只需省略音频源
,不幸的是在Android 10+上不起作用<代码>MediaRecorder.prepare()失败。我一直在搜索一个在这个API级别上工作的方法,但没有成功。我没有android 10+,所以我帮不上忙。也有一段时间不做android应用了。