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(, );//after setVideoSource(),after setOutFormat()
- mMediaRecorder.setAudioEncodingBitRate();
- if (mProfile.videoBitRate > * * )
- mMediaRecorder.setVideoEncodingBitRate( * * );
- 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录制视频太短崩的问题的更多相关文章
- 【Android】用MediaRecorder录制视频太短崩的问题
具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...
- Android使用的开发MediaRecorder录制视频
MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...
- 使用MediaRecorder录制视频短片
MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...
- Android多媒体-MediaRecorder 录制音视频
不多说,直接上代码,有具体凝视 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.a ...
- Android拍照,录制视频,相机简单功能实现
1.效果图,功能没有录制出来. 基本实现了拍照,录制视频,前后摄像头切换的功能,可以转屏,聚焦. 代码在最下面,可以看代码,运行apk看实际效果. 2.权限不能忘 <uses-permissio ...
- Android 开发 MediaRecorder使用Camera1配合录制视频
前言 MediaRecorder可以不依靠Camera API 实现视频的录制,但是如果需要切换摄像头/设置对焦/选择分辨率等等就需要Camera来参与配合录制视频.这篇博客将介绍使用Camera1来 ...
- Android音视频之MediaRecorder音视频录制
前言: 公司产品有很多地方都需要上传音频视频,今天抽空总结一下音频视频的录制.学习的主角是MediaRecorder类. MediaRecorder类介绍: MediaRecorder类是Androi ...
- Android手机录制视频 实时传输(转载)
最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...
- 【Android】 Android实现录音、播音、录制视频功能
智能手机操作系统IOS与Android平分天下(PS:WP与其他的直接无视了),而Android的免费招来了一大堆厂商分分向Android示好,故Android可能会有“较好”的前景. Android ...
随机推荐
- 解决ListCtrl控件第一列文字不能居中显示的问题/修改网格线
把CListCtrl设置为Report风格,但是插入第一列的时候(InsertColumn)的时候会发现文字不能居中.即使使用了LVCFMT_CENTER,其他列都可以正常居中,但第一列仍然靠左显示. ...
- [Node & Testing] Intergration Testing with Node Express
We have express app: import _ from 'lodash' import faker from 'faker' import express from 'express' ...
- kibana中信息分类查询显示的方法
1.什么是kibana? kibana是ELK(elasticsearch+logstash+kibana)中的K,它是一个可灵活的分析和可视化平台,主要是显示数据以及根据这些数据绘出一些可视化图表, ...
- solr索引创建流程
solr索引创建流程: 分词组件Tokenizer 分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token). 1.将文档分成一个一个单 ...
- ActiveX控件开发 C#
转自:http://hi.baidu.com/charlesx_kst/item/9c2f42e2920db3f42b09a4ff 前言: 这段时间因为工作的需要,研究了一下ActiveX控件.总结如 ...
- sampleviewer add menu item error 'assert'
可以跟踪到 mfc提供的源代码内部,(注:如果打开了mfc源代码,设置了断点,但是跟不进去,那就需要更新PDB文件,具体网上搜)打开 wincore.cpp文件(D:\Program Files\Mi ...
- POJ2029:Get Many Persimmon Trees(二维树状数组)
Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...
- 机器学习分支:active learning、incremental learning、online machine learning
1. active learning Active learning 是一种特殊形式的半监督机器学习方法,该方法允许交互式地询问用户(或者其他形式的信息源 information source)以获取 ...
- 策略模式 VS 桥梁模式
这对冤家终于碰头了,策略模式与桥梁模式是如此相似,简直就是孪生兄弟,要把它们两个分开需要花费大量智力,我们来看看两者的通用类图,如图33-1所示. 图33-1 策略模式(左)和桥梁模式(右)通用类图 ...
- JS错误记录 - fgm练习 - 函数传参
<script> window.onload = function() { var oBtn = document.getElementsByTagName('button')[0]; v ...