/**
开始录制
*/
@Override
public
MediaPart startRecord() {
if
(mMediaObject !=
null
&& mSurfaceHolder !=
null
&& !mRecording) {
MediaPart result = mMediaObject.buildMediaPart(mCameraId, ".mp4");
try
{
if
(mMediaRecorder ==
null
) {
mMediaRecorder =
new
MediaRecorder();
mMediaRecorder.setOnErrorListener(
this
);
}
else
{
mMediaRecorder.reset();
//
Step 1: Unlock and set camera to MediaRecorder
camera.unlock();
mMediaRecorder.setCamera(camera);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
//
Step 2: Set sources
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//
before setOutputFormat()
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//
before setOutputFormat()
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//
设置视频输出的格式和编码
CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
//
mMediaRecorder.setProfile(mProfile);
mMediaRecorder.setVideoSize(640, 480);
//
after setVideoSource(),after setOutFormat()
mMediaRecorder.setAudioEncodingBitRate(44100);
if
(mProfile.videoBitRate > 2 * 1024 * 1024)
mMediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
mMediaRecorder.setVideoEncodingBitRate(mProfile.videoBitRate);
mMediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);
//
after setVideoSource(),after setOutFormat()
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
//
after setOutputFormat()
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//
after setOutputFormat()
//
mMediaRecorder.setVideoEncodingBitRate(800);
//
Step 4: Set output file
mMediaRecorder.setOutputFile(result.mediaPath);
//
Step 5: Set the preview output
//
mMediaRecorder.setOrientationHint(90);
//
加了HTC的手机会有问题
Log.e("Yixia", "OutputFile:" + result.mediaPath);
mMediaRecorder.prepare();
mMediaRecorder.start();
mRecording =
true
;
return
result;
}
catch
(IllegalStateException e) {
e.printStackTrace();
Log.e("Yixia", "startRecord", e);
}
catch
(IOException e) {
e.printStackTrace();
Log.e("Yixia", "startRecord", e);
}
catch
(Exception e) {
e.printStackTrace();
Log.e("Yixia", "startRecord", e);
return
null
;
/**
停止录制
*/
@Override
public
void
stopRecord() {
long
endTime = System.currentTimeMillis();
if
(mMediaRecorder !=
null
) {
//
设置后不会崩
mMediaRecorder.setOnErrorListener(
null
);
mMediaRecorder.setPreviewDisplay(
null
);
try
{
mMediaRecorder.stop();
}
catch
(IllegalStateException e) {
Log.w("Yixia", "stopRecord", e);
}
catch
(RuntimeException e) {
Log.w("Yixia", "stopRecord", e);
}
catch
(Exception e) {
Log.w("Yixia", "stopRecord", e);
if
(camera !=
null
) {
try
{
camera.lock();
}
catch
(RuntimeException e) {
Log.e("Yixia", "stopRecord", e);
mRecording =
false
;
/**
释放资源
*/
@Override
public
void
release() {
super
.release();
if
(mMediaRecorder !=
null
) {
mMediaRecorder.setOnErrorListener(
null
);
try
{
mMediaRecorder.release();
}
catch
(IllegalStateException e) {
Log.w("Yixia", "stopRecord", e);
}
catch
(Exception e) {
Log.w("Yixia", "stopRecord", e);
mMediaRecorder =
null
;
@Override
public
void
onError(MediaRecorder mr,
int
what,
int
extra) {
try
{
if
(mr !=
null
)
mr.reset();
}
catch
(IllegalStateException e) {
Log.w("Yixia", "stopRecord", e);
}
catch
(Exception e) {
Log.w("Yixia", "stopRecord", e);
if
(mOnErrorListener !=
null
)
mOnErrorListener.onVideoError(what, extra);
代码片段引自拍摄SDK Vitamio Recorder 2.0:
http://www.cnblogs.com/over140/p/3704580.html
本文转自博客园农民伯伯的博客,原文链接:
【Android】用MediaRecorder录制视频太短崩的问题
,如需转载请自行联系原博主。
Android播放器MediaPlayer与MediaRecorder:录制音频并播放
以下以使用Android的MediaPlayer和MediaRecorder录制音频为例加以说明:
(1)Android MediaPlayer
本例以Android MediaPlayer播放Android音频资源为说明。
Android使用MediaRecorder类进行视频的录制。
需要注意,使用MediaRecorder 录音录像 的设置代码步骤一定要按照API指定的顺序来设置,否则报错
1、设置视频源,音频源,即输入源
2、设置输出格式
3、设置音视频的编码格式
一、首先看布局文件,...