我想使用MediaRecorder
创建一个简短的视频片段,但我不知道如何使用它。
在我的清单文件中,我在application-end-tag之前添加了这些权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
</application>
当用户按下按钮时,我使用此代码创建MediaRecorder
:
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setOutputFile("myvideo.mpeg4");
try {
mRecorder.prepare();
} catch (IOException e) {
}
mRecorder.start();
}
但是当我运行该代码时,我得到一个“强制关闭 - 应用程序意外停止。请再试一次”消息。我应该如何使用MediaRecorder
以及如何调试我的应用程序以查看导致异常的原因?我是否需要向清单文件添加任何其他用户权限?
答案 0 :(得分:5)
您必须设置预览显示才能使用录像机进行视频录制。 见MediaRecorder tutorial
答案 1 :(得分:1)
首先声明权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.Camera"/>
然后在Manifestfile中
Camera cam=Camera.open();
cam.unlock();
if(recorder==null)
recorder=new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(fileName);
recorder.setPreviewDisplay(holder.getSurface());
try{
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:-1)
要宣传您的应用程序依赖于拥有相机,请在清单文件中添加标签:
<manifest ... >
<uses-feature android:name="android.hardware.camera"
android:required="true" />
...
使用相机应用程序录制视频
static final int REQUEST_VIDEO_CAPTURE = 1;
private void dispatchTakeVideoIntent() {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
}
//观看视频
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK)
{
Uri videoUri = intent.getData();
mVideoView.setVideoURI(videoUri);
}
}