解决Android MediaRecorder录制视频过短问题

具体表现:

调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩。

错误信息:

java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)

解决办法:

在stop以前调用setOnErrorListener(null);就行了!

相关代码:

/** 开始录制 */ @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); else 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); }

以上就是对Android MediaRecorder 资料整理,后续继续补充,有需要的朋友可以参考下。

时间: 2024-10-07 12:41:25

解决Android MediaRecorder录制视频过短问题的相关文章

解决Android MediaRecorder录制视频过短问题_Android

具体表现:   调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩.  错误信息: java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)  解决办法:   在stop以前调用setOnErrorListener(null);就行了!  相关代码: /** 开始录制 */ @Override public Med

media ecorder-关于Android MediaRecorder 录制视频问题

问题描述 关于Android MediaRecorder 录制视频问题 谁有一个可以运行的Android 的视频录制项目啊?求!简单的能运行就行,网上找的很少信息,代码又跑不起来, 好像各个教程上面也很少说到视频录制问题,真的急求啊,本人邮箱:chenshuichuan@hotmai.com,万分感谢! 解决方案 Android Mediarecorder录制视频遇到的问题总结[Android]用MediaRecorder录制视频太短崩的问题Android多媒体应用:视频录制-MediaReco

【Android】用MediaRecorder录制视频太短崩的问题

具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩.   错误信息: java.lang.RuntimeException: stop failed.  at android.media.MediaRecorder.stop(Native Method) 解决办法: 在stop以前调用setOnErrorListener(null);就行了!   相关代码:     /** 开始录制 */     @Override     

android-Android调用mediarecorder录制视频,只能录十秒,这个怎么解决

问题描述 Android调用mediarecorder录制视频,只能录十秒,这个怎么解决 我用Eclipse做了一个视频录制软件,但是这个最多只能录制十秒的视频,调用了mediarecorder方法,public void recorder() { try { myRecAudioFile = File.createTempFile(""video"".3gp""dir); //创建临时文件 recorder.setVideoSource(Med

android录制和实时-使用MediaRecorder录制视频和实时传输

问题描述 使用MediaRecorder录制视频和实时传输 android开发,我要实现的是:在服务器端使用MediaRecorder录制mp4的视频, 同时要把数据流通过rtsp实时传输到客户端.因为MediaRecorder设置setOutputFile时, 只能选择文件或者localsocket的一种方式输出,请问要怎样才能把MediaRecorder输出的 数据流分成两份,一份用来录制视频,一份用来作流媒体的输入流? 解决方案 http://blog.csdn.net/lvjunwoai

Android 利用mediarecorder录制视频后用ThumbnailUtils类切图返回空

问题描述 Android 利用mediarecorder录制视频后用ThumbnailUtils类切图返回空 如题,因为兼容性问题,将录制时候的MediaRecorder参数如下: recorder = new MediaRecorder(); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //指定OutputFo

Android camera录制视频没有preview为什么不能成功?API21

问题描述 Android camera录制视频没有preview为什么不能成功?API21 2C http://developer.android.com/guide/topics/media/camera.html Note: It is possible to use MediaRecorder without creating a camera preview first and skip the first few steps of this process. However since

mediarecorder-关于MediaRecorder录制视频的时间问题

问题描述 关于MediaRecorder录制视频的时间问题 MediaRecorder录制视频的时间可以设置为无限制的吗? 解决方案 http://bbs.csdn.net/topics/390042886

mediarecorder-android 用MediaRecorder 录制时改变预览的界面?

问题描述 android 用MediaRecorder 录制时改变预览的界面? 请问一下,用MediaRecorder 录制视频时,当开始录制之后,我想改变预览界面的大小,有什么方法吗?(我通过 LayoutParams 来改变,虽然预览显示的界面是变化了,可是当我录制结后之后,视频播出来是在我设置LayoutParams 之后的视频画面是静止的了,只有声音,画面停住了)....请问,这又是什么问题导致的呢? 解决方案 Android调用系统摄像头--使用MediaRecorder--1--预览